diff --git a/.buildkite/ftr_security_serverless_configs.yml b/.buildkite/ftr_security_serverless_configs.yml index a6aca2fe7750e0..89ebb4aa12cd4c 100644 --- a/.buildkite/ftr_security_serverless_configs.yml +++ b/.buildkite/ftr_security_serverless_configs.yml @@ -77,6 +77,8 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/detections_response/user_roles/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/basic_license_essentials_tier/configs/serverless.config.ts + - x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/ess.config.ts + - x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/basic_license_essentials_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/lists_and_exception_lists/exception_lists_items/trial_license_complete_tier/configs/serverless.config.ts diff --git a/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml b/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml index 357f983339fd7a..d45ca3615b7f80 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-es-snapshots.yml @@ -22,7 +22,7 @@ spec: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' allow_rebuilds: true - branch_configuration: main 8.15 8.14 7.17 + branch_configuration: main 8.15 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/build.yml @@ -53,10 +53,6 @@ spec: cronline: 0 9 * * * America/New_York message: Daily build branch: '8.15' - Daily build (8.14): - cronline: 0 9 * * * America/New_York - message: Daily build - branch: '8.14' Daily build (7.17): cronline: 0 9 * * * America/New_York message: Daily build @@ -86,7 +82,7 @@ spec: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' allow_rebuilds: true - branch_configuration: main 8.15 8.14 7.17 + branch_configuration: main 8.15 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/promote.yml @@ -134,7 +130,7 @@ spec: ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' REPORT_FAILED_TESTS_TO_GITHUB: 'true' allow_rebuilds: true - branch_configuration: main 8.15 8.14 7.17 + branch_configuration: main 8.15 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/es_snapshots/verify.yml diff --git a/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml b/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml index d75ceba304d225..8a152095b747c0 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-on-merge-unsupported-ftrs.yml @@ -22,7 +22,7 @@ spec: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-unsupported-ftrs-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' allow_rebuilds: true - branch_configuration: main 8.15 8.14 7.17 + branch_configuration: main 8.15 7.17 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/on_merge_unsupported_ftrs.yml diff --git a/.buildkite/pipeline-resource-definitions/kibana-on-merge.yml b/.buildkite/pipeline-resource-definitions/kibana-on-merge.yml index 3240625fc16f92..a248d2a1d6497c 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-on-merge.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-on-merge.yml @@ -25,7 +25,7 @@ spec: REPORT_FAILED_TESTS_TO_GITHUB: 'true' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' allow_rebuilds: true - branch_configuration: main 7.17 8.14 8.15 + branch_configuration: main 7.17 8.15 default_branch: main repository: elastic/kibana pipeline_file: .buildkite/pipelines/on_merge.yml diff --git a/.buildkite/pipelines/sonarqube.yml b/.buildkite/pipelines/sonarqube.yml index 20f58df398ddf1..47a1f99dec20c1 100644 --- a/.buildkite/pipelines/sonarqube.yml +++ b/.buildkite/pipelines/sonarqube.yml @@ -6,4 +6,7 @@ steps: agents: image: docker.elastic.co/cloud-ci/sonarqube/buildkite-scanner:latest memory: 32G + cpu: 4 + env: + SONAR_SCANNER_JAVA_OPTS: '-Xmx16384m' command: /scan-source-code.sh diff --git a/.buildkite/scripts/steps/capture_oas_snapshot.sh b/.buildkite/scripts/steps/capture_oas_snapshot.sh index 2685cd4cd8e7fe..79dfdd96c8fc66 100755 --- a/.buildkite/scripts/steps/capture_oas_snapshot.sh +++ b/.buildkite/scripts/steps/capture_oas_snapshot.sh @@ -10,5 +10,9 @@ if is_pr && ! is_auto_commit_disabled; then cmd="$cmd --update" fi +if [[ $BUILDKITE_PULL_REQUEST != "false" && "$BUILDKITE_PULL_REQUEST_BASE_BRANCH" != "main" ]] || [[ $BUILDKITE_PULL_REQUEST == "false" && "$BUILDKITE_BRANCH" != "main" ]]; then + cmd="$cmd --no-serverless" +fi + eval "$cmd" check_for_changed_files "$cmd" true \ No newline at end of file diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 9b74215c1d1aff..9f0ed0b0829696 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-09-09 +date: 2024-09-10 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 3765a748331178..833b793009882c 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-09-09 +date: 2024-09-10 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 75416f2b51390b..3814ab06107962 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index e75750377e2005..ebcaba80960606 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-09-09 +date: 2024-09-10 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 b328d5ae6e93c0..5ab4b023c6294e 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-09-09 +date: 2024-09-10 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 557138bcc247ed..b9079fc465e980 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-09-09 +date: 2024-09-10 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 35aada553019f4..ede376dfb01e78 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 77d9851e66c687..9887985298e0d3 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-09-09 +date: 2024-09-10 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 d8cb6907d00e8b..ca0d878e90dd41 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-09-09 +date: 2024-09-10 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 c6f019bbef5ab2..73679e70714cd8 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-09-09 +date: 2024-09-10 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 ae195916db35b3..985304ad2062b7 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-09-09 +date: 2024-09-10 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 d54f4ec0383eb7..a01acd83417a8d 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-09-09 +date: 2024-09-10 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 9016e130db71f3..a2edcf2cebb729 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-09-09 +date: 2024-09-10 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 f905c358ca8a66..be85a6933e8a2c 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-09-09 +date: 2024-09-10 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 f95d851a094adf..1f7a827a8957c5 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-09-09 +date: 2024-09-10 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 40e08df1495a13..91fff71164390d 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-09-09 +date: 2024-09-10 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 095a5cfd9b9a96..8d5ccd73b42ace 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-09-09 +date: 2024-09-10 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 4c27726a8a231f..6aeeea9edba91d 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-09-09 +date: 2024-09-10 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 6c6c8af38cf3c7..1c247c2e45f8c7 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-09-09 +date: 2024-09-10 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 ea3d3a01b9f5c7..3957759aebf683 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-09-09 +date: 2024-09-10 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 9538f2bb28ebb0..7f4ecba6e52a63 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-09-09 +date: 2024-09-10 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 cbde8087a88f26..f942a39e13038a 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-09-09 +date: 2024-09-10 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 8afcab16e90e78..0b8bc0021b0483 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-09-09 +date: 2024-09-10 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 dd9a78bec2b77a..f04b7b824484ae 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-09-09 +date: 2024-09-10 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 625922fe06ef1a..0b4707a3707057 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-09-09 +date: 2024-09-10 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 00e226157a6bc3..55a807e923f763 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-09-09 +date: 2024-09-10 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 587d734a84ef82..5c43988c54e0de 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-09-09 +date: 2024-09-10 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 670a5e7590e877..b4b92905714a2b 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-09-09 +date: 2024-09-10 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 125af3f67e47e4..d87d9210448836 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-09-09 +date: 2024-09-10 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 9a195fc871623a..79571f9fa828bb 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-09-09 +date: 2024-09-10 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 e643fdb37bba38..dbe3282f7f588d 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-09-09 +date: 2024-09-10 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 43cba9d3068006..baaada9d3c0ac6 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-09-09 +date: 2024-09-10 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 a79a17f0fa0a66..85b6c3f3da2a0f 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-09-09 +date: 2024-09-10 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 b0df6d4228bba9..16320a95d6ef94 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index d05a0c99d588dc..6929f8afd39a1c 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index e4abcc52583f04..6f7bdf9383c727 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index b93275f66aed86..5d1881c8ce7757 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-09-09 +date: 2024-09-10 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 907582fcefcd63..9c39eea570a4b2 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-09-09 +date: 2024-09-10 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 3d0f7193d24385..d462cd012d0172 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-09-09 +date: 2024-09-10 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 9f2066a440e4cd..8c6fe60db0c5af 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-09-09 +date: 2024-09-10 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 8172cdc18a4850..426c2953fc92f4 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-09-09 +date: 2024-09-10 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 345d74a1652340..05351345a67358 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-09-09 +date: 2024-09-10 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 af0f879a596ac4..55e133eae709ad 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-09-09 +date: 2024-09-10 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 94990af0f8d787..8d4b296df26bcd 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-09-09 +date: 2024-09-10 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 074d0fa2cdadc8..c84f4ce7206ae0 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-09-09 +date: 2024-09-10 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 b1b194d0c234c3..74de8c563db10d 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index df4de059afcd9f..98f2a40d001959 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 80ee270e7ab26f..04c2a8b294ac16 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index f4e5beaae48847..519d118df65504 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-09-09 +date: 2024-09-10 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 a7ee731c4aeec9..baf88b5510d4bf 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-09-09 +date: 2024-09-10 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 1b122ab9de02cb..4388bc9425e49f 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-09-09 +date: 2024-09-10 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 e2eebc159a6d91..88cdd46726828d 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-09-09 +date: 2024-09-10 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 cfd2863d47ff4f..d8b1fca31c74f2 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-09-09 +date: 2024-09-10 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 b7d3d95a3d2b3e..4234b305028323 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-09-09 +date: 2024-09-10 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 a4a963af5466fb..1d5979590ba176 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-09-09 +date: 2024-09-10 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 c33623ff14158f..74d0b4100b0f87 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-09-09 +date: 2024-09-10 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 bd0e791f35b883..f71f5e107908db 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-09-09 +date: 2024-09-10 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 467d0c45300b22..338bfa92898e2c 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-09-09 +date: 2024-09-10 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 4af6d97d2aa6d3..cca2a919c6bd4e 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-09-09 +date: 2024-09-10 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 82a24c70387cdc..7a32d735778424 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-09-09 +date: 2024-09-10 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 94d013f58b7f6a..924473cbf90f6e 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-09-09 +date: 2024-09-10 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 2ca54fb6b7a0ad..88a9bb62ae4c11 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-09-09 +date: 2024-09-10 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 999a677e020560..92bea522025cd2 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-09-09 +date: 2024-09-10 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 4bb083e516ff89..8920091fe188bd 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-09-09 +date: 2024-09-10 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 d89a49a6bb2ef1..39698e2e52c239 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.devdocs.json b/api_docs/expression_shape.devdocs.json index e8b61456d0dd66..2001cc78cbd926 100644 --- a/api_docs/expression_shape.devdocs.json +++ b/api_docs/expression_shape.devdocs.json @@ -1697,7 +1697,7 @@ "label": "ShapeDrawerProps", "description": [], "signature": [ - "{ shapeType: string; getShape: (shapeType: string) => { Component: ({ shapeAttributes, shapeContentAttributes, children, textAttributes, }: ", + "{ shapeType: string; getShape: (shapeType: string) => { Component: ({ shapeAttributes, shapeContentAttributes, children, textAttributes, }: React.PropsWithChildren<", { "pluginId": "expressionShape", "scope": "public", @@ -1705,7 +1705,7 @@ "section": "def-public.ShapeProps", "text": "ShapeProps" }, - ") => JSX.Element; data: ", + ">) => JSX.Element; data: ", { "pluginId": "expressionShape", "scope": "public", @@ -1815,7 +1815,7 @@ "label": "ShapeType", "description": [], "signature": [ - "{ Component: ({ shapeAttributes, shapeContentAttributes, children, textAttributes, }: ", + "{ Component: ({ shapeAttributes, shapeContentAttributes, children, textAttributes, }: React.PropsWithChildren<", { "pluginId": "expressionShape", "scope": "public", @@ -1823,7 +1823,7 @@ "section": "def-public.ShapeProps", "text": "ShapeProps" }, - ") => JSX.Element; data: ", + ">) => JSX.Element; data: ", { "pluginId": "expressionShape", "scope": "public", diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 61ea26d84e4474..a3d261b62aefb0 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-09-09 +date: 2024-09-10 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 a724ef4516cc2e..b1d06d6bb4171c 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-09-09 +date: 2024-09-10 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 1c03094b806577..1e27b6346dd976 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-09-09 +date: 2024-09-10 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 551638f1317052..05e8225f3ebeb3 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-09-09 +date: 2024-09-10 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 85681df4898096..ca481718384ba4 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-09-09 +date: 2024-09-10 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 11a6921f153c59..780c325f6c8095 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-09-09 +date: 2024-09-10 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 a1342391d0ac12..f25f13202b8bb1 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-09-09 +date: 2024-09-10 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 3c513c2960e219..6811c80dcea196 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index b320a663eaa52c..15a927517d28ad 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-09-09 +date: 2024-09-10 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 14dffd64c2dd02..278d6e7ac41999 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-09-09 +date: 2024-09-10 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 9b7217bf68589e..50514d52df2833 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-09-09 +date: 2024-09-10 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 af87aca6891d51..89d987f33c909f 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-09-09 +date: 2024-09-10 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 59d07cbebbf7bb..232339a4f050ac 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-09-09 +date: 2024-09-10 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 003bb910e00d08..ee5fa34a529529 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-09-09 +date: 2024-09-10 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 eca18f5a5bbd52..54ad0db21552df 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-09-09 +date: 2024-09-10 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 17f8f8917c0831..3fa9f893bb9e60 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-09-09 +date: 2024-09-10 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 38051b7d9b5199..57656de783f064 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index b89e49e116b15f..29fb688ff81066 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index df0dfd6857eea3..411e22d5903b2e 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-09-09 +date: 2024-09-10 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 d9d52b161ecce9..feec1c6550d839 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-09-09 +date: 2024-09-10 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 bd7c47177560c7..98a9256554e7fc 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-09-09 +date: 2024-09-10 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 02018e9750c4a9..6bb0c558b5ccf3 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-09-09 +date: 2024-09-10 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 343e35c6bf5148..f3fb201caec718 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-09-09 +date: 2024-09-10 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 ce4fa913b699f3..ad8bb4a6392a27 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-09-09 +date: 2024-09-10 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 d54c1f068469cf..3066bffadce24b 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-09-09 +date: 2024-09-10 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 d0f197a6a319f4..13aa012a09aa85 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-09-09 +date: 2024-09-10 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 bdec2e6547038a..ec891cce08afd9 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-09-09 +date: 2024-09-10 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 d9b504a347424b..c8e600a4e11a07 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-09-09 +date: 2024-09-10 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 09d3bafa964084..d07c5d201158ce 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-09-09 +date: 2024-09-10 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 d4825c759b0be7..f96db55bbde74e 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-09-09 +date: 2024-09-10 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 fb97a4da3bae00..5ec3b751b9bbcc 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-09-09 +date: 2024-09-10 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 4644d132776c67..55bac785e0303a 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-09-09 +date: 2024-09-10 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 88652bad9e89bd..85eb3781fd400d 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-09-09 +date: 2024-09-10 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 1e778eb7ce4c44..2230f3ca9f17b5 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-09-09 +date: 2024-09-10 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.devdocs.json b/api_docs/kbn_alerts_as_data_utils.devdocs.json index 1c4d1538c9a3b5..2f6d423f510407 100644 --- a/api_docs/kbn_alerts_as_data_utils.devdocs.json +++ b/api_docs/kbn_alerts_as_data_utils.devdocs.json @@ -196,7 +196,7 @@ "label": "AADAlert", "description": [], "signature": [ - "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" + "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/index.ts", "deprecated": false, @@ -211,7 +211,7 @@ "label": "Alert", "description": [], "signature": [ - "{ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts", "deprecated": false, @@ -249,7 +249,7 @@ "section": "def-common.MultiField", "text": "MultiField" }, - "[]; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.severity_improving\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.url\": { readonly type: \"keyword\"; readonly array: false; readonly index: false; readonly required: false; readonly ignore_above: 2048; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.workflow_tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.workflow_assignee_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"event.action\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.kind\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.original\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly tags: { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" + "[]; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.intended_timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.severity_improving\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.url\": { readonly type: \"keyword\"; readonly array: false; readonly index: false; readonly required: false; readonly ignore_above: 2048; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.workflow_tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.workflow_assignee_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"event.action\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.kind\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.original\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly tags: { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" ], "path": "packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts", "deprecated": false, @@ -264,7 +264,7 @@ "label": "DefaultAlert", "description": [], "signature": [ - "{} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/default_schema.ts", "deprecated": false, @@ -330,7 +330,7 @@ "label": "MlAnomalyDetectionAlert", "description": [], "signature": [ - "{ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/ml_anomaly_detection_schema.ts", "deprecated": false, @@ -345,7 +345,7 @@ "label": "MlAnomalyDetectionHealthAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/ml_anomaly_detection_health_schema.ts", "deprecated": false, @@ -360,7 +360,7 @@ "label": "ObservabilityApmAlert", "description": [], "signature": [ - "{} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'agent.name'?: string | undefined; 'container.id'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_apm_schema.ts", "deprecated": false, @@ -375,7 +375,7 @@ "label": "ObservabilityLogsAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_logs_schema.ts", "deprecated": false, @@ -390,7 +390,7 @@ "label": "ObservabilityMetricsAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_metrics_schema.ts", "deprecated": false, @@ -405,7 +405,7 @@ "label": "ObservabilitySloAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts", "deprecated": false, @@ -420,7 +420,7 @@ "label": "ObservabilityUptimeAlert", "description": [], "signature": [ - "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; configId?: string | undefined; 'error.message'?: string | undefined; 'host.name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'location.id'?: string | undefined; 'location.name'?: string | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.tags'?: string[] | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts", "deprecated": false, @@ -435,7 +435,7 @@ "label": "SecurityAlert", "description": [], "signature": [ - "{ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts", "deprecated": false, @@ -450,7 +450,7 @@ "label": "StackAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.evaluation.conditions'?: string | undefined; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | undefined; 'kibana.alert.title'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; }" + "{} & { 'kibana.alert.evaluation.conditions'?: string | undefined; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | undefined; 'kibana.alert.title'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/stack_schema.ts", "deprecated": false, @@ -465,7 +465,7 @@ "label": "TransformHealthAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'event.original'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.intended_timestamp'?: string | number | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.previous_action_group'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.timestamp'?: string | number | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.severity_improving'?: boolean | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/transform_health_schema.ts", "deprecated": false, @@ -490,7 +490,7 @@ "section": "def-common.MultiField", "text": "MultiField" }, - "[]; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.severity_improving\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.url\": { readonly type: \"keyword\"; readonly array: false; readonly index: false; readonly required: false; readonly ignore_above: 2048; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.workflow_tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.workflow_assignee_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"event.action\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.kind\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.original\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly tags: { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" + "[]; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.intended_timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.severity_improving\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.url\": { readonly type: \"keyword\"; readonly array: false; readonly index: false; readonly required: false; readonly ignore_above: 2048; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.workflow_tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.workflow_assignee_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"event.action\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.kind\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"event.original\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly ignore_above: 1024; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly tags: { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" ], "path": "packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts", "deprecated": false, diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 00515e4d8a5db1..3ee4290efaf519 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-09-09 +date: 2024-09-10 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 cd797e87ff81d9..d2e481710fdd07 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-09-09 +date: 2024-09-10 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 e04bab4134dc71..7362978ebeb9ac 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-09-09 +date: 2024-09-10 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 a1140937c6a5ee..846f09987a97e9 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-09-09 +date: 2024-09-10 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 a8599dd6777afb..68f3bff29f0aa3 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-09-09 +date: 2024-09-10 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.mdx b/api_docs/kbn_apm_config_loader.mdx index 1246d54c41fbb8..5caf5b62377d3d 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 0e32e59c364756..7da6a1b35eaa54 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-09-09 +date: 2024-09-10 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 cbf4b44775ce2e..18962368d6903e 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-09-09 +date: 2024-09-10 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 d28d0063cc3aa0..6c2da342b88eab 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-09-09 +date: 2024-09-10 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_types.devdocs.json b/api_docs/kbn_apm_types.devdocs.json index 80751cb9f88857..cbf59b082dbf34 100644 --- a/api_docs/kbn_apm_types.devdocs.json +++ b/api_docs/kbn_apm_types.devdocs.json @@ -3632,6 +3632,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/apm-types", + "id": "def-common.LOG_LEVEL", + "type": "string", + "tags": [], + "label": "LOG_LEVEL", + "description": [], + "signature": [ + "\"log.level\"" + ], + "path": "packages/kbn-apm-types/src/es_fields/apm.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/apm-types", "id": "def-common.Metric", diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index a80e823fa3afe7..a9c51f3879b868 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 316 | 0 | 315 | 0 | +| 317 | 0 | 316 | 0 | ## Common diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index d378f813de5c85..e70d8b706614f1 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-09-09 +date: 2024-09-10 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 9bc5da946be1b2..13f279ae89d4cc 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-09-09 +date: 2024-09-10 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 63b329bb6df210..6a64887ffb7bcd 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-09-09 +date: 2024-09-10 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 0df59779f11df4..16e6dee22640e1 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-09-09 +date: 2024-09-10 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 8c29b291c01c6b..d86552edf5b250 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-09-09 +date: 2024-09-10 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 1d5b5edc5b7849..bbf9f6e216c199 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-09-09 +date: 2024-09-10 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 c1ad4e5204cc47..613f08afa44f6b 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 0a414c2c23e5d1..0024cf0916a3c1 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 5f8874148ba9b2..91df1f48037f20 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-09-09 +date: 2024-09-10 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 ee3e72ce84bd49..9e7658a67a0520 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-09-09 +date: 2024-09-10 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 406f0b65d88945..a183fba9e5d4f9 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-09-09 +date: 2024-09-10 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 52420f80e69bca..c91ee27353ff72 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-09-09 +date: 2024-09-10 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 dc2d8cd6cf4da7..0505c4ee5fa8ae 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-09-09 +date: 2024-09-10 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 1a092cc6cce909..ddd8844e92d7ed 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index d56545841c69ca..5b39835cbd43cb 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 0a445288cdf908..f2df6e88395197 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.devdocs.json b/api_docs/kbn_cloud_security_posture_common.devdocs.json index e4e79e89e16646..9d4b881e55cb5b 100644 --- a/api_docs/kbn_cloud_security_posture_common.devdocs.json +++ b/api_docs/kbn_cloud_security_posture_common.devdocs.json @@ -343,6 +343,20 @@ "path": "x-pack/packages/kbn-cloud-security-posture-common/types/status.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.hasVulnerabilitiesFindings", + "type": "CompoundType", + "tags": [], + "label": "hasVulnerabilitiesFindings", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types/status.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index a8c0af9b2092dc..abe8d53f1d08df 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 56 | 0 | 55 | 0 | +| 57 | 0 | 56 | 0 | ## Common diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index dc4b44d76dc3e4..2a9f3189cb84f1 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-09-09 +date: 2024-09-10 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 8f58cb0b469a81..d0e100a1e149b4 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-09-09 +date: 2024-09-10 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 ff76576856c648..3686ef774e7d8d 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-09-09 +date: 2024-09-10 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 00079181565cab..511b7b4ba537d9 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 4fbdd1e4852d70..1aa4e70398b42b 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 7f0a6a0896d63d..d43225d51a5190 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-09-09 +date: 2024-09-10 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 cecf94534b1e8d..cfe6cbd9d49c23 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-09-09 +date: 2024-09-10 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 8db965b42e5fd1..5977510683129c 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-09-09 +date: 2024-09-10 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_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 7b05e9a46374be..55c9b20fc082b3 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index dd3671442c5f1c..f8f4811e171932 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.devdocs.json b/api_docs/kbn_content_management_favorites_public.devdocs.json index 29fe90dd21c3fc..e7c64f1fedd241 100644 --- a/api_docs/kbn_content_management_favorites_public.devdocs.json +++ b/api_docs/kbn_content_management_favorites_public.devdocs.json @@ -400,7 +400,7 @@ "label": "FavoritesContextProvider", "description": [], "signature": [ - "({ favoritesClient, notifyError, children, }: React.PropsWithChildren) => JSX.Element" + "({ favoritesClient, notifyError, children, }: React.PropsWithChildren>) => JSX.Element" ], "path": "packages/content-management/favorites/favorites_public/src/favorites_context.tsx", "deprecated": false, @@ -414,7 +414,7 @@ "label": "{\n favoritesClient,\n notifyError,\n children,\n}", "description": [], "signature": [ - "React.PropsWithChildren" + "React.PropsWithChildren>" ], "path": "packages/content-management/favorites/favorites_public/src/favorites_context.tsx", "deprecated": false, diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index c23270a9be262a..1bd273a8ddf86a 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 5901b7af6edbda..6638ce967d6053 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.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 76a42d49ebd247..1a7c7c463920d0 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-09-09 +date: 2024-09-10 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 16d6ae374b303f..f0a322670df99b 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-09-09 +date: 2024-09-10 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 888e47e2adf142..0f3b5859594542 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-09-09 +date: 2024-09-10 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 e05274fd36907c..a5f4fa6d97d095 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-09-09 +date: 2024-09-10 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 08fee78aafa3ef..e7020a9796cbe5 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-09-09 +date: 2024-09-10 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 e935d8ed9333af..4dff5eb25bb509 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index e4687a0817e46d..aed90744961f25 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index d1c7effd211c4d..19389d8b0d6c22 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-09-09 +date: 2024-09-10 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 a5edc3bfb07d05..4db9a3a51bc250 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 5a09c61d6251ba..b5b1c1ad14e953 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 9c1a3664274599..6237d36366e227 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-09-09 +date: 2024-09-10 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 a31e801ce5bf9f..1204aec929dcfe 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-09-09 +date: 2024-09-10 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 c6e1bbf8943a8c..18f10285f3b3f0 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-09-09 +date: 2024-09-10 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 14e6426799688c..939fd60781d83f 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-09-09 +date: 2024-09-10 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 001dc911b2ef9d..8e8bd0e4aeb0b2 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-09-09 +date: 2024-09-10 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 22ac5f5798e398..219ba45d8185e2 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 4b97a6e05bc4d5..d305ef128d5ba1 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-09-09 +date: 2024-09-10 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 11b1f453827d92..e2af3b9eacc669 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-09-09 +date: 2024-09-10 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 f22fe6f1b364cf..ef665831c9cd2c 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-09-09 +date: 2024-09-10 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 14c78c16861c73..8565d61b4493b5 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-09-09 +date: 2024-09-10 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 ba34af1f2b3bf7..0cfc2aee9fc3d8 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-09-09 +date: 2024-09-10 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 09a749d6e1f084..7f19d0af0aef8a 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index d5d5eadb513559..2f87a8f74f43a8 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-09-09 +date: 2024-09-10 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 2c48413bf0f944..6bf97ce607714f 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-09-09 +date: 2024-09-10 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 8c8f5c1cd13fd9..0648567ea50fdd 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-09-09 +date: 2024-09-10 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 375045243ee48f..07d60fc58e9141 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-09-09 +date: 2024-09-10 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 231796339d8da5..220fe37ed627a8 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-09-09 +date: 2024-09-10 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 ee69a0a8f9466b..15887c3125709d 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-09-09 +date: 2024-09-10 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 af6236d3e049c1..4c7d16698bc014 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index f19c5bc4057d0b..75e3f924c971e2 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-09-09 +date: 2024-09-10 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 d2b31e8353f96c..e6886620a4047a 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-09-09 +date: 2024-09-10 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 7a06635a051784..ab30d7ca940607 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-09-09 +date: 2024-09-10 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 a2815a27c7faac..01c116760ad03f 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-09-09 +date: 2024-09-10 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 900a4573f3a6e7..ad33fe28d46ece 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-09-09 +date: 2024-09-10 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 d2075559f25c8f..259673b32012a7 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-09-09 +date: 2024-09-10 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 32bd3d60106e24..8f32eaef1e8a90 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-09-09 +date: 2024-09-10 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 810cf13ba99eec..bd6e4aef06024b 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-09-09 +date: 2024-09-10 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 a4d49718d92c48..107de83cb7ea4d 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-09-09 +date: 2024-09-10 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 89d13fc6183e8b..d94a697970500d 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-09-09 +date: 2024-09-10 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 cb37c2c2c87ea9..944a8cc9e1f397 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-09-09 +date: 2024-09-10 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 92100b6e407461..4392e40460ee9f 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-09-09 +date: 2024-09-10 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 052d076da12f12..a5fab792019bf4 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-09-09 +date: 2024-09-10 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 a60509b0fbcfde..0d94027a92b94d 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-09-09 +date: 2024-09-10 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 254b8bb6c61271..ca450f3194ffcf 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-09-09 +date: 2024-09-10 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 0aa9c663c6b257..6f410cb24d996a 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-09-09 +date: 2024-09-10 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 f061c636673846..7c8c62da304b4c 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-09-09 +date: 2024-09-10 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 51117eb5da0a60..5bba7fc53e07ae 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-09-09 +date: 2024-09-10 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 5ce8c599b7d4a6..7551a721620313 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-09-09 +date: 2024-09-10 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 4cf467877f5880..237ef6d4d0b0bd 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-09-09 +date: 2024-09-10 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 8eed1b04364a32..7c35bb823a21b8 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-09-09 +date: 2024-09-10 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 de380f72e78753..c78c2e6a6b68cf 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-09-09 +date: 2024-09-10 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 c435c4eda90028..1455076758a6d1 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-09-09 +date: 2024-09-10 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 0b60811d265c47..ebce40f111756b 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-09-09 +date: 2024-09-10 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 803f0b69ccdbe8..14621982aae072 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-09-09 +date: 2024-09-10 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 646583e59181d8..b49ec0910288c2 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-09-09 +date: 2024-09-10 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 7b26443b72a8da..af03a69ef898d3 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-09-09 +date: 2024-09-10 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 29f8f17bc23a47..6366768433a8be 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-09-09 +date: 2024-09-10 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 96f1d514f681b7..43b38bdc7c0473 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-09-09 +date: 2024-09-10 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 4f4b57c96a594e..8a905a9e0e8748 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-09-09 +date: 2024-09-10 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 308af10597171a..021ae25c3c9716 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-09-09 +date: 2024-09-10 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 195e2c5b4167e5..a7d3bda404387c 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-09-09 +date: 2024-09-10 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 a2c66a609363e3..fcb047c3337fe4 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-09-09 +date: 2024-09-10 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 d9b6e3791f941d..bade86dd25f191 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-09-09 +date: 2024-09-10 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 674b4039b72309..da730a9e4ef69f 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-09-09 +date: 2024-09-10 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 aee9bcf2606040..2ead816b4e5d10 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-09-09 +date: 2024-09-10 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 fba9e46a95b351..f0a4f62ea116de 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-09-09 +date: 2024-09-10 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 5ec7045bee083b..d2b68b0cc0f2ac 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-09-09 +date: 2024-09-10 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 0d818cf2e30915..bd99d170c7ac62 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-09-09 +date: 2024-09-10 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 3f2c33b3cc5a96..2d8b10fc232af2 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-09-09 +date: 2024-09-10 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 abf96e13c937b5..e3d84ebaba20f1 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-09-09 +date: 2024-09-10 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 9810efe97a3257..2a46d7e2f745d5 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-09-09 +date: 2024-09-10 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 f19f55a90acd89..3d5bb3881a3d98 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-09-09 +date: 2024-09-10 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 5663fecd8d706d..b79e31caf2bca4 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-09-09 +date: 2024-09-10 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 512c0379639424..01841b9878f04f 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-09-09 +date: 2024-09-10 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 d0a93a0c3446a9..f5353818d63445 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-09-09 +date: 2024-09-10 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 700065b55f4090..04bc596aadb0ef 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -7220,6 +7220,10 @@ "plugin": "rollup", "path": "x-pack/plugins/rollup/server/routes/api/search/register_search_route.ts" }, + { + "plugin": "searchIndices", + "path": "x-pack/plugins/search_indices/server/routes/indices.ts" + }, { "plugin": "searchPlayground", "path": "x-pack/plugins/search_playground/server/routes.ts" @@ -19582,7 +19586,7 @@ "section": "def-server.RouteValidatorFullConfigRequest", "text": "RouteValidatorFullConfigRequest" }, - " | ", + " | (", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -19590,7 +19594,7 @@ "section": "def-server.RouteValidatorRequestAndResponses", "text": "RouteValidatorRequestAndResponses" }, - "" + " & NotRouteValidatorFullConfigRequest)" ], "path": "packages/core/http/core-http-server/src/router/route_validator.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 305a523137e703..c2065002d88c5e 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-09-09 +date: 2024-09-10 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 a3bb37f3bdaf5f..2f9e754ea42374 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-09-09 +date: 2024-09-10 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 77cfc215b0c3b2..796f5b643b9cb2 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-09-09 +date: 2024-09-10 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 37965bb9c7f805..be46da808f0e7a 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-09-09 +date: 2024-09-10 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 8c8cc66b359f3a..7f08edd3828ea1 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-09-09 +date: 2024-09-10 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 114710bd96ce01..bf30afbf79a495 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-09-09 +date: 2024-09-10 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 50ddd4326fc404..b5025b2e2fe2cd 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-09-09 +date: 2024-09-10 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 51fc49be897ae0..eae501fe24f312 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-09-09 +date: 2024-09-10 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 47c678ed12c3e8..d176ae67febd14 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-09-09 +date: 2024-09-10 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 48883dc50c1049..fdbfa48d7ecee5 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-09-09 +date: 2024-09-10 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 beeba69e5823a5..799a4dcc219979 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index a143cfec989d86..829cedeba977f6 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-09-09 +date: 2024-09-10 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 b6577a9d8ba0f5..c2d19c4e0681a6 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index ce8aa1692fb7fe..a444dff176be4b 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-09-09 +date: 2024-09-10 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 63e42ee6f922d8..532310b00c7265 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-09-09 +date: 2024-09-10 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 aa9807b5b49361..ca7a2def156e59 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-09-09 +date: 2024-09-10 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 1157e9897da713..25bda6c14c331b 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-09-09 +date: 2024-09-10 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 babd582b2614ac..0bbcdb72b9b397 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-09-09 +date: 2024-09-10 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 164d0382a3b162..f2fe2b1db242fa 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-09-09 +date: 2024-09-10 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 2b0dd1e238f586..e9767ab28968d2 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-09-09 +date: 2024-09-10 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 6a0c8292d994a2..a68a5c87ac1ec5 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-09-09 +date: 2024-09-10 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 1a929336300724..1db5afe8df5783 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-09-09 +date: 2024-09-10 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 16c501992fe273..3f06f88ac1bc21 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-09-09 +date: 2024-09-10 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 1fe6154aad1275..3bfc4d82e2c70b 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-09-09 +date: 2024-09-10 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 72203fdc87dfc5..10aff84c724601 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-09-09 +date: 2024-09-10 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 95bebd3d51f2ce..a333d19e6b51fb 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-09-09 +date: 2024-09-10 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 88904266d14862..38082ee137ae33 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-09-09 +date: 2024-09-10 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 10778e17059098..5f38560f72e657 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-09-09 +date: 2024-09-10 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 a91a623bf1e46e..d5e8d108aab861 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-09-09 +date: 2024-09-10 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 f6ca73199f1d79..938838606340f7 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-09-09 +date: 2024-09-10 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 b5122c273f5e8e..f925c8646ef947 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-09-09 +date: 2024-09-10 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 944db141d37ad0..fa21e114bc1573 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index a3d9f3ff7f42ed..5890a985f2c7cf 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-09-09 +date: 2024-09-10 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 e6212d372c040e..dd5c7363205ede 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-09-09 +date: 2024-09-10 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 051f9972c6c8cf..a40594c46ed170 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 4b779a888920d1..59b42ed430d7d1 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 3682518755932f..bed43dd74c5047 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-09-09 +date: 2024-09-10 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 656dd2c74bfcc0..c501bae3cb0c43 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-09-09 +date: 2024-09-10 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 1640ad14078ff3..bc1b82a659be38 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index e78b0ee0c59631..a5ed21b721c4fd 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-09-09 +date: 2024-09-10 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 9eca664c05e512..0f8e5247615e2e 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-09-09 +date: 2024-09-10 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 25e98e97d68c0f..e7f44bf3dcdd14 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-09-09 +date: 2024-09-10 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 ee4d86e4183094..1221604910f0f7 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-09-09 +date: 2024-09-10 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 de872b15cc1d84..f292da44c446a1 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-09-09 +date: 2024-09-10 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 8aa4322de0deb7..3ae3b6289d4106 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-09-09 +date: 2024-09-10 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 a10457101bb4cf..eea5ba05970fff 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index d384d1aec15d19..d9cb13984f252b 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-09-09 +date: 2024-09-10 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 16a96f04852810..7ea4ceb50510fb 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-09-09 +date: 2024-09-10 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 bb1210bc2876c8..9db5c589ab5b65 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-09-09 +date: 2024-09-10 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 65beb66f491e16..e49645982fcdd2 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-09-09 +date: 2024-09-10 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 edb0fe1aedec27..0257b13c9168ea 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-09-09 +date: 2024-09-10 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 c4f9e3590cf811..af9ed04a87b822 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-09-09 +date: 2024-09-10 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 1a2c7dec791554..3c8641102bba61 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-09-09 +date: 2024-09-10 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 2ea28bf77a3972..678f9c7ef19d23 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-09-09 +date: 2024-09-10 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 b49189fb8d9b29..8d55e01e969cee 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-09-09 +date: 2024-09-10 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 1e3b582bc29ff8..fa6b96558e998a 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-09-09 +date: 2024-09-10 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 14beb9941b588c..619c6351fbc682 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-09-09 +date: 2024-09-10 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 7d98f13bd1d679..62d2718ebc507a 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-09-09 +date: 2024-09-10 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 69764abe9f49df..98ce133c480776 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-09-09 +date: 2024-09-10 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 6ed6d8c2967a71..6b01a754eac7fe 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-09-09 +date: 2024-09-10 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 addddb9de04e25..11ebc9f206e0b5 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-09-09 +date: 2024-09-10 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 e3b915eda3edea..784530e31217ab 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-09-09 +date: 2024-09-10 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 38f046d9e0bb53..47c9e0ba1f1bc2 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-09-09 +date: 2024-09-10 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 87b15b02b89ed4..4bd8b4e496c2a4 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-09-09 +date: 2024-09-10 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 aafa86bde13f1a..88685a618d191c 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-09-09 +date: 2024-09-10 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 787c9d869eaa42..662a3a76da8c13 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-09-09 +date: 2024-09-10 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 d2827a1361c76a..18a25ff484df4c 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-09-09 +date: 2024-09-10 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 09ca66153e49b0..38cec98ed4c35e 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-09-09 +date: 2024-09-10 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 1fbed19df143b3..d136b8969bfd8b 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-09-09 +date: 2024-09-10 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 e6f267cc53efed..3e8fe9982dd053 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-09-09 +date: 2024-09-10 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 d769e07b16c53a..f0781eca252424 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-09-09 +date: 2024-09-10 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 0e67c8fe13bd92..347d493d355f6d 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-09-09 +date: 2024-09-10 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 d9c9f48d473539..d6bbc2f78f6700 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-09-09 +date: 2024-09-10 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 2750746405253b..33b8b5400a108c 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 60de097f952608..0a4480fdfec8d3 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-09-09 +date: 2024-09-10 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 3b973e133f17d8..aa305fe43b8579 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index bd4119e40b788b..ffd65b52219154 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-09-09 +date: 2024-09-10 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 2f6d4257e92d00..e040197f3661b0 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-09-09 +date: 2024-09-10 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 9ce1344dcab82b..01c5e447d03313 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-09-09 +date: 2024-09-10 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 46df07f162d121..adba88872c3c75 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-09-09 +date: 2024-09-10 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 ac3a5b975bf212..1a3aa2cfa58b79 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-09-09 +date: 2024-09-10 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 7065fea0fb2f9b..bd6f9bf5d2316f 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-09-09 +date: 2024-09-10 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 c3732b71bbca32..19fd0e7616da6c 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-09-09 +date: 2024-09-10 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 c95cb1af05cd25..8ad84e0d31df13 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-09-09 +date: 2024-09-10 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 4c13a21942397b..9862043c1a0a8a 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-09-09 +date: 2024-09-10 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 2df6d8b25136d8..c987af7c04b2db 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-09-09 +date: 2024-09-10 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 2d67e643b87fca..28c5acbd27b7f1 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-09-09 +date: 2024-09-10 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 42bfc90f65cd76..297d4c6957d752 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-09-09 +date: 2024-09-10 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 e039d57c70f82d..86510f4f0cf20d 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 12409a13ede375..27c55427897621 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-09-09 +date: 2024-09-10 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 1f890b4cadc584..4af0da0eee429a 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-09-09 +date: 2024-09-10 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 ac53c57bee497e..4043412cf1f4d3 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-09-09 +date: 2024-09-10 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 9a49f0406562b7..58463b45aaa876 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-09-09 +date: 2024-09-10 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 d42966554da578..4cae86c9dea7a0 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-09-09 +date: 2024-09-10 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 f4bd248bce029c..a975a2cec732ce 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-09-09 +date: 2024-09-10 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 e9524a32e99bbc..9ce9c8e6ec43bf 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-09-09 +date: 2024-09-10 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 5f30b6d6423364..3cbbc1c40a6413 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-09-09 +date: 2024-09-10 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 707177909ee47c..6c6b54277e658a 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-09-09 +date: 2024-09-10 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 f7e8618e9ee753..2f8c94bf42d975 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-09-09 +date: 2024-09-10 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 2d919d102747c4..bfc36a7b628e3f 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-09-09 +date: 2024-09-10 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 93c42a62385223..15cd2b929b661e 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-09-09 +date: 2024-09-10 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 f286b1675f7f43..27468bda1df565 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-09-09 +date: 2024-09-10 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 e9ccc73f7e063c..89a1ca0e4a82a5 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-09-09 +date: 2024-09-10 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 d90012f95e89ff..8a9bb9e37932ba 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-09-09 +date: 2024-09-10 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 d4699cd21bb409..51bbe4bab5961d 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-09-09 +date: 2024-09-10 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 ef122d890f32d5..0fe2b7edc9ea48 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-09-09 +date: 2024-09-10 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 f15e0e61914b8a..392db37da37664 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-09-09 +date: 2024-09-10 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 3b11f6a5b5bfb9..e36f1691923a0f 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-09-09 +date: 2024-09-10 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 fb0a363816ee8b..719ad2f3d9f1cb 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-09-09 +date: 2024-09-10 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 a28c123063f285..8baabd6494be41 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-09-09 +date: 2024-09-10 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 4478b1295af7aa..cfce6ae80fd66a 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-09-09 +date: 2024-09-10 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 f97de8a9461dbf..25746768a8d0ae 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-09-09 +date: 2024-09-10 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 54aacc7800a227..dcbaf6a46e4d4b 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-09-09 +date: 2024-09-10 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 f09a77c46918f0..8187aa9b6576a9 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-09-09 +date: 2024-09-10 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 35082f9410c2b5..d85e017697c823 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-09-09 +date: 2024-09-10 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 f617d412dad72c..6f5905e9695f0d 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-09-09 +date: 2024-09-10 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 bacfa283d496c1..c5ed9bb393081b 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-09-09 +date: 2024-09-10 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 04fc72b4b19b2a..bbb8629ee41a63 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-09-09 +date: 2024-09-10 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 045d826f49d70c..eae151893791af 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-09-09 +date: 2024-09-10 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 710242ba5b1cce..a7e98a0ca0037e 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-09-09 +date: 2024-09-10 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 b602cd650ad577..8d1c83c29792d5 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-09-09 +date: 2024-09-10 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 b456ab321b357a..577cc5e8f25bed 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-09-09 +date: 2024-09-10 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 1998effeb5cf9a..acd79fedd2eb26 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-09-09 +date: 2024-09-10 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 e63b56d1d66b7b..c0f8a5676a7aa9 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-09-09 +date: 2024-09-10 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 1ce5cd85816bbc..f60ff8b62b1eac 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-09-09 +date: 2024-09-10 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 45dccc05271f7a..7c078292e524fd 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-09-09 +date: 2024-09-10 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 ba45e6f217cf3f..6a5e5a0655f4ad 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-09-09 +date: 2024-09-10 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 cbf58606736b36..6a861e1ff81918 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-09-09 +date: 2024-09-10 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 a5f2bee0aeb399..adc08af0407283 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-09-09 +date: 2024-09-10 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 b4d744b8d7f911..556d2be8c3a4fc 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-09-09 +date: 2024-09-10 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 c906fb6354c329..cace08c6e4b93b 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-09-09 +date: 2024-09-10 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 7b195b628872b3..c4b6f2d779098e 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 41996ce8186a86..f38ff7b6512cb3 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index d8141ea710d86f..b4da49b038131f 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 26a64981b37376..53129e2471571c 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-09-09 +date: 2024-09-10 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 51d8e3488041aa..ba7d2f012bd1d8 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-09-09 +date: 2024-09-10 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 ee24771b447e42..4ec9fed678a109 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-09-09 +date: 2024-09-10 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 8c0eefc94ef51d..7092fccecf236b 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index cff761e1b4a143..926a58dc243489 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 1d49bc6e7d9b9f..1b380895acaa19 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 6d847cb14da2c8..b5b6cc57b7378c 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-09-09 +date: 2024-09-10 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 e3ed44990fbe29..980df42d3b4089 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-09-09 +date: 2024-09-10 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 31c1c46c6f08d8..9a5136d0726916 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-09-09 +date: 2024-09-10 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 c550e2fd3ac04f..6913c620d12ad3 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-09-09 +date: 2024-09-10 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 087df357f71184..8b5b18f3d8c3aa 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-09-09 +date: 2024-09-10 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 6abe6022edae82..657e337487da1d 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-09-09 +date: 2024-09-10 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 b8750566052cea..e8fedd62e16ac3 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index d4bc7a8ea4e667..59afb9edf11608 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index bd95214bbe6ab1..a5f6b0b083fa8b 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-09-09 +date: 2024-09-10 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 2e93a394e286ab..599033c5f2a972 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-09-09 +date: 2024-09-10 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 4893272f5fa0e2..b206b4dde852f4 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-09-09 +date: 2024-09-10 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 afc449644aed3d..c8eef3f386ae61 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-09-09 +date: 2024-09-10 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 7aa210e81d0e4f..20afed3886aa92 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-09-09 +date: 2024-09-10 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 2e7566c9e5ca28..995a227a68bea5 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-09-09 +date: 2024-09-10 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 c7fc7a6e8a6bda..c84cea7d384da0 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-09-09 +date: 2024-09-10 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 4ab88ba7dfc475..e62b50d6f16fed 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-09-09 +date: 2024-09-10 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 0846dc20eaec58..ebf52fce4cc32d 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-09-09 +date: 2024-09-10 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 5620da6828de67..672e77d91b6717 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-09-09 +date: 2024-09-10 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 b46d40ffaad3ea..552cc568bea956 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-09-09 +date: 2024-09-10 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 30e5e7cce1286d..4b71c5f46421bd 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-09-09 +date: 2024-09-10 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 93dcc920b2efd4..1acb80a21bf35d 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index fec0e6765f61f2..2ce3b22d0d3017 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index d198e362d8f2e8..c70ae885826739 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-09-09 +date: 2024-09-10 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 6cb680ea288908..0ebd398c1bced9 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-09-09 +date: 2024-09-10 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 6d6fc85088d760..a98a511ce02f21 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-09-09 +date: 2024-09-10 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 1b48bc5e14321d..2c32778e6c96df 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-09-09 +date: 2024-09-10 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 e274489364cba5..c1ab6ad1695afe 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-09-09 +date: 2024-09-10 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 27a560ec16e655..0fa7d16378f1dd 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-09-09 +date: 2024-09-10 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 7a337a0166f10e..0e0a88dfcb9f0a 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-09-09 +date: 2024-09-10 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 d89df1f94b0e5a..197a57e4312a17 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-09-09 +date: 2024-09-10 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 476d0fb6f8b758..490152257e709a 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-09-09 +date: 2024-09-10 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 309f7bf2e56111..467a0681a58600 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-09-09 +date: 2024-09-10 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 5a8dacd99cb9ec..37dfcb480c035a 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-09-09 +date: 2024-09-10 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 117b9257c4e66c..b28b064c4ba643 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-09-09 +date: 2024-09-10 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 37dab024ecd0f2..6aab165c1ceccf 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-09-09 +date: 2024-09-10 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 b93086144c45ac..86bc56bd4ec502 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 531b1898d31c49..1340fdd9d735ec 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index de6c24a14acdb3..4b8667d2ba57ff 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-09-09 +date: 2024-09-10 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 9ac3196088b2d0..7c5ac61798e43a 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-09-09 +date: 2024-09-10 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 5f131020307009..9de828d73c79e0 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-09-09 +date: 2024-09-10 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 f7137df5c130d5..57c8d1c72d958b 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-09-09 +date: 2024-09-10 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 0720a96b9c4b83..2c3b6fd5043dbf 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-09-09 +date: 2024-09-10 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 7f6f4233ba92e5..7b354a34822919 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-09-09 +date: 2024-09-10 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 1cc26b30a85446..38d70204d748e8 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-09-09 +date: 2024-09-10 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 0ec259a7156364..3abc43053d882a 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-09-09 +date: 2024-09-10 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 cd4e37de6319cd..bbe5e656c696a3 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-09-09 +date: 2024-09-10 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 c1a4c2726290e0..49d12772ab7cd0 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-09-09 +date: 2024-09-10 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 22d5caac7b93ff..f2b8f71108aa08 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-09-09 +date: 2024-09-10 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 5aae05649b8fa7..5d38446f7284ef 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-09-09 +date: 2024-09-10 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 af074bb8620187..85ec6b3fb1b6c3 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-09-09 +date: 2024-09-10 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 a5c231c78635d6..e096878351cede 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-09-09 +date: 2024-09-10 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 4c1d7277f87818..65f739f34e0c36 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-09-09 +date: 2024-09-10 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 cbf737bdca4c65..f465239319d712 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-09-09 +date: 2024-09-10 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 d6be21b4d978fe..52eb33d73518ef 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-09-09 +date: 2024-09-10 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 bad20debff0d02..271518bcb63e45 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-09-09 +date: 2024-09-10 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 86c88a74feb8f4..c97c6dc1dabfd6 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-09-09 +date: 2024-09-10 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 d9d75274b9dc39..456a2a8bbbb7f7 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-09-09 +date: 2024-09-10 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 4552f93eed71ed..45289f77acfd9f 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-09-09 +date: 2024-09-10 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 ec3442b45d27b4..6276a5517554b0 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-09-09 +date: 2024-09-10 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 b9038a90f17a68..dd2dbb0ba08495 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-09-09 +date: 2024-09-10 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 73ee2171f74acc..4987e1aacf061e 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-09-09 +date: 2024-09-10 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 9dfdf03b2df989..6cedb22423532e 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-09-09 +date: 2024-09-10 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 ddbcfc7d1bfe87..041568e3a628ad 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-09-09 +date: 2024-09-10 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 0af84d7216ebbe..2303511e63f58e 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-09-09 +date: 2024-09-10 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 fe84315d93540d..47e0bb5e1863ab 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-09-09 +date: 2024-09-10 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 a029f433383d84..1ecc7009734dad 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-09-09 +date: 2024-09-10 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 4a4702a36711ab..98830c28a632e8 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-09-09 +date: 2024-09-10 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 bd1dbc181f1b63..efe2c83404bc18 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-09-09 +date: 2024-09-10 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 d71ce776401c8e..03c9cb006a9b9e 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-09-09 +date: 2024-09-10 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 46ded733aad0b7..653741a98083f2 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-09-09 +date: 2024-09-10 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 e85a4bd8a7892b..65d95bb6b1bbcf 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-09-09 +date: 2024-09-10 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 8ca37c3b28c26c..d10fa1bcc81046 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-09-09 +date: 2024-09-10 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 4a420823a58e5d..4a4e15a61802ff 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-09-09 +date: 2024-09-10 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 2e875ec3ac5d85..0741b3318d7fd4 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-09-09 +date: 2024-09-10 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 c83758c42d3d7a..9c441109a7b4bf 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-09-09 +date: 2024-09-10 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 40020434b3ca55..c6fd8ff55681d8 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-09-09 +date: 2024-09-10 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 23ac5db7fb38c5..eab3d43b93f3f8 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-09-09 +date: 2024-09-10 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 c0a91822142444..dfd2a528613cd7 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-09-09 +date: 2024-09-10 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 ffa181d1e2417e..f00c3ab05dc589 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-09-09 +date: 2024-09-10 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 59b2162d1791ba..2cf14dfe268b00 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-09-09 +date: 2024-09-10 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 0bc7b71f69f41f..ad8af53af5e537 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-09-09 +date: 2024-09-10 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 b97c165bf71781..0d37bef630594a 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-09-09 +date: 2024-09-10 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 01497f99816948..112fad6405695b 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-09-09 +date: 2024-09-10 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 4fa08f81cbe0dd..f15fa0d5747948 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-09-09 +date: 2024-09-10 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 c282fc951efed2..4f449e15da43f5 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-09-09 +date: 2024-09-10 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 71e5cd45035d1c..654b278795d6d4 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-09-09 +date: 2024-09-10 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 203c834038a4b0..d1711768e87472 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-09-09 +date: 2024-09-10 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 0f061bb8ea3055..6c6aa55d8cf8cb 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 95c00ce350021d..0f22cf8f9acfd6 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-09-09 +date: 2024-09-10 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 9f9aaea5a177e1..f0db3157a9732f 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-09-09 +date: 2024-09-10 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 ac3e3c9b6d40ab..8215efda098516 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-09-09 +date: 2024-09-10 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 26570f12c17cde..57c0ef14161459 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-09-09 +date: 2024-09-10 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 d0f09f77f8c9dd..8c397bafe18090 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-09-09 +date: 2024-09-10 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 cd841994bd784f..9d19d1d6fb1b51 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 557543063b5fc9..a38dd3d4a8dbe9 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index da9985c5cf00d3..851831db548168 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-09-09 +date: 2024-09-10 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 10955e58993add..78b2f8cb8fce9f 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-09-09 +date: 2024-09-10 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 e9a588448bc641..82b3e92c699f82 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-09-09 +date: 2024-09-10 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 13a8ba228ab7f8..8248d88e308086 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 7b5727809a17f2..a89c97f201c1cf 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-09-09 +date: 2024-09-10 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 4d10c3b5a9326a..12cc53ea4e0236 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-09-09 +date: 2024-09-10 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 380cf6c0e327fa..d73e080ba08c60 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-09-09 +date: 2024-09-10 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 21fd01bb9496b0..36fc5557aea5eb 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-09-09 +date: 2024-09-10 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 34c98469ea5812..d8819cf205c014 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-09-09 +date: 2024-09-10 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 632e920d3b8bb0..2241ff0ced8f3a 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-09-09 +date: 2024-09-10 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 1a91d3651f7217..b5bebe49007d5b 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index dbe028e9bac59c..3abbda170722a4 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 668a1afadc6bb0..fb8bcef48a25bb 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-09-09 +date: 2024-09-10 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 298733c6c9dde5..c393854e2ba274 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-09-09 +date: 2024-09-10 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 36fcaf41835526..a2f5e5f0b0bbd7 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-09-09 +date: 2024-09-10 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 49dd30e92746b5..4f12966bd1d7a9 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-09-09 +date: 2024-09-10 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 75ddf917434858..65b28163274643 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-09-09 +date: 2024-09-10 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 9526e24f54dc6f..65659e686c2bf7 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-09-09 +date: 2024-09-10 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 6c36f96a8bc2c0..3abf5d9745dd64 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-09-09 +date: 2024-09-10 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 8c98a5bf61af0e..0e60c05aa06f3e 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-09-09 +date: 2024-09-10 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 51192cdc5c8c64..34d3bc2abaa10d 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-09-09 +date: 2024-09-10 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 58abad6f2380b0..45136cd935d3a3 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-09-09 +date: 2024-09-10 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 db90f50e001542..efcc8fab5b9112 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-09-09 +date: 2024-09-10 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 1eaffe4b802452..d6bebe556f9e0c 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-09-09 +date: 2024-09-10 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 2889fb0425efd8..20f64f63de5882 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-09-09 +date: 2024-09-10 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 136f327bfa87ee..308a18da4c2225 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-09-09 +date: 2024-09-10 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 78dfe33e9b7367..f768b8cf647483 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-09-09 +date: 2024-09-10 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 510420c3e5903e..63c6e1d443cc3c 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-09-09 +date: 2024-09-10 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 f5265052b9ad66..2a0d8b0f935b1c 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-09-09 +date: 2024-09-10 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 fad5a347a8b77e..cdfc5d3b93796d 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-09-09 +date: 2024-09-10 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 c58bf46b3a5963..7f8fece522d189 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-09-09 +date: 2024-09-10 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 9f16bc920fe82f..91a4f7b3f4dabe 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-09-09 +date: 2024-09-10 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 9c0ff238b10aa8..78312764c23cc4 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-09-09 +date: 2024-09-10 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 73f46fe9c811f3..5de565f4ee8ad3 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-09-09 +date: 2024-09-10 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 582eeac7838692..ff94eab4127fe9 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-09-09 +date: 2024-09-10 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 a5edc407168d0c..461653a6ec27ad 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-09-09 +date: 2024-09-10 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 7701c6d5251a48..6a02cbd019b7ee 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-09-09 +date: 2024-09-10 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 dcbc314e83d2c6..fb0802274b6a4a 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-09-09 +date: 2024-09-10 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 5e428d32a71792..eb2e3f3602c87c 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-09-09 +date: 2024-09-10 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 c4ce17d7c8aee8..7cbaeda969ebe3 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-09-09 +date: 2024-09-10 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 80d015cc7eeb21..c6b19558e560e1 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-09-09 +date: 2024-09-10 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 404962fcab43f7..90890f5edb9a24 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-09-09 +date: 2024-09-10 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 9fe494ad80c124..cbf0540526cbf4 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-09-09 +date: 2024-09-10 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 cb4704e068060f..2da7eeece14508 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-09-09 +date: 2024-09-10 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 1f9e120a4c14c2..f44f72b88a6989 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-09-09 +date: 2024-09-10 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 7e06da5e33c3ec..43de58d529ad2f 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-09-09 +date: 2024-09-10 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 706a5d39869f4a..3f95a7d1010969 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-09-09 +date: 2024-09-10 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 2e880fce4b5086..7f039b2a377300 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-09-09 +date: 2024-09-10 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 4fa91e9a1062e7..50795ed01aebda 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index 01c78e3c353797..436eb1fe6cf2d3 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -431,6 +431,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.ALERT_INTENDED_TIMESTAMP", + "type": "string", + "tags": [], + "label": "ALERT_INTENDED_TIMESTAMP", + "description": [], + "signature": [ + "\"kibana.alert.intended_timestamp\"" + ], + "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ALERT_LAST_DETECTED", @@ -1564,7 +1579,7 @@ "label": "DefaultAlertFieldName", "description": [], "signature": [ - "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.revision\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.consecutive_matches\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.last_detected\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.previous_action_group\" | \"kibana.alert.reason\" | \"kibana.alert.rule.execution.timestamp\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.severity_improving\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.url\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert\" | \"kibana.alert.rule\"" + "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.revision\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.consecutive_matches\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.intended_timestamp\" | \"kibana.alert.last_detected\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.previous_action_group\" | \"kibana.alert.reason\" | \"kibana.alert.rule.execution.timestamp\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.severity_improving\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.url\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert\" | \"kibana.alert.rule\"" ], "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index aec2f0f131d851..7043188ea7f37d 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 128 | 0 | 125 | 0 | +| 129 | 0 | 126 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 795af0b19b1e57..ac504856518311 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index bfd38f469a7cf0..707f4933a0ff4d 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 5e3b09c14969ac..53d52880609469 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-09-09 +date: 2024-09-10 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 c2a890d149e3dc..5772c99c60d6f7 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-09-09 +date: 2024-09-10 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 ddf36295a5fe84..a418e8cf4b45ae 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-09-09 +date: 2024-09-10 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 89333f8895ff1f..82dabd01eda3e4 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-09-09 +date: 2024-09-10 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 860d9e2418c0af..9d919d218c3f69 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-09-09 +date: 2024-09-10 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 ae0856f6b34f60..253e0a1c5922fc 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-09-09 +date: 2024-09-10 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.devdocs.json b/api_docs/kbn_security_api_key_management.devdocs.json index ab85025e82ea0d..ec73282d056d2c 100644 --- a/api_docs/kbn_security_api_key_management.devdocs.json +++ b/api_docs/kbn_security_api_key_management.devdocs.json @@ -660,7 +660,7 @@ "label": "TimeToolTip", "description": [], "signature": [ - "({ timestamp, children }: React.PropsWithChildren<", + "({ timestamp, children, }: React.PropsWithChildren) => JSX.Element" + ">>) => JSX.Element" ], "path": "x-pack/packages/security/api_key_management/src/components/time_tool_tip.tsx", "deprecated": false, @@ -679,10 +679,10 @@ "id": "def-public.TimeToolTip.$1", "type": "CompoundType", "tags": [], - "label": "{ timestamp, children }", + "label": "{\n timestamp,\n children,\n}", "description": [], "signature": [ - "React.PropsWithChildren<", + "React.PropsWithChildren" + ">>" ], "path": "x-pack/packages/security/api_key_management/src/components/time_tool_tip.tsx", "deprecated": false, diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 3692132633c8cb..91c0f64cd18b18 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-09-09 +date: 2024-09-10 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_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 3fb31532641921..fd374d94d82920 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 8bd166fcb2888c..44ab8cce32af3b 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-09-09 +date: 2024-09-10 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 0f9ff879bfaf47..cd6c60cdb39c57 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-09-09 +date: 2024-09-10 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 716a4674135b95..84d7f161b796f8 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-09-09 +date: 2024-09-10 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 e43d12234c7736..4653bcc5e3d8a3 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 637830857eac17..86ae945870599d 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-09-09 +date: 2024-09-10 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_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 4a5d7f1c520a3f..65d87d57ebc0ae 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index 7c19a23bea4fcb..19f8a0653f26a4 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 2fc6dd3d8990fb..7d09ac34577520 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-09-09 +date: 2024-09-10 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 9028a7b998c66d..08a63e74b4eccb 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-09-09 +date: 2024-09-10 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 0f9e79b246430e..5febcf2963d812 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-09-09 +date: 2024-09-10 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 a070b8e7da55f9..e6a3f82df52275 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-09-09 +date: 2024-09-10 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 9aa9782faea00a..02e2fbb86a18c9 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-09-09 +date: 2024-09-10 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_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 7fb9eceb228b50..49932ec66b4f2f 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 8fa62876242ef5..0bfc28550f7ac8 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-09-09 +date: 2024-09-10 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 5945c2205ad3d3..2e03b6a4b6f2c1 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-09-09 +date: 2024-09-10 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 e5bcd26200e4fb..668f9a35e469bf 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-09-09 +date: 2024-09-10 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 a0524d1bafb91b..505a1998fc5b5a 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-09-09 +date: 2024-09-10 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 d51e14236bddf2..0e2dd781445854 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-09-09 +date: 2024-09-10 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 9dbf844372fba1..2beb0870f4744b 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-09-09 +date: 2024-09-10 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 0de3d9bd01efa7..6e15ec1a578275 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-09-09 +date: 2024-09-10 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 dbb16678425f9c..9b8cae667bbfe9 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-09-09 +date: 2024-09-10 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 0aa91da94baa98..26ab7af00c59b5 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-09-09 +date: 2024-09-10 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 47b479409ae3db..16b43445686d96 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-09-09 +date: 2024-09-10 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 5477c9a2bdf09b..fe2297db4418c4 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-09-09 +date: 2024-09-10 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 cacb34493c4027..12c029b10dd246 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-09-09 +date: 2024-09-10 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 ba3644f483bf71..38962258eb7c1c 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-09-09 +date: 2024-09-10 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 5532b44574ad1d..d25960c648a7b7 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-09-09 +date: 2024-09-10 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 3fa0de477828c0..21e4e6c7c3ca2d 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-09-09 +date: 2024-09-10 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 1c204ae2283156..63cc3f0e2e54b9 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-09-09 +date: 2024-09-10 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 4ed4cbcbf2f06a..7ec025c07508d4 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-09-09 +date: 2024-09-10 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 064aa80032df13..b5a1e7eac0d98f 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-09-09 +date: 2024-09-10 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 46296c1f49faf4..55842f18279b37 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-09-09 +date: 2024-09-10 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_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index b56c560d4c72b4..fa971f533e26a0 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index c8beead42e4155..d67e53e488364d 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-09-09 +date: 2024-09-10 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 9c06e7a1a30c7b..b861cd2112c095 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-09-09 +date: 2024-09-10 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 dbed6db143d942..a90a2a0ae523dd 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-09-09 +date: 2024-09-10 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 c558cd0198e0c9..193229b2236577 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-09-09 +date: 2024-09-10 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 5337b946a1f80f..45bc6ba0a9170d 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-09-09 +date: 2024-09-10 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 d534b6323fa0b8..b0cfa8d9c74265 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-09-09 +date: 2024-09-10 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 151a89cab5cf4b..8713bfaa5255e2 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-09-09 +date: 2024-09-10 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 12953881d2acf4..b95f29257616c7 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-09-09 +date: 2024-09-10 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 099b8f44ea8732..0497d1f59ad35c 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-09-09 +date: 2024-09-10 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 bdcda7d48f70f1..bc9c2d3746673e 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-09-09 +date: 2024-09-10 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.devdocs.json b/api_docs/kbn_shared_ux_button_toolbar.devdocs.json index cbf27e1fbcb793..3146768213d079 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.devdocs.json +++ b/api_docs/kbn_shared_ux_button_toolbar.devdocs.json @@ -571,7 +571,7 @@ "\nProps for `ToolbarPopover`." ], "signature": [ - "AllowedButtonProps & AllowedPopoverProps & { children: (arg: { closePopover: () => void; }) => React.ReactNode; label: boolean | React.ReactChild | React.ReactFragment | React.ReactPortal; }" + "AllowedButtonProps & Omit & { children: (arg: { closePopover: () => void; }) => React.ReactNode; label: boolean | React.ReactChild | React.ReactFragment | React.ReactPortal; }" ], "path": "packages/shared-ux/button_toolbar/src/popover/popover.tsx", "deprecated": false, diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index ffedbe0bdbe108..c250f288f8fb23 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-09-09 +date: 2024-09-10 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 7e4e4cbf7b2c14..dfac78d10236f3 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-09-09 +date: 2024-09-10 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 a140c3593801e0..f54fc6035bb2b4 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-09-09 +date: 2024-09-10 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 ea8f7fe0f44bc5..16036038ff7ea4 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-09-09 +date: 2024-09-10 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 e8a029b354882e..bbbb840234dd53 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-09-09 +date: 2024-09-10 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 494ebd54f6824f..6b0146df67f2ed 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-09-09 +date: 2024-09-10 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 6e7b4fbf20c084..2f1d385e179cdb 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-09-09 +date: 2024-09-10 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 97eb3c53c64d0e..5670f5a2a4f0f0 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-09-09 +date: 2024-09-10 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 f7dfe96b05d7f8..aea80e4c8b3cb2 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-09-09 +date: 2024-09-10 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 d0d6a4061d7c72..600958ada767c6 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-09-09 +date: 2024-09-10 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 c15303049dc07c..3f4ca5eb6e7074 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-09-09 +date: 2024-09-10 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 cde8a15d6e1059..c7cc708f806f94 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-09-09 +date: 2024-09-10 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 37bc91e19a11a9..4ea320b9ce679b 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-09-09 +date: 2024-09-10 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 b6bf9d7a0a0b6f..b39ba415e1a645 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-09-09 +date: 2024-09-10 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 89d550e4494595..fd6e9a56c0dfce 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-09-09 +date: 2024-09-10 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 0dc721d246673e..1615353ccfba8c 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-09-09 +date: 2024-09-10 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 116640f1c70abf..78d4f218cd1e22 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-09-09 +date: 2024-09-10 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 0d6525564852d3..2e0f848a2e4146 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-09-09 +date: 2024-09-10 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 16d46140205d83..4804e806979b53 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-09-09 +date: 2024-09-10 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 90cd8b63f0520f..4ee1a9f31b0567 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-09-09 +date: 2024-09-10 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 58bbcacf271297..4076ae2af59c57 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-09-09 +date: 2024-09-10 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 872a32f4872cb8..55e3611e04e81a 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-09-09 +date: 2024-09-10 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 2e50c231c85d3b..d8a0b5b4b48ee9 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-09-09 +date: 2024-09-10 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 0ec95be69d9fed..2826ab6910535e 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-09-09 +date: 2024-09-10 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 bf2ca133c568e1..2b304f8d5d3e63 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-09-09 +date: 2024-09-10 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 b9959f927de508..ba868e2df624a7 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-09-09 +date: 2024-09-10 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 8a4be0d46a0064..9e9c28fc8ae9c1 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-09-09 +date: 2024-09-10 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 0a9d740ce21aa6..f5a40f52053e2a 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-09-09 +date: 2024-09-10 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 a770ee2101481a..98bb8a7e0377a1 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-09-09 +date: 2024-09-10 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 dbb79920c93f9e..74c43382b8be54 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-09-09 +date: 2024-09-10 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 360460bbeee46c..982b18aa68c344 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-09-09 +date: 2024-09-10 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 8f131960469842..9a9c686a5f87da 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-09-09 +date: 2024-09-10 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 8ef41617928d6f..90462326430f74 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-09-09 +date: 2024-09-10 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 bf1a58f4b28963..8c05816888981d 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-09-09 +date: 2024-09-10 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 b2245e3ad6cb78..688ab4414f580f 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-09-09 +date: 2024-09-10 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 e4e7450155f998..a74580ff87df87 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-09-09 +date: 2024-09-10 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_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 615cbfe0d83432..116a4c0a45c4d7 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c16b50352aa29b..bd3689b40a8a56 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-09-09 +date: 2024-09-10 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 85e6fd32402585..5d9bc3b2068331 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-09-09 +date: 2024-09-10 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 bc6ab424de1ad6..cff807b7d77479 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-09-09 +date: 2024-09-10 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 883e608e8943e6..5eb920e5930134 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-09-09 +date: 2024-09-10 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 271ea97b7a3a72..8883f1ac5d5134 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-09-09 +date: 2024-09-10 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 554ac2bd90b85d..737bb615b1c541 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-09-09 +date: 2024-09-10 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 10c6ccd29273c1..070bd6bd9a7ecd 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-09-09 +date: 2024-09-10 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 1a4a4a8bf9e474..a8a3127d5a11c1 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 633e8c7801a9d8..56c5def584b7b4 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index ee0adf0c535186..ec49a1eab25c2f 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-09-09 +date: 2024-09-10 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 3b33668d76e247..915fc9c1ac76af 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-09-09 +date: 2024-09-10 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 8a53f9461cf3fe..6d8dc2a24f3c32 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-09-09 +date: 2024-09-10 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.devdocs.json b/api_docs/kbn_test_jest_helpers.devdocs.json index 999fbb6f83c7af..0f267c70b051a3 100644 --- a/api_docs/kbn_test_jest_helpers.devdocs.json +++ b/api_docs/kbn_test_jest_helpers.devdocs.json @@ -527,7 +527,7 @@ "\nAllows for execution of hooks inside of a test component which records the\nreturned values.\n" ], "signature": [ - "(body: (args: Args) => HookValue, WrapperComponent?: React.ComponentType<{}> | undefined, initialArgs?: Args) => ReactHookWrapper" + "(body: (args: Args) => HookValue, WrapperComponent?: React.ComponentType<{ children?: React.ReactNode; }> | undefined, initialArgs?: Args) => ReactHookWrapper" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -560,7 +560,7 @@ "A component that, if provided, will be wrapped\naround the test component. This can be useful to provide context values." ], "signature": [ - "React.ComponentType<{}> | undefined" + "React.ComponentType<{ children?: React.ReactNode; }> | undefined" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -596,9 +596,11 @@ "label": "mountWithI18nProvider", "description": [], "signature": [ - "(child: React.ReactElement>, options: ", + "(child: React.ReactElement>, options: (Omit<", "MountRendererProps", - " | undefined) => ", + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined) => ", "ReactWrapper", ">" ], @@ -624,13 +626,16 @@ { "parentPluginId": "@kbn/test-jest-helpers", "id": "def-common.mountWithI18nProvider.$2", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "options", "description": [], "signature": [ + "(Omit<", "MountRendererProps", - " | undefined" + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -768,9 +773,7 @@ "\nRegister a new Testbed to test a React Component.\n" ], "signature": [ - "(Component: ", - "ComponentType", - "

, config: ", + "(Component: React.ComponentType

, config: ", { "pluginId": "@kbn/test-jest-helpers", "scope": "common", @@ -802,8 +805,7 @@ "The component under test" ], "signature": [ - "ComponentType", - "

" + "React.ComponentType

" ], "path": "packages/kbn-test-jest-helpers/src/testbed/testbed.ts", "deprecated": false, @@ -846,9 +848,7 @@ "label": "registerTestBed", "description": [], "signature": [ - "(Component: ", - "ComponentType", - "

, config: ", + "(Component: React.ComponentType

, config: ", { "pluginId": "@kbn/test-jest-helpers", "scope": "common", @@ -878,8 +878,7 @@ "label": "Component", "description": [], "signature": [ - "ComponentType", - "

" + "React.ComponentType

" ], "path": "packages/kbn-test-jest-helpers/src/testbed/testbed.ts", "deprecated": false, @@ -920,9 +919,7 @@ "label": "registerTestBed", "description": [], "signature": [ - "(Component: ", - "ComponentType", - "

, config: ", + "(Component: React.ComponentType

, config: ", { "pluginId": "@kbn/test-jest-helpers", "scope": "common", @@ -960,8 +957,7 @@ "label": "Component", "description": [], "signature": [ - "ComponentType", - "

" + "React.ComponentType

" ], "path": "packages/kbn-test-jest-helpers/src/testbed/testbed.ts", "deprecated": false, @@ -1055,9 +1051,11 @@ "label": "renderWithI18nProvider", "description": [], "signature": [ - "(child: React.ReactElement>, options: ", + "(child: React.ReactElement>, options: (Omit<", "MountRendererProps", - " | undefined) => cheerio.Cheerio" + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined) => cheerio.Cheerio" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -1081,13 +1079,16 @@ { "parentPluginId": "@kbn/test-jest-helpers", "id": "def-common.renderWithI18nProvider.$2", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "options", "description": [], "signature": [ + "(Omit<", "MountRendererProps", - " | undefined" + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -1371,9 +1372,11 @@ "label": "shallowWithI18nProvider", "description": [], "signature": [ - "(child: React.ReactElement>, options: ", + "(child: React.ReactElement>, options: (Omit<", "ShallowRendererProps", - " | undefined) => ", + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined) => ", "ShallowWrapper", " & Readonly<{ children?: React.ReactNode; }>, Readonly<{}>, React.Component<{}, {}, any>>" ], @@ -1399,13 +1402,16 @@ { "parentPluginId": "@kbn/test-jest-helpers", "id": "def-common.shallowWithI18nProvider.$2", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "options", "description": [], "signature": [ + "(Omit<", "ShallowRendererProps", - " | undefined" + ", \"wrappingComponent\"> & { wrappingComponent?: React.ComponentType | ", + "ComponentType", + " | undefined; }) | undefined" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, @@ -1428,9 +1434,9 @@ "\n Creates the wrapper instance using shallow with provided intl object into context\n" ], "signature": [ - "(node: React.ReactElement>, options: ", + "(node: React.ReactElement>, options: (", "ShallowRendererProps", - " | undefined) => ", + " & { wrappingComponent?: React.ComponentType<{}> | undefined; }) | undefined) => ", "ShallowWrapper", ", React.Component<{}, {}, any>>" ], @@ -1458,15 +1464,16 @@ { "parentPluginId": "@kbn/test-jest-helpers", "id": "def-common.shallowWithIntl.$2", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "options", "description": [ "properties to pass into shallow wrapper" ], "signature": [ + "(", "ShallowRendererProps", - " | undefined" + " & { wrappingComponent?: React.ComponentType<{}> | undefined; }) | undefined" ], "path": "packages/kbn-test-jest-helpers/src/enzyme_helpers.tsx", "deprecated": false, diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 06108c05e0d063..8a62dc61a5a216 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-09-09 +date: 2024-09-10 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 c0f36e05b698af..0de0b334f2662a 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-09-09 +date: 2024-09-10 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 2f5f339a7b9aee..b61d7e8e4b6dbc 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-09-09 +date: 2024-09-10 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 33c4a80c1dbd98..04a0d91a2a3683 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-09-09 +date: 2024-09-10 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 442e18414ca0ee..7d4b2ee698b5d1 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-09-09 +date: 2024-09-10 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 1f37d03564ae43..37e9083afc3369 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-09-09 +date: 2024-09-10 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 d8d8bbdc3f00a5..83a31de212fb83 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-09-09 +date: 2024-09-10 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 22797678e9b9d1..f8455da9508c6f 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-09-09 +date: 2024-09-10 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 40ca17a9d7ee99..12ed76494b4b48 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-09-09 +date: 2024-09-10 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 55a462ace3a5df..89d25aaadaa247 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-09-09 +date: 2024-09-10 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 6ebb49ce8113c3..36ca87fd29fc84 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-09-09 +date: 2024-09-10 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 0bfa5e7d13a9ce..21b86a79b3c1a1 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index ff7fcf52ad5533..56bc7ce7ff7810 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -11,9 +11,9 @@ "label": "DataTableRowControl", "description": [], "signature": [ - "({ size, children }: React.PropsWithChildren<{ size?: ", + "({ size, children, }: React.PropsWithChildren) => JSX.Element" + " | undefined; }>>) => JSX.Element" ], "path": "packages/kbn-unified-data-table/src/components/data_table_row_control.tsx", "deprecated": false, @@ -24,12 +24,12 @@ "id": "def-public.DataTableRowControl.$1", "type": "CompoundType", "tags": [], - "label": "{ size, children }", + "label": "{\n size,\n children,\n}", "description": [], "signature": [ - "React.PropsWithChildren<{ size?: ", + "React.PropsWithChildren" + " | undefined; }>>" ], "path": "packages/kbn-unified-data-table/src/components/data_table_row_control.tsx", "deprecated": false, diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index d732251afb8354..8ad312d7fa09b5 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-09-09 +date: 2024-09-10 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 bc6c94b6a9a130..c02c3f417f93f7 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-09-09 +date: 2024-09-10 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 b1c6fc9b7a1090..e19f407ee81006 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-09-09 +date: 2024-09-10 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 0ffcb39cd9540d..0f1bc15e97ea0c 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-09-09 +date: 2024-09-10 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 c6fbf852302a6e..5a1a713be0a48d 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-09-09 +date: 2024-09-10 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 77d0713114ee7d..4374196a75ed5b 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-09-09 +date: 2024-09-10 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 8d1b398e26813c..b0865f531555f0 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-09-09 +date: 2024-09-10 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 7475fa52a852b1..89a97be1ed7226 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-09-09 +date: 2024-09-10 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 d07224ccb213ac..61796a561b18c5 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-09-09 +date: 2024-09-10 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 2ec8b72f89ba19..984c1ed8d3e825 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-09-09 +date: 2024-09-10 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 ef0e74c5c89415..66b2fc0c41b6af 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-09-09 +date: 2024-09-10 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 a315ac5d02d892..f826fae1a1609e 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-09-09 +date: 2024-09-10 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 5e61bbff3c41b2..a6f9c96fef65cd 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-09-09 +date: 2024-09-10 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 cd01889e12e696..e0999ac9cb4395 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-09-09 +date: 2024-09-10 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 c11ca32d6e7a49..9fed5ef6d21abe 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-09-09 +date: 2024-09-10 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 be6ac62286eaab..aec806d8e92002 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-09-09 +date: 2024-09-10 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 eac48fcc127cf0..e65cd72f7c27cd 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-09-09 +date: 2024-09-10 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 0d010869d5a99b..3a9ba9d1c71d9b 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-09-09 +date: 2024-09-10 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 07634135f335b2..243c21eb923aeb 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-09-09 +date: 2024-09-10 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 a9087b9d66e8c7..e93b2895aa9491 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-09-09 +date: 2024-09-10 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 1b2c562c499a73..753e7b2f6718f1 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-09-09 +date: 2024-09-10 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 57a422745ddea5..024db93a9dfb19 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-09-09 +date: 2024-09-10 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 6cb74c1f8e9729..91d224179a0edd 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-09-09 +date: 2024-09-10 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 429ae769c09c95..dffc9126cb91c8 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-09-09 +date: 2024-09-10 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 a404b66e260366..6bdbcafde2fa24 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-09-09 +date: 2024-09-10 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 efeac16c5a053f..5c6410d509655c 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-09-09 +date: 2024-09-10 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 3485ed78c3bb08..7a53642dcefaa3 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-09-09 +date: 2024-09-10 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 1534c8f40c7003..917f7f9c80a3c2 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-09-09 +date: 2024-09-10 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 ecc0ec32b2c425..e5c74e2a4fc1a3 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-09-09 +date: 2024-09-10 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 c6d399ac5aaf69..6ada9f11d14f5c 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-09-09 +date: 2024-09-10 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 43d4345a8c3c2d..3f7b356ef3b4e6 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-09-09 +date: 2024-09-10 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 b798e2cd84cc2e..7ef50ce9aebb5a 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-09-09 +date: 2024-09-10 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 cdee55885db767..a2ee9c035f89ec 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-09-09 +date: 2024-09-10 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 9b6a3f3438a4ac..5f5aa6361a7eb3 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-09-09 +date: 2024-09-10 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 b0e49c86d26953..d489df72a46ef1 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-09-09 +date: 2024-09-10 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 9f0aca02891116..e6f421178b15d7 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-09-09 +date: 2024-09-10 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 87744acbb93a1c..912f95d24f0daa 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-09-09 +date: 2024-09-10 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 13216f522f2e1a..8d52c622c3c8c1 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-09-09 +date: 2024-09-10 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 80c378e531e4de..4203a139c7bd0a 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-09-09 +date: 2024-09-10 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 7ac01d3c4510c3..190414cc11a19e 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-09-09 +date: 2024-09-10 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 735ae0fadab48c..f00e3102e42f68 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 8408376f578009..a3cffe97dc553d 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -3883,7 +3883,7 @@ "label": "format", "description": [], "signature": [ - "(options: { fields: OutputOf | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 23 | 0 | 23 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 457 | 1 | 452 | 19 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 458 | 1 | 453 | 19 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 4 | @@ -258,7 +258,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 59 | 0 | 59 | 10 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 208 | 0 | 208 | 33 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 316 | 0 | 315 | 0 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 317 | 0 | 316 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 11 | 0 | 11 | 0 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | @@ -275,7 +275,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 62 | 0 | 17 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 63 | 1 | 63 | 0 | -| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 56 | 0 | 55 | 0 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 57 | 0 | 56 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 41 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 8 | 0 | 4 | 0 | @@ -647,7 +647,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 128 | 0 | 125 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 129 | 0 | 126 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 35 | 0 | 34 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 76 | 0 | 76 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 15de17227ba611..2d3402bf462cf6 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-09-09 +date: 2024-09-10 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 516d02d14ca95e..012792eb41244b 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-09-09 +date: 2024-09-10 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 c81cd23ae6f20b..d6a5b25f7479d8 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-09-09 +date: 2024-09-10 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 5b6ad0191f84ce..94e749d395bbbe 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-09-09 +date: 2024-09-10 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 557c3c0a3d9813..789137678af6a9 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-09-09 +date: 2024-09-10 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 c6ff4f37ac59d6..bac0b841d6767e 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-09-09 +date: 2024-09-10 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 f8ac6ab409692a..1bd52d302af804 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-09-09 +date: 2024-09-10 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 38a9b063d878da..9bf91e441667f3 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -107,7 +107,7 @@ "label": "get", "description": [], "signature": [ - "({ id, index }: GetAlertParams) => Promise<{ _index: string; \"@timestamp\"?: string | undefined; \"kibana.alert.rule.rule_type_id\"?: string | undefined; \"kibana.alert.rule.consumer\"?: string | undefined; \"kibana.alert.instance.id\"?: string | undefined; \"kibana.alert.rule.category\"?: string | undefined; \"kibana.alert.rule.name\"?: string | undefined; \"kibana.alert.rule.producer\"?: string | undefined; \"kibana.alert.rule.revision\"?: number | undefined; \"kibana.alert.rule.uuid\"?: string | undefined; \"kibana.alert.status\"?: string | undefined; \"kibana.alert.uuid\"?: string | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.action\"?: string | undefined; tags?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string | undefined; \"event.kind\"?: string | undefined; \"event.original\"?: string | undefined; \"kibana.alert.action_group\"?: string | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.consecutive_matches\"?: number | undefined; \"kibana.alert.duration.us\"?: number | undefined; \"kibana.alert.end\"?: string | undefined; \"kibana.alert.flapping\"?: boolean | undefined; \"kibana.alert.flapping_history\"?: boolean[] | undefined; \"kibana.alert.last_detected\"?: string | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.previous_action_group\"?: string | undefined; \"kibana.alert.reason\"?: string | undefined; \"kibana.alert.rule.execution.timestamp\"?: string | undefined; \"kibana.alert.rule.parameters\"?: { [key: string]: unknown; } | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.severity_improving\"?: boolean | undefined; \"kibana.alert.start\"?: string | undefined; \"kibana.alert.time_range\"?: unknown; \"kibana.alert.url\"?: string | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string | undefined; \"ecs.version\"?: string | undefined; \"kibana.alert.risk_score\"?: number | undefined; \"kibana.alert.rule.author\"?: string | undefined; \"kibana.alert.rule.created_at\"?: string | undefined; \"kibana.alert.rule.created_by\"?: string | undefined; \"kibana.alert.rule.description\"?: string | undefined; \"kibana.alert.rule.enabled\"?: string | undefined; \"kibana.alert.rule.from\"?: string | undefined; \"kibana.alert.rule.interval\"?: string | undefined; \"kibana.alert.rule.license\"?: string | undefined; \"kibana.alert.rule.note\"?: string | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string | undefined; \"kibana.alert.rule.rule_name_override\"?: string | undefined; \"kibana.alert.rule.to\"?: string | undefined; \"kibana.alert.rule.type\"?: string | undefined; \"kibana.alert.rule.updated_at\"?: string | undefined; \"kibana.alert.rule.updated_by\"?: string | undefined; \"kibana.alert.rule.version\"?: string | undefined; \"kibana.alert.severity\"?: string | undefined; \"kibana.alert.suppression.docs_count\"?: number | undefined; \"kibana.alert.suppression.end\"?: string | undefined; \"kibana.alert.suppression.start\"?: string | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string | undefined; \"kibana.alert.workflow_reason\"?: string | undefined; \"kibana.alert.workflow_status_updated_at\"?: string | undefined; \"kibana.alert.workflow_user\"?: string | undefined; }>" + "({ id, index }: GetAlertParams) => Promise<{ _index: string; \"@timestamp\"?: string | undefined; \"kibana.alert.rule.rule_type_id\"?: string | undefined; \"kibana.alert.rule.consumer\"?: string | undefined; \"kibana.alert.instance.id\"?: string | undefined; \"kibana.alert.rule.category\"?: string | undefined; \"kibana.alert.rule.name\"?: string | undefined; \"kibana.alert.rule.producer\"?: string | undefined; \"kibana.alert.rule.revision\"?: number | undefined; \"kibana.alert.rule.uuid\"?: string | undefined; \"kibana.alert.status\"?: string | undefined; \"kibana.alert.uuid\"?: string | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.action\"?: string | undefined; tags?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string | undefined; \"event.kind\"?: string | undefined; \"event.original\"?: string | undefined; \"kibana.alert.action_group\"?: string | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.consecutive_matches\"?: number | undefined; \"kibana.alert.duration.us\"?: number | undefined; \"kibana.alert.end\"?: string | undefined; \"kibana.alert.flapping\"?: boolean | undefined; \"kibana.alert.flapping_history\"?: boolean[] | undefined; \"kibana.alert.intended_timestamp\"?: string | undefined; \"kibana.alert.last_detected\"?: string | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.previous_action_group\"?: string | undefined; \"kibana.alert.reason\"?: string | undefined; \"kibana.alert.rule.execution.timestamp\"?: string | undefined; \"kibana.alert.rule.parameters\"?: { [key: string]: unknown; } | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.severity_improving\"?: boolean | undefined; \"kibana.alert.start\"?: string | undefined; \"kibana.alert.time_range\"?: unknown; \"kibana.alert.url\"?: string | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string | undefined; \"ecs.version\"?: string | undefined; \"kibana.alert.risk_score\"?: number | undefined; \"kibana.alert.rule.author\"?: string | undefined; \"kibana.alert.rule.created_at\"?: string | undefined; \"kibana.alert.rule.created_by\"?: string | undefined; \"kibana.alert.rule.description\"?: string | undefined; \"kibana.alert.rule.enabled\"?: string | undefined; \"kibana.alert.rule.from\"?: string | undefined; \"kibana.alert.rule.interval\"?: string | undefined; \"kibana.alert.rule.license\"?: string | undefined; \"kibana.alert.rule.note\"?: string | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string | undefined; \"kibana.alert.rule.rule_name_override\"?: string | undefined; \"kibana.alert.rule.to\"?: string | undefined; \"kibana.alert.rule.type\"?: string | undefined; \"kibana.alert.rule.updated_at\"?: string | undefined; \"kibana.alert.rule.updated_by\"?: string | undefined; \"kibana.alert.rule.version\"?: string | undefined; \"kibana.alert.severity\"?: string | undefined; \"kibana.alert.suppression.docs_count\"?: number | undefined; \"kibana.alert.suppression.end\"?: string | undefined; \"kibana.alert.suppression.start\"?: string | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string | undefined; \"kibana.alert.workflow_reason\"?: string | undefined; \"kibana.alert.workflow_status_updated_at\"?: string | undefined; \"kibana.alert.workflow_user\"?: string | undefined; }>" ], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -407,7 +407,7 @@ "MappingRuntimeFields", " | undefined; }) => Promise<", "SearchResponse", - " Promise<", "SearchResponse", - " Promise Promise OutputOf OutputOf diff --git a/package.json b/package.json index 82e449a84510a3..3078275e1b9f85 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "@elastic/numeral": "^2.5.1", "@elastic/react-search-ui": "^1.20.2", "@elastic/react-search-ui-views": "^1.20.2", - "@elastic/request-converter": "^8.15.3", + "@elastic/request-converter": "^8.15.4", "@elastic/request-crypto": "2.0.2", "@elastic/search-ui": "^1.20.2", "@elastic/search-ui-app-search-connector": "^1.20.2", @@ -1653,7 +1653,7 @@ "buildkite-test-collector": "^1.7.0", "callsites": "^3.1.0", "chance": "1.0.18", - "chromedriver": "^128.0.0", + "chromedriver": "^128.0.1", "clean-webpack-plugin": "^3.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", @@ -1702,7 +1702,7 @@ "file-loader": "^4.2.0", "find-cypress-specs": "^1.41.4", "form-data": "^4.0.0", - "geckodriver": "^4.4.3", + "geckodriver": "^4.4.4", "gulp-brotli": "^3.0.0", "gulp-postcss": "^9.0.1", "gulp-terser": "^2.1.0", diff --git a/packages/core/saved-objects/docs/openapi/bundled.json b/packages/core/saved-objects/docs/openapi/bundled.json index 36439a6b467497..5b8f30b0f34c10 100644 --- a/packages/core/saved-objects/docs/openapi/bundled.json +++ b/packages/core/saved-objects/docs/openapi/bundled.json @@ -745,7 +745,14 @@ } } } - } + }, + "x-codeSamples": [ + { + "lang": "cURL", + "label": "Import with createNewCopies", + "source": "curl \\\n -X POST api/saved_objects/_import?createNewCopies=true\n -H \"kbn-xsrf: true\"\n --form file=@file.ndjson\n" + } + ] } }, "/api/saved_objects/_resolve_import_errors": { diff --git a/packages/core/saved-objects/docs/openapi/bundled.yaml b/packages/core/saved-objects/docs/openapi/bundled.yaml index 130c1c8d0a252e..68c79b406c2b0a 100644 --- a/packages/core/saved-objects/docs/openapi/bundled.yaml +++ b/packages/core/saved-objects/docs/openapi/bundled.yaml @@ -511,6 +511,14 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' + x-codeSamples: + - lang: cURL + label: Import with createNewCopies + source: | + curl \ + -X POST api/saved_objects/_import?createNewCopies=true + -H "kbn-xsrf: true" + --form file=@file.ndjson /api/saved_objects/_resolve_import_errors: post: summary: Resolve import errors diff --git a/packages/core/saved-objects/docs/openapi/bundled_serverless.json b/packages/core/saved-objects/docs/openapi/bundled_serverless.json index 61a2671c878cfb..fe4b832c495b7a 100644 --- a/packages/core/saved-objects/docs/openapi/bundled_serverless.json +++ b/packages/core/saved-objects/docs/openapi/bundled_serverless.json @@ -230,7 +230,14 @@ } } } - } + }, + "x-codeSamples": [ + { + "lang": "cURL", + "label": "Import with createNewCopies", + "source": "curl \\\n -X POST api/saved_objects/_import?createNewCopies=true\n -H \"kbn-xsrf: true\"\n --form file=@file.ndjson\n" + } + ] } } }, diff --git a/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml b/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml index 00331902faa17e..4517629a29a614 100644 --- a/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml +++ b/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml @@ -176,6 +176,14 @@ paths: application/json: schema: $ref: '#/components/schemas/400_response' + x-codeSamples: + - lang: cURL + label: Import with createNewCopies + source: | + curl \ + -X POST api/saved_objects/_import?createNewCopies=true + -H "kbn-xsrf: true" + --form file=@file.ndjson components: parameters: kbn_xsrf: 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 12453a29ce78bf..3f27987f779f7c 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 @@ -84,3 +84,11 @@ post: application/json: schema: $ref: '../components/schemas/400_response.yaml' + x-codeSamples: + - lang: cURL + label: Import with createNewCopies + source: | + curl \ + -X POST api/saved_objects/_import?createNewCopies=true + -H "kbn-xsrf: true" + --form file=@file.ndjson diff --git a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts index fdc6f8290897aa..ed6a7211c7a904 100644 --- a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts +++ b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts @@ -47,6 +47,7 @@ import { EVENT_KIND, EVENT_ORIGINAL, TAGS, + ALERT_INTENDED_TIMESTAMP, } from '@kbn/rule-data-utils'; import { MultiField } from './types'; @@ -133,6 +134,11 @@ export const alertFieldMap = { array: false, required: false, }, + [ALERT_INTENDED_TIMESTAMP]: { + type: 'date', + array: false, + required: false, + }, [ALERT_RULE_EXECUTION_UUID]: { type: 'keyword', array: false, diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts index ad2c0c0ad22ed5..4a4117a8f2197a 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts @@ -93,6 +93,7 @@ const AlertOptional = rt.partial({ 'kibana.alert.end': schemaDate, 'kibana.alert.flapping': schemaBoolean, 'kibana.alert.flapping_history': schemaBooleanArray, + 'kibana.alert.intended_timestamp': schemaDate, 'kibana.alert.last_detected': schemaDate, 'kibana.alert.maintenance_window_ids': schemaStringArray, 'kibana.alert.previous_action_group': schemaString, diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts index 809db444714466..3573efa5535e4a 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts @@ -137,6 +137,7 @@ const SecurityAlertOptional = rt.partial({ 'kibana.alert.group.id': schemaString, 'kibana.alert.group.index': schemaNumber, 'kibana.alert.host.criticality_level': schemaString, + 'kibana.alert.intended_timestamp': schemaDate, 'kibana.alert.last_detected': schemaDate, 'kibana.alert.maintenance_window_ids': schemaStringArray, 'kibana.alert.new_terms': schemaStringArray, diff --git a/packages/kbn-cli-dev-mode/src/watcher.ts b/packages/kbn-cli-dev-mode/src/watcher.ts index 6f7f70466ae251..3c9763e0543aab 100644 --- a/packages/kbn-cli-dev-mode/src/watcher.ts +++ b/packages/kbn-cli-dev-mode/src/watcher.ts @@ -95,7 +95,7 @@ export class Watcher { ignore: [ '**/{node_modules,target,public,coverage,__*__}/**', '**/*.{test,spec,story,stories}.*', - '**/*.{md,sh,txt}', + '**/*.{http,md,sh,txt}', '**/debug.log', ], } diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts index 0d0ba04e3a82ac..2349ef13deb31b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.eval.test.ts @@ -550,5 +550,109 @@ describe('autocomplete.suggest', () => { { triggerCharacter: ' ' } ); }); + + test('case', async () => { + const { assertSuggestions } = await setup(); + const comparisonOperators = ['==', '!=', '>', '<', '>=', '<='] + .map((op) => `${op} `) + .concat(','); + + // case( / ) suggest any field/eval function in this position as first argument + + const allSuggestions = [ + // With extra space after field name to open suggestions + ...getFieldNamesByType('any').map((field) => `${field} `), + ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }, undefined, ['case']), + ]; + await assertSuggestions('from a | eval case(/)', allSuggestions, { + triggerCharacter: ' ', + }); + await assertSuggestions('from a | eval case(/)', allSuggestions); + + // case( field /) suggest comparison operators at this point to converge to a boolean + await assertSuggestions('from a | eval case( textField /)', comparisonOperators, { + triggerCharacter: ' ', + }); + await assertSuggestions('from a | eval case( doubleField /)', comparisonOperators, { + triggerCharacter: ' ', + }); + await assertSuggestions('from a | eval case( booleanField /)', comparisonOperators, { + triggerCharacter: ' ', + }); + + // case( field > /) suggest field/function of the same type of the right hand side to complete the boolean expression + await assertSuggestions( + 'from a | eval case( keywordField != /)', + [ + // Notice no extra space after field name + ...getFieldNamesByType(['keyword', 'text', 'boolean']).map((field) => `${field}`), + ...getFunctionSignaturesByReturnType( + 'eval', + ['keyword', 'text', 'boolean'], + { scalar: true }, + undefined, + [] + ), + ], + { + triggerCharacter: ' ', + } + ); + + const expectedNumericSuggestions = [ + // Notice no extra space after field name + ...getFieldNamesByType(ESQL_COMMON_NUMERIC_TYPES).map((field) => `${field}`), + ...getFunctionSignaturesByReturnType( + 'eval', + ESQL_COMMON_NUMERIC_TYPES, + { scalar: true }, + undefined, + [] + ), + ]; + await assertSuggestions( + 'from a | eval case( integerField != /)', + expectedNumericSuggestions, + { + triggerCharacter: ' ', + } + ); + await assertSuggestions('from a | eval case( integerField != /)', [ + // Notice no extra space after field name + ...getFieldNamesByType('any').map((field) => `${field}`), + ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }, undefined, []), + 'var0 = ', + ]); + + // case( field > 0, >) suggests fields like normal + await assertSuggestions( + 'from a | eval case( integerField != doubleField, /)', + [ + // With extra space after field name to open suggestions + ...getFieldNamesByType('any').map((field) => `${field}`), + ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }, undefined, [ + 'case', + ]), + ], + { + triggerCharacter: ' ', + } + ); + + // case( multiple conditions ) suggests fields like normal + await assertSuggestions( + 'from a | eval case(integerField < 0, "negative", integerField > 0, "positive", /)', + [ + // With extra space after field name to open suggestions + ...getFieldNamesByType('any').map((field) => `${field} `), + ...getFunctionSignaturesByReturnType('eval', 'any', { scalar: true }, undefined, [ + 'case', + ]), + ], + { + triggerCharacter: ' ', + } + ); + }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index e59df06d2b8fe0..1aa6263e06059b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -19,7 +19,7 @@ import type { } from '@kbn/esql-ast'; import { i18n } from '@kbn/i18n'; import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; -import type { EditorContext, SuggestionRawDefinition } from './types'; +import type { EditorContext, ItemKind, SuggestionRawDefinition } from './types'; import { getColumnForASTNode, getCommandDefinition, @@ -111,6 +111,7 @@ import { isParameterType, isReturnType, } from '../definitions/types'; +import { comparisonFunctions } from '../definitions/builtin'; type GetSourceFn = () => Promise; type GetDataStreamsForIntegrationFn = ( @@ -1307,6 +1308,7 @@ async function getFunctionArgsSuggestions( fieldsMap, innerText ); + // pick the type of the next arg const shouldGetNextArgument = node.text.includes(EDITOR_MARKER); let argIndex = Math.max(node.args.length, 0); @@ -1334,8 +1336,18 @@ async function getFunctionArgsSuggestions( // Whether to prepend comma to suggestion string // E.g. if true, "fieldName" -> "fieldName, " const alreadyHasComma = fullText ? fullText[offset] === ',' : false; + const canBeBooleanCondition = + // For `CASE()`, there can be multiple conditions, so keep suggesting fields and functions if possible + fnDefinition.name === 'case' || + // If the type is explicitly a boolean condition + typesToSuggestNext.some((t) => t && t.type === 'boolean' && t.name === 'condition'); + const shouldAddComma = - hasMoreMandatoryArgs && fnDefinition.type !== 'builtin' && !alreadyHasComma; + hasMoreMandatoryArgs && + fnDefinition.type !== 'builtin' && + !alreadyHasComma && + !canBeBooleanCondition; + const shouldAdvanceCursor = hasMoreMandatoryArgs && fnDefinition.type !== 'builtin'; const suggestedConstants = uniq( typesToSuggestNext @@ -1420,27 +1432,35 @@ async function getFunctionArgsSuggestions( ); // Fields + suggestions.push( ...pushItUpInTheList( await getFieldsByType( - // @TODO: have a way to better suggest constant only params - getTypesFromParamDefs(typesToSuggestNext.filter((d) => !d.constantOnly)) as string[], + // For example, in case() where we are expecting a boolean condition + // we can accept any field types (field1 !== field2) + canBeBooleanCondition + ? ['any'] + : // @TODO: have a way to better suggest constant only params + (getTypesFromParamDefs( + typesToSuggestNext.filter((d) => !d.constantOnly) + ) as string[]), [], { addComma: shouldAddComma, - advanceCursor: shouldAddComma, - openSuggestions: shouldAddComma, + advanceCursor: shouldAdvanceCursor, + openSuggestions: shouldAdvanceCursor, } ), true ) ); + // Functions suggestions.push( ...getCompatibleFunctionDefinition( command.name, option?.name, - getTypesFromParamDefs(typesToSuggestNext) as string[], + canBeBooleanCondition ? ['any'] : (getTypesFromParamDefs(typesToSuggestNext) as string[]), fnToIgnore ).map((suggestion) => ({ ...suggestion, @@ -1475,9 +1495,20 @@ async function getFunctionArgsSuggestions( ); } } - + // Suggest comparison functions for boolean conditions + if (canBeBooleanCondition) { + suggestions.push( + ...comparisonFunctions.map(({ name, description }) => ({ + label: name, + text: name + ' ', + kind: 'Function' as ItemKind, + detail: description, + command: TRIGGER_SUGGESTION_COMMAND, + })) + ); + } if (hasMoreMandatoryArgs) { - // suggest a comma if there's another argument for the function + // Suggest a comma if there's another argument for the function suggestions.push(commaCompleteItem); } } @@ -1663,6 +1694,7 @@ async function getOptionArgsSuggestions( suggestions.push(...buildFieldsDefinitions(policyMetadata.enrichFields)); } } + if ( assignFn && hasSameArgBothSides(assignFn) && diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts index 7555ba63ca6a01..d2ff04e4d9baa4 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/builtin.ts @@ -291,7 +291,7 @@ export const mathFunctions: FunctionDefinition[] = [ ), ]; -const comparisonFunctions: FunctionDefinition[] = [ +export const comparisonFunctions: FunctionDefinition[] = [ { name: '==', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definition.equalToDoc', { diff --git a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts index c0d00d16ae79c3..d56510e51465d7 100644 --- a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts +++ b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts @@ -59,6 +59,9 @@ const ALERT_INSTANCE_ID = `${ALERT_NAMESPACE}.instance.id` as const; // kibana.alert.last_detected - timestamp when the alert was last seen const ALERT_LAST_DETECTED = `${ALERT_NAMESPACE}.last_detected` as const; +// kiana.alert.intended_timestamp - timestamp when the alert was intended to be detected, useful for backfilling +const ALERT_INTENDED_TIMESTAMP = `${ALERT_NAMESPACE}.intended_timestamp` as const; + // kibana.alert.reason - human readable reason that this alert is active const ALERT_REASON = `${ALERT_NAMESPACE}.reason` as const; @@ -141,6 +144,7 @@ const fields = { ALERT_RULE_CATEGORY, ALERT_RULE_CONSUMER, ALERT_RULE_EXECUTION_TIMESTAMP, + ALERT_INTENDED_TIMESTAMP, ALERT_RULE_EXECUTION_UUID, ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, @@ -185,6 +189,7 @@ export { ALERT_RULE_CATEGORY, ALERT_RULE_CONSUMER, ALERT_RULE_EXECUTION_TIMESTAMP, + ALERT_INTENDED_TIMESTAMP, ALERT_RULE_EXECUTION_UUID, ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, diff --git a/packages/kbn-text-based-editor/src/editor_footer/index.tsx b/packages/kbn-text-based-editor/src/editor_footer/index.tsx index 345e473d0e7bc9..fa60eb1a32f44c 100644 --- a/packages/kbn-text-based-editor/src/editor_footer/index.tsx +++ b/packages/kbn-text-based-editor/src/editor_footer/index.tsx @@ -51,7 +51,6 @@ interface EditorFooterProps { isSpaceReduced?: boolean; hideTimeFilterInfo?: boolean; hideQueryHistory?: boolean; - refetchHistoryItems?: boolean; isInCompactMode?: boolean; } @@ -71,7 +70,6 @@ export const EditorFooter = memo(function EditorFooter({ isHistoryOpen, setIsHistoryOpen, hideQueryHistory, - refetchHistoryItems, isInCompactMode, measuredContainerWidth, code, @@ -360,7 +358,6 @@ export const EditorFooter = memo(function EditorFooter({ containerCSS={styles.historyContainer} onUpdateAndSubmit={onUpdateAndSubmit} containerWidth={measuredContainerWidth} - refetchHistoryItems={refetchHistoryItems} isInCompactMode={isInCompactMode} /> diff --git a/packages/kbn-text-based-editor/src/editor_footer/query_history.test.tsx b/packages/kbn-text-based-editor/src/editor_footer/query_history.test.tsx index f0975313a3107a..352eb4b7856569 100644 --- a/packages/kbn-text-based-editor/src/editor_footer/query_history.test.tsx +++ b/packages/kbn-text-based-editor/src/editor_footer/query_history.test.tsx @@ -8,7 +8,7 @@ */ import React from 'react'; -import { QueryHistoryAction, getTableColumns, QueryHistory, QueryColumn } from './query_history'; +import { QueryHistoryAction, getTableColumns, QueryColumn } from './query_history'; import { render, screen } from '@testing-library/react'; jest.mock('../history_local_storage', () => { @@ -21,7 +21,6 @@ jest.mock('../history_local_storage', () => { timeZone: 'Browser', timeRan: 'Mar. 25, 24 08:45:27', queryRunning: false, - duration: '2ms', status: 'success', }, ], @@ -78,16 +77,6 @@ describe('QueryHistory', () => { sortable: true, width: '240px', }, - { - 'data-test-subj': 'lastDuration', - field: 'duration', - name: 'Last duration', - sortable: false, - width: '120px', - css: { - justifyContent: 'flex-end', - }, - }, { actions: [], 'data-test-subj': 'actions', @@ -126,16 +115,6 @@ describe('QueryHistory', () => { name: 'Recent queries', render: expect.anything(), }, - { - 'data-test-subj': 'lastDuration', - field: 'duration', - name: 'Last duration', - sortable: false, - width: 'auto', - css: { - justifyContent: 'flex-end', - }, - }, { actions: [], 'data-test-subj': 'actions', @@ -145,27 +124,6 @@ describe('QueryHistory', () => { ]); }); - describe('QueryHistory component', () => { - it('should not fetch the query items if refetchHistoryItems is not given', async () => { - render(); - expect(screen.getByRole('table')).toHaveTextContent('No items found'); - }); - - it('should fetch the query items if refetchHistoryItems is given ', async () => { - render( - - ); - expect(screen.getByRole('table')).toHaveTextContent( - 'Time ranRecent queriesLast durationMar. 25, 24 08:45:27from kibana_sample_data_flights | limit 102ms' - ); - }); - }); - describe('Querystring column', () => { it('should not render the expanded button for large viewports', async () => { render( diff --git a/packages/kbn-text-based-editor/src/editor_footer/query_history.tsx b/packages/kbn-text-based-editor/src/editor_footer/query_history.tsx index b7110121ae19a8..20c837bf685e73 100644 --- a/packages/kbn-text-based-editor/src/editor_footer/query_history.tsx +++ b/packages/kbn-text-based-editor/src/editor_footer/query_history.tsx @@ -211,19 +211,6 @@ export const getTableColumns = ( render: (timeRan: QueryHistoryItem['timeRan']) => timeRan, width: isOnReducedSpaceLayout ? 'auto' : '240px', }, - { - field: 'duration', - 'data-test-subj': 'lastDuration', - name: i18n.translate( - 'textBasedEditor.query.textBasedLanguagesEditor.lastDurationColumnLabel', - { - defaultMessage: 'Last duration', - } - ), - sortable: false, - width: isOnReducedSpaceLayout ? 'auto' : '120px', - css: { justifyContent: 'flex-end' as const }, // right alignment - }, { name: '', actions, @@ -239,27 +226,18 @@ export const getTableColumns = ( export function QueryHistory({ containerCSS, containerWidth, - refetchHistoryItems, onUpdateAndSubmit, isInCompactMode, }: { containerCSS: Interpolation; containerWidth: number; onUpdateAndSubmit: (qs: string) => void; - refetchHistoryItems?: boolean; isInCompactMode?: boolean; }) { const theme = useEuiTheme(); const scrollBarStyles = euiScrollBarStyles(theme); const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc'); - const [historyItems, setHistoryItems] = useState([]); - - useEffect(() => { - if (refetchHistoryItems) { - // get history items from local storage - setHistoryItems(getHistoryItems(sortDirection)); - } - }, [refetchHistoryItems, sortDirection]); + const historyItems: QueryHistoryItem[] = getHistoryItems(sortDirection); const actions: Array> = useMemo(() => { return [ @@ -362,9 +340,6 @@ export function QueryHistory({ vertical-align: top; border: none; } - .euiTable th[data-test-subj='tableHeaderCell_duration_3'] span { - justify-content: flex-end; - } border-bottom-left-radius: ${euiTheme.border.radius.medium}; border-top-left-radius: ${euiTheme.border.radius.medium}; max-height: ${isInCompactMode ? CONTAINER_MAX_HEIGHT_COMPACT : CONTAINER_MAX_HEIGHT_EXPANDED}px; diff --git a/packages/kbn-text-based-editor/src/editor_footer/query_history_helpers.ts b/packages/kbn-text-based-editor/src/editor_footer/query_history_helpers.ts index 83b1353098280b..c55bc0801ec663 100644 --- a/packages/kbn-text-based-editor/src/editor_footer/query_history_helpers.ts +++ b/packages/kbn-text-based-editor/src/editor_footer/query_history_helpers.ts @@ -19,11 +19,11 @@ export const getReducedSpaceStyling = () => { } .euiTable thead tr { display: grid; - grid-template-columns: 40px 1fr 0 auto 72px; + grid-template-columns: 40px 1fr 0 auto; } .euiTable tbody tr { display: grid; - grid-template-columns: 40px 1fr auto 72px; + grid-template-columns: 40px 1fr auto; grid-template-areas: 'status timeRan lastDuration actions' '. queryString queryString queryString'; diff --git a/packages/kbn-text-based-editor/src/history_local_storage.test.ts b/packages/kbn-text-based-editor/src/history_local_storage.test.ts index 3b11c67f555bc4..5e004affd2cec1 100644 --- a/packages/kbn-text-based-editor/src/history_local_storage.test.ts +++ b/packages/kbn-text-based-editor/src/history_local_storage.test.ts @@ -6,8 +6,7 @@ * your election, the "Elastic License 2.0", the "GNU Affero General Public * License v3.0 only", or the "Server Side Public License, v 1". */ - -import { addQueriesToCache, getCachedQueries, updateCachedQueries } from './history_local_storage'; +import { addQueriesToCache, getCachedQueries } from './history_local_storage'; describe('history local storage', function () { const mockGetItem = jest.fn(); @@ -25,9 +24,7 @@ describe('history local storage', function () { }); const historyItems = getCachedQueries(); expect(historyItems.length).toBe(1); - expect(historyItems[0].queryRunning).toBe(true); expect(historyItems[0].timeRan).toBeDefined(); - expect(historyItems[0].duration).toBeUndefined(); expect(historyItems[0].status).toBeUndefined(); }); @@ -35,17 +32,12 @@ describe('history local storage', function () { addQueriesToCache({ queryString: 'from kibana_sample_data_flights \n | limit 10 \n | stats meow = avg(woof)', timeZone: 'Browser', - }); - updateCachedQueries({ - queryString: 'from kibana_sample_data_flights \n | limit 10 \n | stats meow = avg(woof)', status: 'success', }); const historyItems = getCachedQueries(); expect(historyItems.length).toBe(2); - expect(historyItems[1].queryRunning).toBe(false); expect(historyItems[1].timeRan).toBeDefined(); - expect(historyItems[1].duration).toBeDefined(); expect(historyItems[1].status).toBe('success'); expect(mockSetItem).toHaveBeenCalledWith( @@ -55,19 +47,14 @@ describe('history local storage', function () { }); it('should allow maximum x queries ', function () { - addQueriesToCache({ - queryString: 'row 1', - timeZone: 'Browser', - }); - // allow maximum 2 queries - updateCachedQueries( + addQueriesToCache( { queryString: 'row 1', + timeZone: 'Browser', status: 'success', }, 2 ); - const historyItems = getCachedQueries(); expect(historyItems.length).toBe(2); }); diff --git a/packages/kbn-text-based-editor/src/history_local_storage.ts b/packages/kbn-text-based-editor/src/history_local_storage.ts index 33c6e0cd71fabf..259fb20db14655 100644 --- a/packages/kbn-text-based-editor/src/history_local_storage.ts +++ b/packages/kbn-text-based-editor/src/history_local_storage.ts @@ -22,8 +22,6 @@ export interface QueryHistoryItem { startDateMilliseconds?: number; timeRan?: string; timeZone?: string; - duration?: string; - queryRunning?: boolean; } const MAX_QUERIES_NUMBER = 20; @@ -57,7 +55,11 @@ export const getCachedQueries = (): QueryHistoryItem[] => { return Array.from(cachedQueries, ([name, value]) => ({ ...value })); }; -export const addQueriesToCache = (item: QueryHistoryItem) => { +// Adding the maxQueriesAllowed here for testing purposes +export const addQueriesToCache = ( + item: QueryHistoryItem, + maxQueriesAllowed = MAX_QUERIES_NUMBER +) => { const queries = getHistoryItems('desc'); queries.forEach((queryItem) => { const trimmedQueryString = getKey(queryItem.queryString); @@ -71,29 +73,10 @@ export const addQueriesToCache = (item: QueryHistoryItem) => { ...item, timeRan: moment().tz(tz).format(dateFormat), startDateMilliseconds: moment().valueOf(), - queryRunning: true, - }); - } -}; -// Adding the maxQueriesAllowed here for testing purposes -export const updateCachedQueries = ( - item: QueryHistoryItem, - maxQueriesAllowed = MAX_QUERIES_NUMBER -) => { - const trimmedQueryString = getKey(item.queryString); - const query = cachedQueries.get(trimmedQueryString); - - if (query) { - const now = moment().valueOf(); - const duration = moment(now).diff(moment(query?.startDateMilliseconds)); - cachedQueries.set(trimmedQueryString, { - ...query, - timeRan: query.queryRunning ? query.timeRan : moment().format('MMM. D, YY HH:mm:ss'), - duration: query.queryRunning ? `${duration}ms` : query.duration, status: item.status, - queryRunning: false, }); } + const queriesToStore = getCachedQueries(); const localStorageQueries = getHistoryItems('desc'); // if the user is working on multiple tabs diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.test.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.test.tsx index e36d0f67d56a9b..d8fe9512691a14 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.test.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.test.tsx @@ -112,26 +112,6 @@ describe('TextBasedLanguagesEditor', () => { ).toStrictEqual('LIMIT 1000 rows'); }); - it('should render the query history action if isLoading is defined', async () => { - const newProps = { - ...props, - isLoading: true, - }; - const component = mount(renderTextBasedLanguagesEditorComponent({ ...newProps })); - expect( - component.find('[data-test-subj="TextBasedLangEditor-toggle-query-history-button-container"]') - .length - ).not.toBe(0); - }); - - it('should not render the query history action if isLoading is undefined', async () => { - const component = mount(renderTextBasedLanguagesEditorComponent({ ...props })); - expect( - component.find('[data-test-subj="TextBasedLangEditor-toggle-query-history-button-container"]') - .length - ).toBe(0); - }); - it('should not render the query history action if hideQueryHistory is set to true', async () => { const newProps = { ...props, 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 c7ac524a23afa7..c4c28b70148539 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 @@ -42,7 +42,7 @@ import { useDebounceWithOptions, type MonacoMessage, } from './helpers'; -import { addQueriesToCache, updateCachedQueries } from './history_local_storage'; +import { addQueriesToCache } from './history_local_storage'; import { ResizableButton } from './resizable_button'; import { EDITOR_INITIAL_HEIGHT, @@ -128,12 +128,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ errors: [], warnings: [], }); - const [refetchHistoryItems, setRefetchHistoryItems] = useState(false); - - // as the duration on the history component is being calculated from - // the isLoading property, if this property is not defined we want - // to hide the history component - const hideHistoryComponent = hideQueryHistory || isLoading == null; + const hideHistoryComponent = hideQueryHistory; const onQueryUpdate = useCallback( (value: string) => { @@ -450,19 +445,12 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ } }; if (isQueryLoading || isLoading) { + validateQuery(); addQueriesToCache({ queryString: code, timeZone, - }); - validateQuery(); - setRefetchHistoryItems(false); - } else { - updateCachedQueries({ - queryString: code, status: clientParserStatus, }); - - setRefetchHistoryItems(true); } }, [clientParserStatus, isLoading, isQueryLoading, parseMessages, code, timeZone]); @@ -744,7 +732,6 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ setIsHistoryOpen={toggleHistory} measuredContainerWidth={measuredEditorWidth} hideQueryHistory={hideHistoryComponent} - refetchHistoryItems={refetchHistoryItems} isHelpMenuOpen={isLanguagePopoverOpen} setIsHelpMenuOpen={setIsLanguagePopoverOpen} /> diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 2413f8a856fabe..7c83f9bd6ccf7d 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -1136,7 +1136,9 @@ export const UnifiedDataTable = ({ trailingControlColumns={trailingControlColumns} cellContext={cellContext} renderCellPopover={renderCustomPopover} - virtualizationOptions={VIRTUALIZATION_OPTIONS} + // Don't use row overscan when showing Document column since + // rendering so much DOM content in each cell impacts performance + virtualizationOptions={defaultColumns ? undefined : VIRTUALIZATION_OPTIONS} /> )} diff --git a/sonar-project.properties b/sonar-project.properties index 398842fe8445d9..1b42b0340ab548 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.projectKey=elastic_kibana_AYvOkAHeQZlFqhqWIr9Y sonar.projectName=Kibana sonar.host.url=https://sonar.elastic.dev - +sonar.sourceEncoding=UTF-8 sonar.sources=\ packages, \ src, \ @@ -45,10 +45,11 @@ sonar.exclusions=\ **/test_data/**/*, \ **/test_mocks.ts, \ **/test_resources/**/*, \ + **/test_helpers/**/*, \ **/tests/**/*, \ src/dev/**/*, \ x-pack/plugins/*/scripts/**/*, \ src/plugins/*/scripts/**/*, \ - packages/*/scripts/**/*, - -sonar.javascript.node.maxspace=8192 + packages/*/scripts/**/* +sonar.coverage.exclusions=** +sonar.javascript.node.maxspace=16384 diff --git a/src/dev/build/tasks/copy_legacy_source_task.ts b/src/dev/build/tasks/copy_legacy_source_task.ts index c4005bded29b74..2a377c42264de4 100644 --- a/src/dev/build/tasks/copy_legacy_source_task.ts +++ b/src/dev/build/tasks/copy_legacy_source_task.ts @@ -38,9 +38,10 @@ export const CopyLegacySource: Task = { '!**/jest*', '!**/*.{story,stories}.{js,ts}', '!**/{test_mocks,stubs}.ts', - '!**/*.{scss,console,d.ts,sh,md,mdx,asciidoc,docnav.json}', + '!**/*.{scss,console,d.ts,sh,md,mdx,asciidoc,docnav.json,http}', '!**/*.{test,test.mocks,mock,mocks,spec}.*', '!**/{packages,dev_docs,docs,public,__stories__,storybook,.storybook,ftr_e2e,e2e,scripts,test,tests,test_resources,test_data,__tests__,manual_tests,__jest__,__snapshots__,__mocks__,mock_responses,mocks,fixtures,__fixtures__,cypress,integration_tests}/**', + '!**/http-client.env.json', // explicitly exclude every package directory outside of the root packages dir ...getPackages(config.resolveFromRepo('.')).flatMap((p) => diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index 1b85b8fb40b5f9..9feec923b869a4 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -83,6 +83,9 @@ export const IGNORE_FILE_GLOBS = [ // ecs templates '**/ecs/fields/**/*', + + // Support for including http-client.env.json configurations + '**/http-client.env.json', ]; /** diff --git a/src/plugins/dashboard/public/dashboard_actions/index.ts b/src/plugins/dashboard/public/dashboard_actions/index.ts index 6afbb424f18230..30f6819bd37dde 100644 --- a/src/plugins/dashboard/public/dashboard_actions/index.ts +++ b/src/plugins/dashboard/public/dashboard_actions/index.ts @@ -17,10 +17,8 @@ import { CopyToDashboardAction } from './copy_to_dashboard_action'; import { ExpandPanelAction } from './expand_panel_action'; import { ExportCSVAction } from './export_csv_action'; import { FiltersNotificationAction } from './filters_notification_action'; -import { LegacyLibraryNotificationAction } from './legacy_library_notification_action'; import { UnlinkFromLibraryAction } from './unlink_from_library_action'; import { LegacyUnlinkFromLibraryAction } from './legacy_unlink_from_library_action'; -import { LibraryNotificationAction } from './library_notification_action'; interface BuildAllDashboardActionsProps { core: CoreStart; @@ -64,20 +62,10 @@ export const buildAllDashboardActions = async ({ uiActions.registerAction(unlinkFromLibraryAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, unlinkFromLibraryAction.id); - const libraryNotificationAction = new LibraryNotificationAction(unlinkFromLibraryAction); - uiActions.registerAction(libraryNotificationAction); - uiActions.attachAction(PANEL_NOTIFICATION_TRIGGER, libraryNotificationAction.id); - const legacyUnlinkFromLibraryAction = new LegacyUnlinkFromLibraryAction(); uiActions.registerAction(legacyUnlinkFromLibraryAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, legacyUnlinkFromLibraryAction.id); - const legacyLibraryNotificationAction = new LegacyLibraryNotificationAction( - legacyUnlinkFromLibraryAction - ); - uiActions.registerAction(legacyLibraryNotificationAction); - uiActions.attachAction(PANEL_NOTIFICATION_TRIGGER, legacyLibraryNotificationAction.id); - const copyToDashboardAction = new CopyToDashboardAction(core); uiActions.registerAction(copyToDashboardAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, copyToDashboardAction.id); diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.test.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.test.tsx deleted file mode 100644 index 687787e377a836..00000000000000 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.test.tsx +++ /dev/null @@ -1,63 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { ViewMode } from '@kbn/presentation-publishing'; -import { waitFor } from '@testing-library/react'; -import { BehaviorSubject } from 'rxjs'; -import { LegacyLibraryNotificationAction } from './legacy_library_notification_action'; -import { - LegacyUnlinkFromLibraryAction, - LegacyUnlinkPanelFromLibraryActionApi, -} from './legacy_unlink_from_library_action'; - -describe('library notification action', () => { - let action: LegacyLibraryNotificationAction; - let unlinkAction: LegacyUnlinkFromLibraryAction; - let context: { embeddable: LegacyUnlinkPanelFromLibraryActionApi }; - - let updateViewMode: (viewMode: ViewMode) => void; - - beforeEach(() => { - const viewModeSubject = new BehaviorSubject('edit'); - updateViewMode = (viewMode) => viewModeSubject.next(viewMode); - - unlinkAction = new LegacyUnlinkFromLibraryAction(); - action = new LegacyLibraryNotificationAction(unlinkAction); - context = { - embeddable: { - viewMode: viewModeSubject, - canUnlinkFromLibrary: jest.fn().mockResolvedValue(true), - unlinkFromLibrary: jest.fn(), - canLinkToLibrary: jest.fn().mockResolvedValue(true), - linkToLibrary: jest.fn(), - }, - }; - }); - - it('is compatible when api meets all conditions', async () => { - expect(await action.isCompatible(context)).toBe(true); - }); - - it('is incompatible when api is missing required functions', async () => { - const emptyContext = { embeddable: {} }; - expect(await action.isCompatible(emptyContext)).toBe(false); - }); - - it('is incompatible when can unlink from library resolves to false', async () => { - context.embeddable.canUnlinkFromLibrary = jest.fn().mockResolvedValue(false); - expect(await action.isCompatible(context)).toBe(false); - }); - - it('calls onChange when view mode changes', async () => { - const onChange = jest.fn(); - action.subscribeToCompatibilityChanges(context, onChange); - updateViewMode('view'); - await waitFor(() => expect(onChange).toHaveBeenCalledWith(false, action)); - }); -}); diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.tsx deleted file mode 100644 index 6716add2ee03a8..00000000000000 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_library_notification_action.tsx +++ /dev/null @@ -1,77 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; - -import { - EmbeddableApiContext, - getInheritedViewMode, - getViewModeSubject, -} from '@kbn/presentation-publishing'; -import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { LibraryNotificationPopover } from './library_notification_popover'; -import { - legacyUnlinkActionIsCompatible, - LegacyUnlinkFromLibraryAction, -} from './legacy_unlink_from_library_action'; -import { dashboardLibraryNotificationStrings } from './_dashboard_actions_strings'; - -export const LEGACY_ACTION_LIBRARY_NOTIFICATION = 'LEGACY_ACTION_LIBRARY_NOTIFICATION'; - -export class LegacyLibraryNotificationAction implements Action { - public readonly id = LEGACY_ACTION_LIBRARY_NOTIFICATION; - public readonly type = LEGACY_ACTION_LIBRARY_NOTIFICATION; - public readonly order = 1; - - constructor(private unlinkAction: LegacyUnlinkFromLibraryAction) {} - - public readonly MenuItem = ({ context }: { context: EmbeddableApiContext }) => { - const { embeddable } = context; - if (!legacyUnlinkActionIsCompatible(embeddable)) throw new IncompatibleActionError(); - return ; - }; - - public couldBecomeCompatible({ embeddable }: EmbeddableApiContext) { - return legacyUnlinkActionIsCompatible(embeddable); - } - - public subscribeToCompatibilityChanges( - { embeddable }: EmbeddableApiContext, - onChange: (isCompatible: boolean, action: LegacyLibraryNotificationAction) => void - ) { - if (!legacyUnlinkActionIsCompatible(embeddable)) return; - - /** - * TODO: Upgrade this action by subscribing to changes in the existance of a saved object id. Currently, - * this is unnecessary because a link or unlink operation will cause the panel to unmount and remount. - */ - return getViewModeSubject(embeddable)?.subscribe((viewMode) => { - embeddable.canUnlinkFromLibrary().then((canUnlink) => { - onChange(viewMode === 'edit' && canUnlink, this); - }); - }); - } - - public getDisplayName({ embeddable }: EmbeddableApiContext) { - if (!legacyUnlinkActionIsCompatible(embeddable)) throw new IncompatibleActionError(); - return dashboardLibraryNotificationStrings.getDisplayName(); - } - - public getIconType({ embeddable }: EmbeddableApiContext) { - if (!legacyUnlinkActionIsCompatible(embeddable)) throw new IncompatibleActionError(); - return 'folderCheck'; - } - - public isCompatible = async ({ embeddable }: EmbeddableApiContext) => { - if (!legacyUnlinkActionIsCompatible(embeddable)) return false; - return getInheritedViewMode(embeddable) === 'edit' && embeddable.canUnlinkFromLibrary(); - }; - - public execute = async () => {}; -} diff --git a/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx b/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx deleted file mode 100644 index 4dd0b4df6f4834..00000000000000 --- a/src/plugins/dashboard/public/dashboard_actions/library_notification_action.tsx +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React from 'react'; - -import { - apiHasInPlaceLibraryTransforms, - EmbeddableApiContext, - getInheritedViewMode, - getViewModeSubject, -} from '@kbn/presentation-publishing'; -import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { BehaviorSubject, combineLatest } from 'rxjs'; -import { LibraryNotificationPopover } from './library_notification_popover'; -import { isApiCompatible, UnlinkFromLibraryAction } from './unlink_from_library_action'; -import { dashboardLibraryNotificationStrings } from './_dashboard_actions_strings'; - -export const ACTION_LIBRARY_NOTIFICATION = 'ACTION_LIBRARY_NOTIFICATION'; - -export class LibraryNotificationAction implements Action { - public readonly id = ACTION_LIBRARY_NOTIFICATION; - public readonly type = ACTION_LIBRARY_NOTIFICATION; - public readonly order = 1; - - constructor(private unlinkAction: UnlinkFromLibraryAction) {} - - public readonly MenuItem = ({ context }: { context: EmbeddableApiContext }) => { - const { embeddable } = context; - if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - return ; - }; - - public couldBecomeCompatible({ embeddable }: EmbeddableApiContext) { - return isApiCompatible(embeddable); - } - - public subscribeToCompatibilityChanges = ( - { embeddable }: EmbeddableApiContext, - onChange: (isCompatible: boolean, action: LibraryNotificationAction) => void - ) => { - if (!isApiCompatible(embeddable)) return; - const libraryIdSubject = apiHasInPlaceLibraryTransforms(embeddable) - ? embeddable.libraryId$ - : new BehaviorSubject(undefined); - const viewModeSubject = getViewModeSubject(embeddable); - if (!viewModeSubject) throw new IncompatibleActionError(); - - /** - * TODO: Upgrade this action by subscribing to changes in the existance of a saved object id. Currently, - * this is unnecessary because a link or unlink operation will cause the panel to unmount and remount. - */ - return combineLatest([libraryIdSubject, viewModeSubject]).subscribe(([libraryId, viewMode]) => { - this.unlinkAction.canUnlinkFromLibrary(embeddable).then((canUnlink) => { - onChange(viewMode === 'edit' && canUnlink, this); - }); - }); - }; - - public getDisplayName({ embeddable }: EmbeddableApiContext) { - if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - return dashboardLibraryNotificationStrings.getDisplayName(); - } - - public getIconType({ embeddable }: EmbeddableApiContext) { - if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); - return 'folderCheck'; - } - - public isCompatible = async ({ embeddable }: EmbeddableApiContext) => { - if (!isApiCompatible(embeddable)) return false; - return ( - getInheritedViewMode(embeddable) === 'edit' && - this.unlinkAction.canUnlinkFromLibrary(embeddable) - ); - }; - - public execute = async () => {}; -} diff --git a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.test.tsx b/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.test.tsx deleted file mode 100644 index 774e3c72242d46..00000000000000 --- a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.test.tsx +++ /dev/null @@ -1,65 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; -import { I18nProvider } from '@kbn/i18n-react'; -import { ViewMode } from '@kbn/presentation-publishing'; -import { render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { BehaviorSubject } from 'rxjs'; -import { LibraryNotificationPopover } from './library_notification_popover'; -import { - LegacyUnlinkFromLibraryAction, - LegacyUnlinkPanelFromLibraryActionApi, -} from './legacy_unlink_from_library_action'; - -const mockUnlinkFromLibraryAction = { - execute: jest.fn(), - isCompatible: jest.fn().mockResolvedValue(true), - getDisplayName: jest.fn().mockReturnValue('Test Unlink'), -} as unknown as LegacyUnlinkFromLibraryAction; - -describe('library notification popover', () => { - let api: LegacyUnlinkPanelFromLibraryActionApi; - - beforeEach(async () => { - api = { - viewMode: new BehaviorSubject('edit'), - canUnlinkFromLibrary: jest.fn().mockResolvedValue(true), - unlinkFromLibrary: jest.fn(), - canLinkToLibrary: jest.fn().mockResolvedValue(true), - linkToLibrary: jest.fn(), - }; - }); - - const renderAndOpenPopover = async () => { - render( - - - - ); - await userEvent.click( - await screen.findByTestId('embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION') - ); - await waitForEuiPopoverOpen(); - }; - - it('renders the unlink button', async () => { - await renderAndOpenPopover(); - expect(await screen.findByText('Test Unlink')).toBeInTheDocument(); - }); - - it('calls the unlink action execute method on click', async () => { - await renderAndOpenPopover(); - const button = await screen.findByTestId('libraryNotificationUnlinkButton'); - await userEvent.click(button); - expect(mockUnlinkFromLibraryAction.execute).toHaveBeenCalled(); - }); -}); diff --git a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx b/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx deleted file mode 100644 index dc2fe80e570ba0..00000000000000 --- a/src/plugins/dashboard/public/dashboard_actions/library_notification_popover.tsx +++ /dev/null @@ -1,86 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useState } from 'react'; -import { - EuiButton, - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiPopover, - EuiPopoverFooter, - EuiPopoverTitle, - EuiText, -} from '@elastic/eui'; - -import { - LegacyUnlinkFromLibraryAction, - LegacyUnlinkPanelFromLibraryActionApi, -} from './legacy_unlink_from_library_action'; -import { dashboardLibraryNotificationStrings } from './_dashboard_actions_strings'; -import { - UnlinkFromLibraryAction, - UnlinkPanelFromLibraryActionApi, -} from './unlink_from_library_action'; - -export interface LibraryNotificationProps { - api: UnlinkPanelFromLibraryActionApi | LegacyUnlinkPanelFromLibraryActionApi; - unlinkAction: UnlinkFromLibraryAction | LegacyUnlinkFromLibraryAction; -} - -export function LibraryNotificationPopover({ unlinkAction, api }: LibraryNotificationProps) { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - - return ( - setIsPopoverOpen(!isPopoverOpen)} - data-test-subj={'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION'} - aria-label={dashboardLibraryNotificationStrings.getPopoverAriaLabel()} - /> - } - isOpen={isPopoverOpen} - closePopover={() => setIsPopoverOpen(false)} - anchorPosition="upCenter" - > - {dashboardLibraryNotificationStrings.getDisplayName()} -

- -

{dashboardLibraryNotificationStrings.getTooltip()}

-
-
- - - - { - setIsPopoverOpen(false); - unlinkAction.execute({ embeddable: api }); - }} - > - {unlinkAction.getDisplayName({ embeddable: api })} - - - - - - ); -} diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx index 5eeebc7f394b06..244689687644a0 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern_container.tsx @@ -24,7 +24,7 @@ const EditIndexPatternCont: React.FC> = ({ . useEffect(() => { dataViews - .get(props.match.params.id) + .get(decodeURIComponent(props.match.params.id)) .then((ip: DataView) => { setIndexPattern(ip); setBreadcrumbs(getEditBreadcrumbs(ip)); diff --git a/src/plugins/home/server/tutorials/cloudwatch_logs/index.ts b/src/plugins/home/server/tutorials/cloudwatch_logs/index.ts index b63cbabbcb3c71..a6e0213ddc3669 100644 --- a/src/plugins/home/server/tutorials/cloudwatch_logs/index.ts +++ b/src/plugins/home/server/tutorials/cloudwatch_logs/index.ts @@ -34,12 +34,7 @@ export function cloudwatchLogsSpecProvider(context: TutorialContext): TutorialSc longDescription: i18n.translate('home.tutorials.cloudwatchLogs.longDescription', { defaultMessage: 'Collect Cloudwatch logs by deploying Functionbeat to run as \ - an AWS Lambda function. \ - [Learn more]({learnMoreLink}).', - values: { - learnMoreLink: - '{config.docs.beats.functionbeat}/functionbeat-installation-configuration.html', - }, + an AWS Lambda function.', }), euiIconType: 'logoAWS', artifacts: { diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_item.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_item.tsx index c6ad6dfd0842a5..a9ef055d6e1fda 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu_item.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu_item.tsx @@ -50,7 +50,6 @@ export function TopNavMenuItem(props: TopNavMenuData) { 'data-test-subj': props.testId, className: props.className, color: (props.color ?? 'primary') as EuiButtonColor, - fill: props.fill ?? true, }; // If the item specified a href, then override the suppress the onClick @@ -60,8 +59,9 @@ export function TopNavMenuItem(props: TopNavMenuData) { ? { onClick: undefined, href: props.href, target: props.target } : {}; + // fill is not compatible with EuiHeaderLink const btn = props.emphasize ? ( - + {getButtonContainer()} ) : ( diff --git a/test/accessibility/apps/dashboard.ts b/test/accessibility/apps/dashboard.ts index 73b841dbf3b711..2984c22d7c8481 100644 --- a/test/accessibility/apps/dashboard.ts +++ b/test/accessibility/apps/dashboard.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'home', 'settings']); + const { common, dashboard } = getPageObjects(['common', 'dashboard']); const a11y = getService('a11y'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardSettings = getService('dashboardSettings'); @@ -22,22 +22,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const clonedDashboardName = 'Dashboard Listing A11y (1)'; it('navitate to dashboard app', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); await a11y.testAppSnapshot(); }); it('create dashboard button', async () => { - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); await a11y.testAppSnapshot(); }); it('save empty dashboard', async () => { - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.saveDashboard(dashboardName); await a11y.testAppSnapshot(); }); it('Open Edit mode', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await a11y.testAppSnapshot(); }); @@ -58,17 +58,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('save the dashboard', async () => { - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); await a11y.testAppSnapshot(); }); it('Open Edit mode again', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await a11y.testAppSnapshot(); }); it('open settings flyout', async () => { - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await a11y.testAppSnapshot(); }); @@ -106,35 +106,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Exit out of edit mode', async () => { - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); await a11y.testAppSnapshot(); }); it('Discard changes', async () => { - await PageObjects.common.clickConfirmOnModal(); - await PageObjects.dashboard.getIsInViewMode(); + await common.clickConfirmOnModal(); + await dashboard.getIsInViewMode(); await a11y.testAppSnapshot(); }); // https://github.com/elastic/kibana/issues/153597 it.skip('Test full screen', async () => { - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.clickFullScreenMode(); await a11y.testAppSnapshot(); }); // https://github.com/elastic/kibana/issues/153597 it.skip('Exit out of full screen mode', async () => { - await PageObjects.dashboard.exitFullScreenMode(); + await dashboard.exitFullScreenMode(); await a11y.testAppSnapshot(); }); it('Make a clone of the dashboard', async () => { - await PageObjects.dashboard.duplicateDashboard(); + await dashboard.duplicateDashboard(); await a11y.testAppSnapshot(); }); it('Dashboard listing table', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await a11y.testAppSnapshot(); }); @@ -143,7 +143,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.checkListingSelectAllCheckbox(); await listingTable.clickDeleteSelected(); await a11y.testAppSnapshot(); - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); await listingTable.isShowingEmptyPromptCreateNewButton(); }); }); diff --git a/test/accessibility/apps/discover.ts b/test/accessibility/apps/discover.ts index a24b5710a9d68c..f94bc2d3c427e0 100644 --- a/test/accessibility/apps/discover.ts +++ b/test/accessibility/apps/discover.ts @@ -10,10 +10,9 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { common, discover, share, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', - 'header', 'share', 'timePicker', 'unifiedFieldList', @@ -30,8 +29,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Discover a11y tests', () => { before(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setCommonlyUsedTime('Last_7 days'); + await common.navigateToApp('discover'); + await timePicker.setCommonlyUsedTime('Last_7 days'); }); it('Discover main page', async () => { @@ -39,29 +38,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('a11y test on save button', async () => { - await PageObjects.discover.clickSaveSearchButton(); + await discover.clickSaveSearchButton(); await a11y.testAppSnapshot(); }); it('a11y test on save search panel', async () => { - await PageObjects.discover.inputSavedSearchTitle('a11ySearch'); + await discover.inputSavedSearchTitle('a11ySearch'); await a11y.testAppSnapshot(); }); it('a11y test on clicking on confirm save', async () => { - await PageObjects.discover.clickConfirmSavedSearch(); + await discover.clickConfirmSavedSearch(); await a11y.testAppSnapshot(); }); it('a11y test on click new to reload discover', async () => { - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); await a11y.testAppSnapshot(); }); it('a11y test on load saved search panel', async () => { - await PageObjects.discover.openLoadSavedSearchPanel(); + await discover.openLoadSavedSearchPanel(); await a11y.testAppSnapshot(); - await PageObjects.discover.closeLoadSavedSearchPanel(); + await discover.closeLoadSavedSearchPanel(); }); it('a11y test on inspector panel', async () => { @@ -71,45 +70,45 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('a11y test on share panel', async () => { - await PageObjects.share.clickShareTopNavButton(); + await share.clickShareTopNavButton(); await a11y.testAppSnapshot(); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); it('a11y test on open sidenav filter', async () => { - await PageObjects.share.closeShareModal(); - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); + await share.closeShareModal(); + await unifiedFieldList.openSidebarFieldFilter(); await a11y.testAppSnapshot(); - await PageObjects.unifiedFieldList.closeSidebarFieldFilter(); + await unifiedFieldList.closeSidebarFieldFilter(); }); it('a11y test on tables with columns view', async () => { for (const columnName of TEST_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItemToggle(columnName); + await unifiedFieldList.clickFieldListItemToggle(columnName); } await a11y.testAppSnapshot(); }); it('a11y test on save queries popover', async () => { - await PageObjects.discover.clickSavedQueriesPopOver(); + await discover.clickSavedQueriesPopOver(); await a11y.testAppSnapshot(); }); it('a11y test on save queries panel', async () => { - await PageObjects.discover.clickCurrentSavedQuery(); + await discover.clickCurrentSavedQuery(); await a11y.testAppSnapshot(); }); it('a11y test on toggle include filters option on saved queries panel', async () => { - await PageObjects.discover.setSaveQueryFormTitle('test'); - await PageObjects.discover.toggleIncludeFilters(); + await discover.setSaveQueryFormTitle('test'); + await discover.toggleIncludeFilters(); await a11y.testAppSnapshot(); - await PageObjects.discover.saveCurrentSavedQuery(); + await discover.saveCurrentSavedQuery(); }); it('a11y test on saved queries list panel', async () => { await savedQueryManagementComponent.loadSavedQuery('test'); - await PageObjects.discover.clickSavedQueriesPopOver(); + await discover.clickSavedQueriesPopOver(); await testSubjects.click('saved-query-management-load-button'); await savedQueryManagementComponent.deleteSavedQuery('test'); await a11y.testAppSnapshot({ @@ -128,12 +127,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('a11y test on JSON view of the document', async () => { - await PageObjects.discover.clickDocViewerTab('doc_view_source'); + await discover.clickDocViewerTab('doc_view_source'); await a11y.testAppSnapshot(); }); it('a11y test for actions on a field', async () => { - await PageObjects.discover.clickDocViewerTab('doc_view_table'); + await discover.clickDocViewerTab('doc_view_table'); await dataGrid.expandFieldNameCellInFlyout('Cancelled'); await a11y.testAppSnapshot(); await browser.pressKeys(browser.keys.ESCAPE); @@ -165,9 +164,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('a11y test for data grid with hidden chart', async () => { - await PageObjects.discover.closeHistogramPanel(); + await discover.closeHistogramPanel(); await a11y.testAppSnapshot(); - await PageObjects.discover.openHistogramPanel(); + await discover.openHistogramPanel(); }); it('a11y test for time interval panel', async () => { @@ -194,14 +193,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('a11y test for field statistics data grid view', async () => { - await PageObjects.discover.clickViewModeFieldStatsButton(); + await discover.clickViewModeFieldStatsButton(); await a11y.testAppSnapshot(); }); it('a11y test for data grid with collapsed side bar', async () => { - await PageObjects.discover.closeSidebar(); + await discover.closeSidebar(); await a11y.testAppSnapshot(); - await PageObjects.discover.openSidebar(); + await discover.openSidebar(); }); it('a11y test for adding a field from side bar', async () => { diff --git a/test/accessibility/apps/filter_panel.ts b/test/accessibility/apps/filter_panel.ts index 8cadea04968f58..2945c54e1cbae7 100644 --- a/test/accessibility/apps/filter_panel.ts +++ b/test/accessibility/apps/filter_panel.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover']); + const { common, discover } = getPageObjects(['common', 'discover']); const a11y = getService('a11y'); const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); @@ -18,13 +18,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Filter panel', () => { before(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); it('a11y test on add filter panel', async () => { - await PageObjects.discover.openAddFilterPanel(); + await discover.openAddFilterPanel(); await a11y.testAppSnapshot(); - await PageObjects.discover.closeAddFilterPanel(); + await discover.closeAddFilterPanel(); await filterBar.addFilter({ field: 'OriginCityName', operation: 'is', value: 'Rome' }); }); diff --git a/test/accessibility/apps/visualize.ts b/test/accessibility/apps/visualize.ts index e2df882b1f01de..c2ffc0d844c4ba 100644 --- a/test/accessibility/apps/visualize.ts +++ b/test/accessibility/apps/visualize.ts @@ -10,24 +10,24 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'header']); + const { visualize } = getPageObjects(['visualize']); const a11y = getService('a11y'); describe('Visualize', () => { it('visualize', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await a11y.testAppSnapshot(); }); it('click on create visualize wizard', async () => { - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); await a11y.testAppSnapshot(); }); it('create visualize button', async () => { - await PageObjects.visualize.clickAggBasedVisualizations(); - await PageObjects.visualize.waitForVisualizationSelectPage(); - await PageObjects.visualize.clickAreaChart(); + await visualize.clickAggBasedVisualizations(); + await visualize.waitForVisualizationSelectPage(); + await visualize.clickAreaChart(); await a11y.testAppSnapshot(); }); }); diff --git a/test/examples/discover_customization_examples/customizations.ts b/test/examples/discover_customization_examples/customizations.ts index 10246c7799910c..f9e29611dc0cc0 100644 --- a/test/examples/discover_customization_examples/customizations.ts +++ b/test/examples/discover_customization_examples/customizations.ts @@ -15,7 +15,7 @@ const TEST_END_TIME = 'Sep 23, 2015 @ 18:31:44.000'; // eslint-disable-next-line import/no-default-export export default ({ getService, getPageObjects }: FtrProviderContext) => { - const PageObjects = getPageObjects(['common', 'timePicker', 'header']); + const { common, timePicker, header } = getPageObjects(['common', 'timePicker', 'header']); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); @@ -30,14 +30,14 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('home'); + await common.navigateToApp('home'); const currentUrl = await browser.getCurrentUrl(); const customizationUrl = currentUrl.substring(0, currentUrl.indexOf('/app/home')) + '/app/discoverCustomizationExamples'; await browser.get(customizationUrl); - await PageObjects.timePicker.setAbsoluteRange(TEST_START_TIME, TEST_END_TIME); - await PageObjects.header.waitUntilLoadingHasFinished(); + await timePicker.setAbsoluteRange(TEST_START_TIME, TEST_END_TIME); + await header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -62,9 +62,9 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { it('Search bar', async () => { await testSubjects.click('logsViewSelectorButton'); await testSubjects.click('logsViewSelectorOption-ASavedSearch'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { - const { title, description } = await PageObjects.common.getSharedItemTitleAndDescription(); + const { title, description } = await common.getSharedItemTitleAndDescription(); const expected = { title: 'A Saved Search', description: 'A Saved Search Description', @@ -73,7 +73,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { expect(description).to.eql(expected.description); }); await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); it('Search bar Prepend Filters exists and should apply filter properly', async () => { @@ -97,7 +97,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { // Click the item to apply filter await item.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // Validate that filter is applied const rows = await dataGrid.getDocTableRows(); diff --git a/test/examples/expressions_explorer/index.ts b/test/examples/expressions_explorer/index.ts index 67b2102239645a..d3c39a38cc1e39 100644 --- a/test/examples/expressions_explorer/index.ts +++ b/test/examples/expressions_explorer/index.ts @@ -16,12 +16,12 @@ export default function ({ loadTestFile, }: PluginFunctionalProviderContext) { const browser = getService('browser'); - const PageObjects = getPageObjects(['common', 'header']); + const { common } = getPageObjects(['common']); describe('expressions explorer', function () { before(async () => { await browser.setWindowSize(1300, 900); - await PageObjects.common.navigateToApp('expressionsExplorer'); + await common.navigateToApp('expressionsExplorer'); }); loadTestFile(require.resolve('./expressions')); diff --git a/test/examples/ui_actions/index.ts b/test/examples/ui_actions/index.ts index e977571bf91689..5a4d8de1f1527b 100644 --- a/test/examples/ui_actions/index.ts +++ b/test/examples/ui_actions/index.ts @@ -16,12 +16,12 @@ export default function ({ loadTestFile, }: PluginFunctionalProviderContext) { const browser = getService('browser'); - const PageObjects = getPageObjects(['common', 'header']); + const { common } = getPageObjects(['common']); describe('ui actions explorer', function () { before(async () => { await browser.setWindowSize(1300, 900); - await PageObjects.common.navigateToApp('uiActionsExplorer'); + await common.navigateToApp('uiActionsExplorer'); }); loadTestFile(require.resolve('./ui_actions')); diff --git a/test/functional/apps/context/_discover_navigation.ts b/test/functional/apps/context/_discover_navigation.ts index 3b806d6b2ed523..37dd92a8be50ce 100644 --- a/test/functional/apps/context/_discover_navigation.ts +++ b/test/functional/apps/context/_discover_navigation.ts @@ -20,16 +20,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const dataGrid = getService('dataGrid'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects([ - 'common', - 'discover', - 'timePicker', - 'settings', - 'dashboard', - 'context', - 'header', - 'unifiedFieldList', - ]); + const { common, discover, timePicker, dashboard, context, header, unifiedFieldList } = + getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'dashboard', + 'context', + 'header', + 'unifiedFieldList', + ]); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const browser = getService('browser'); @@ -37,20 +37,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('context link in discover', () => { before(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: 'logstash-*', }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); for (const columnName of TEST_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItemAdd(columnName); + await unifiedFieldList.clickFieldListItemAdd(columnName); } for (const [columnName, value] of TEST_FILTER_COLUMN_NAMES) { await filterBar.addFilter({ field: columnName, operation: 'is', value }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); } }); @@ -77,7 +77,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); await rowActions[1].click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); const anchorTimestamp = await getTimestamp(true); return anchorTimestamp === firstDiscoverTimestamp; }); @@ -89,7 +89,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); await rowActions[1].click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); const anchorTimestamp = await getTimestamp(true); return anchorTimestamp === firstContextTimestamp; }); @@ -111,7 +111,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should navigate to the first document and then back to discover', async () => { - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); // click the open action await retry.try(async () => { @@ -126,26 +126,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(hasDocHit).to.be(true); await testSubjects.click('~breadcrumb & ~first'); - await PageObjects.discover.waitForDiscoverAppOnScreen(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitForDiscoverAppOnScreen(); + await discover.waitUntilSearchingHasFinished(); }); it('navigates to doc view from embeddable', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.saveSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await discover.saveSearch('my search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); await rowActions[0].click(); - await PageObjects.common.sleep(250); + await common.sleep(250); // close popup const alert = await browser.getAlert(); @@ -159,7 +159,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return currentUrl.includes('#/doc'); }); await retry.waitFor('doc view being rendered', async () => { - return await PageObjects.discover.isShowingDocViewer(); + return await discover.isShowingDocViewer(); }); }); }); diff --git a/test/functional/apps/context/classic/_discover_navigation.ts b/test/functional/apps/context/classic/_discover_navigation.ts index a053d22e8a5168..a0bd5847544c50 100644 --- a/test/functional/apps/context/classic/_discover_navigation.ts +++ b/test/functional/apps/context/classic/_discover_navigation.ts @@ -20,16 +20,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const docTable = getService('docTable'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects([ - 'common', - 'discover', - 'timePicker', - 'settings', - 'dashboard', - 'context', - 'header', - 'unifiedFieldList', - ]); + const { common, discover, timePicker, dashboard, context, header, unifiedFieldList } = + getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'dashboard', + 'context', + 'header', + 'unifiedFieldList', + ]); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const browser = getService('browser'); @@ -37,20 +37,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('context link in discover classic', () => { before(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ 'doc_table:legacy': true, defaultIndex: 'logstash-*', }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); for (const columnName of TEST_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItemAdd(columnName); + await unifiedFieldList.clickFieldListItemAdd(columnName); } for (const [columnName, value] of TEST_FILTER_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItem(columnName); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter(columnName, value); + await unifiedFieldList.clickFieldListItem(columnName); + await unifiedFieldList.clickFieldListPlusFilter(columnName, value); } }); after(async () => { @@ -76,7 +76,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await docTable.clickRowToggle({ rowIndex: 0 }); const rowActions = await docTable.getRowActions({ rowIndex: 0 }); await rowActions[0].click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); const anchorTimestamp = await getTimestamp(true); return anchorTimestamp === firstDiscoverTimestamp; }); @@ -87,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await docTable.clickRowToggle({ rowIndex: 0 }); const rowActions = await docTable.getRowActions({ rowIndex: 0 }); await rowActions[0].click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); const anchorTimestamp = await getTimestamp(true); return anchorTimestamp === firstContextTimestamp; }); @@ -110,7 +110,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // bugfix: https://github.com/elastic/kibana/issues/92099 it('should navigate to the first document and then back to discover', async () => { - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); // navigate to the doc view await docTable.clickRowToggle({ rowIndex: 0 }); @@ -128,26 +128,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(hasDocHit).to.be(true); await testSubjects.click('~breadcrumb & ~first'); - await PageObjects.discover.waitForDiscoverAppOnScreen(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDiscoverAppOnScreen(); + await discover.waitForDocTableLoadingComplete(); }); it('navigates to doc view from embeddable', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.saveSearch('my classic search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await discover.saveSearch('my classic search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch('my classic search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await docTable.clickRowToggle({ rowIndex: 0 }); const rowActions = await docTable.getRowActions({ rowIndex: 0 }); await rowActions[1].click(); - await PageObjects.common.sleep(250); + await common.sleep(250); // close popup const alert = await browser.getAlert(); @@ -161,7 +161,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return currentUrl.includes('#/doc'); }); await retry.waitFor('doc view being rendered', async () => { - return await PageObjects.discover.isShowingDocViewer(); + return await discover.isShowingDocViewer(); }); }); }); diff --git a/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts b/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts index a5a32af88ccaba..61929b19ff468f 100644 --- a/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts +++ b/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts @@ -14,7 +14,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); + const { dashboard, header, visualize } = getPageObjects(['dashboard', 'header', 'visualize']); const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -31,9 +31,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('ensure toolbar popover closes on add', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await dashboard.switchToEditMode(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAddNewPanelFromUIActionLink('Log stream (deprecated)'); await dashboardAddPanel.expectEditorMenuClosed(); @@ -45,73 +45,70 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('add new visualization link', () => { before(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); }); it('adds new visualization via the top nav link', async () => { - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); - await PageObjects.dashboard.switchToEditMode(); + const originalPanelCount = await dashboard.getPanelCount(); + await dashboard.switchToEditMode(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationExpectSuccess( - 'visualization from top nav add new panel', - { redirectToOrigin: true } - ); + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationExpectSuccess('visualization from top nav add new panel', { + redirectToOrigin: true, + }); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(originalPanelCount + 1); }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('adds a new visualization', async () => { - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationExpectSuccess( - 'visualization from add new link', - { redirectToOrigin: true } - ); + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationExpectSuccess('visualization from add new link', { + redirectToOrigin: true, + }); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(originalPanelCount + 1); }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('adds a new timelion visualization', async () => { // adding this case, as the timelion agg-based viz doesn't need the `clickNewSearch()` step - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickTimelion(); - await PageObjects.visualize.saveVisualizationExpectSuccess( - 'timelion visualization from add new link', - { redirectToOrigin: true } - ); + await visualize.clickTimelion(); + await visualize.saveVisualizationExpectSuccess('timelion visualization from add new link', { + redirectToOrigin: true, + }); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(originalPanelCount + 1); }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('saves the listing page instead of the visualization to the app link', async () => { - await PageObjects.header.clickVisualize(true); + await header.clickVisualize(true); const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).not.to.contain(VisualizeConstants.EDIT_PATH); }); after(async () => { - await PageObjects.header.clickDashboard(); + await header.clickDashboard(); }); }); }); diff --git a/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts b/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts index a1c649de32f623..9a46ca1051d6a5 100644 --- a/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts +++ b/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); + const { dashboard, header, visualize } = getPageObjects(['dashboard', 'header', 'visualize']); const kibanaServer = getService('kibanaServer'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -27,9 +27,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // add an area chart by value await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationAndReturn(); // add a metric by reference await dashboardAddPanel.addVisualization('Rendering-Test: metric'); @@ -43,8 +43,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); }); after(async () => { @@ -52,126 +52,126 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('lists unsaved changes to existing dashboards', async () => { - await PageObjects.dashboard.loadSavedDashboard(dashboardTitle); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.loadSavedDashboard(dashboardTitle); + await dashboard.switchToEditMode(); await addSomePanels(); - existingDashboardPanelCount = await PageObjects.dashboard.getPanelCount(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.expectUnsavedChangesListingExists(dashboardTitle); + existingDashboardPanelCount = await dashboard.getPanelCount(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.expectUnsavedChangesListingExists(dashboardTitle); }); it('restores unsaved changes to existing dashboards', async () => { - await PageObjects.dashboard.clickUnsavedChangesContinueEditing(dashboardTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.clickUnsavedChangesContinueEditing(dashboardTitle); + await header.waitUntilLoadingHasFinished(); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(existingDashboardPanelCount); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); }); it('lists unsaved changes to new dashboards', async () => { - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); await addSomePanels(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.expectUnsavedChangesListingExists(unsavedDashboardTitle); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.expectUnsavedChangesListingExists(unsavedDashboardTitle); }); it('restores unsaved changes to new dashboards', async () => { - await PageObjects.dashboard.clickUnsavedChangesContinueEditing(unsavedDashboardTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.dashboard.getPanelCount()).to.eql(2); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.clickUnsavedChangesContinueEditing(unsavedDashboardTitle); + await header.waitUntilLoadingHasFinished(); + expect(await dashboard.getPanelCount()).to.eql(2); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); }); it('shows a warning on create new, and restores panels if continue is selected', async () => { - await PageObjects.dashboard.clickNewDashboard({ continueEditing: true, expectWarning: true }); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.dashboard.getPanelCount()).to.eql(2); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.clickNewDashboard({ continueEditing: true, expectWarning: true }); + await header.waitUntilLoadingHasFinished(); + expect(await dashboard.getPanelCount()).to.eql(2); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); }); it('shows a warning on create new, and clears unsaved panels if discard is selected', async () => { - await PageObjects.dashboard.clickNewDashboard({ + await dashboard.clickNewDashboard({ continueEditing: false, expectWarning: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.dashboard.getPanelCount()).to.eql(0); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); + expect(await dashboard.getPanelCount()).to.eql(0); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); }); it('does not show unsaved changes on new dashboard when no panels have been added', async () => { - await PageObjects.dashboard.expectUnsavedChangesListingDoesNotExist(unsavedDashboardTitle); + await dashboard.expectUnsavedChangesListingDoesNotExist(unsavedDashboardTitle); }); it('can discard unsaved changes using the discard link', async () => { - await PageObjects.dashboard.clickUnsavedChangesDiscard( + await dashboard.clickUnsavedChangesDiscard( `discard-unsaved-${dashboardTitle.split(' ').join('-')}` ); - await PageObjects.dashboard.expectUnsavedChangesListingDoesNotExist(dashboardTitle); - await PageObjects.dashboard.loadSavedDashboard(dashboardTitle); - await PageObjects.dashboard.switchToEditMode(); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.expectUnsavedChangesListingDoesNotExist(dashboardTitle); + await dashboard.loadSavedDashboard(dashboardTitle); + await dashboard.switchToEditMode(); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(existingDashboardPanelCount - 2); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); }); it('loses unsaved changes to new dashboard upon saving', async () => { - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); await addSomePanels(); // ensure that the unsaved listing exists first - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.clickUnsavedChangesContinueEditing(unsavedDashboardTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.clickUnsavedChangesContinueEditing(unsavedDashboardTitle); + await header.waitUntilLoadingHasFinished(); // Save the dashboard, and check that it now does not exist - await PageObjects.dashboard.saveDashboard(newDashboartTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.expectUnsavedChangesListingDoesNotExist(unsavedDashboardTitle); + await dashboard.saveDashboard(newDashboartTitle); + await header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.expectUnsavedChangesListingDoesNotExist(unsavedDashboardTitle); }); it('does not list unsaved changes when unsaved version of the dashboard is the same', async () => { - await PageObjects.dashboard.loadSavedDashboard(newDashboartTitle); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.loadSavedDashboard(newDashboartTitle); + await dashboard.switchToEditMode(); // add another panel so we can delete it later await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationExpectSuccess('Wildvis', { + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationExpectSuccess('Wildvis', { redirectToOrigin: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // wait for the unsaved changes badge to appear. - await PageObjects.dashboard.expectUnsavedChangesBadge(); + await dashboard.expectUnsavedChangesBadge(); // ensure that the unsaved listing exists - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.expectUnsavedChangesListingExists(newDashboartTitle); - await PageObjects.dashboard.clickUnsavedChangesContinueEditing(newDashboartTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.expectUnsavedChangesListingExists(newDashboartTitle); + await dashboard.clickUnsavedChangesContinueEditing(newDashboartTitle); + await header.waitUntilLoadingHasFinished(); // Remove the panel that was just added await dashboardPanelActions.removePanelByTitle('Wildvis'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // Check that it now does not exist - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.expectUnsavedChangesListingDoesNotExist(newDashboartTitle); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.expectUnsavedChangesListingDoesNotExist(newDashboartTitle); }); }); } diff --git a/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts b/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts index d50e2818881247..a26b8d9f9b9137 100644 --- a/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts +++ b/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); + const { dashboard, header, visualize } = getPageObjects(['dashboard', 'header', 'visualize']); const browser = getService('browser'); const queryBar = getService('queryBar'); const filterBar = getService('filterBar'); @@ -33,12 +33,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); - originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + originalPanelCount = await dashboard.getPanelCount(); }); after(async () => { @@ -60,21 +60,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; it('persists after navigating to the listing page and back', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.waitForRenderComplete(); await validateQueryAndFilter(); }); it('persists after navigating to Visualize and back', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await visualize.gotoVisualizationLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.waitForRenderComplete(); await validateQueryAndFilter(); }); @@ -82,13 +82,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); const alert = await browser.getAlert(); await alert?.accept(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await validateQueryAndFilter(); }); it('can discard changes', async () => { - await PageObjects.dashboard.clickDiscardChanges(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickDiscardChanges(); + await dashboard.waitForRenderComplete(); const query = await queryBar.getQueryString(); expect(query).to.eql(''); @@ -102,9 +102,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // add an area chart by value await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationAndReturn(); // add a metric by reference await dashboardAddPanel.addVisualization('Rendering-Test: metric'); @@ -115,67 +115,67 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('shows the unsaved changes badge after adding panels', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await addPanels(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); }); it('has correct number of panels', async () => { - unsavedPanelCount = await PageObjects.dashboard.getPanelCount(); + unsavedPanelCount = await dashboard.getPanelCount(); expect(unsavedPanelCount).to.eql(originalPanelCount + 2); }); it('retains unsaved panel count after navigating to listing page and back', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.loadSavedDashboard('few panels'); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(unsavedPanelCount); }); it('retains unsaved panel count after navigating to another app and back', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - if (await PageObjects.dashboard.onDashboardLandingPage()) { + await header.waitUntilLoadingHasFinished(); + await visualize.gotoVisualizationLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + if (await dashboard.onDashboardLandingPage()) { await testSubjects.existOrFail('unsavedDashboardsCallout'); } - await PageObjects.dashboard.loadSavedDashboard('few panels'); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.loadSavedDashboard('few panels'); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(unsavedPanelCount); }); it('can discard changes', async () => { - unsavedPanelCount = await PageObjects.dashboard.getPanelCount(); + unsavedPanelCount = await dashboard.getPanelCount(); expect(unsavedPanelCount).to.eql(originalPanelCount + 2); - await PageObjects.dashboard.clickDiscardChanges(); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.clickDiscardChanges(); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(originalPanelCount); }); it('resets to original panel count after switching to view mode and discarding changes', async () => { await addPanels(); - await PageObjects.header.waitUntilLoadingHasFinished(); - unsavedPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + unsavedPanelCount = await dashboard.getPanelCount(); expect(unsavedPanelCount).to.eql(originalPanelCount + 2); - await PageObjects.dashboard.clickCancelOutOfEditMode(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const currentPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.clickCancelOutOfEditMode(); + await header.waitUntilLoadingHasFinished(); + const currentPanelCount = await dashboard.getPanelCount(); expect(currentPanelCount).to.eql(originalPanelCount); - expect(PageObjects.dashboard.getIsInViewMode()).to.eql(true); + expect(dashboard.getIsInViewMode()).to.eql(true); }); it('does not show unsaved changes badge after saving', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await addPanels(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.saveDashboard('Unsaved State Test'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await dashboard.saveDashboard('Unsaved State Test'); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); }); }); diff --git a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts index 624014b02862f4..2f40111ce1ed09 100644 --- a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts +++ b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); + const { dashboard, header, visualize } = getPageObjects(['dashboard', 'header', 'visualize']); const kibanaServer = getService('kibanaServer'); const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -26,10 +26,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.switchToEditMode(); }); after(async () => { @@ -38,64 +38,64 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('redirects via save and return button after edit', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); }); it('redirects via save as button after edit, renaming itself', async () => { const newTitle = 'wowee, looks like I have a new title'; - await PageObjects.header.waitUntilLoadingHasFinished(); - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardPanelActions.clickEdit(); - await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { + await visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: false, redirectToOrigin: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount); - const titles = await PageObjects.dashboard.getPanelTitles(); + const titles = await dashboard.getPanelTitles(); expect(titles.indexOf(newTitle)).to.not.be(-1); }); it('redirects via save as button after edit, adding a new panel', async () => { const newTitle = 'wowee, my title just got cooler'; - await PageObjects.header.waitUntilLoadingHasFinished(); - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardPanelActions.clickEdit(); - await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { + await visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: true, redirectToOrigin: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await header.waitUntilLoadingHasFinished(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount + 1); - const titles = await PageObjects.dashboard.getPanelTitles(); + const titles = await dashboard.getPanelTitles(); expect(titles.indexOf(newTitle)).to.not.be(-1); }); it('loses originatingApp connection after save as when redirectToOrigin is false', async () => { const newTitle = 'wowee, my title just got cooler again'; - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardPanelActions.editPanelByTitle('wowee, my title just got cooler'); - await PageObjects.visualize.linkedToOriginatingApp(); - await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { + await visualize.linkedToOriginatingApp(); + await visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: true, redirectToOrigin: false, }); - await PageObjects.visualize.notLinkedToOriginatingApp(); - await PageObjects.dashboard.navigateToApp(); + await visualize.notLinkedToOriginatingApp(); + await dashboard.navigateToApp(); }); it('loses originatingApp connection after first save when redirectToOrigin is false', async () => { const newTitle = 'test create panel originatingApp'; - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.switchToEditMode(); await dashboardAddPanel.clickMarkdownQuickButton(); - await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { + await visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: true, redirectToOrigin: false, }); - await PageObjects.visualize.notLinkedToOriginatingApp(); + await visualize.notLinkedToOriginatingApp(); }); }); } diff --git a/test/functional/apps/dashboard/group1/edit_visualizations.js b/test/functional/apps/dashboard/group1/edit_visualizations.js index fce7bac23a5c42..decd7441e1d45b 100644 --- a/test/functional/apps/dashboard/group1/edit_visualizations.js +++ b/test/functional/apps/dashboard/group1/edit_visualizations.js @@ -10,7 +10,13 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'common', 'visEditor']); + const { dashboard, header, visualize, common, visEditor } = getPageObjects([ + 'dashboard', + 'header', + 'visualize', + 'common', + 'visEditor', + ]); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); const kibanaServer = getService('kibanaServer'); @@ -22,23 +28,23 @@ export default function ({ getService, getPageObjects }) { const createMarkdownVis = async (title) => { await dashboardAddPanel.clickMarkdownQuickButton(); - await PageObjects.visEditor.setMarkdownTxt(originalMarkdownText); - await PageObjects.visEditor.clickGo(); + await visEditor.setMarkdownTxt(originalMarkdownText); + await visEditor.clickGo(); if (title) { - await PageObjects.visualize.saveVisualizationExpectSuccess(title, { + await visualize.saveVisualizationExpectSuccess(title, { saveAsNew: true, redirectToOrigin: true, }); } else { - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); } }; const editMarkdownVis = async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visEditor.setMarkdownTxt(modifiedMarkdownText); - await PageObjects.visEditor.clickGo(); + await header.waitUntilLoadingHasFinished(); + await visEditor.setMarkdownTxt(modifiedMarkdownText); + await visEditor.clickGo(); }; describe('edit visualizations from dashboard', () => { @@ -50,7 +56,7 @@ export default function ({ getService, getPageObjects }) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async () => { @@ -59,13 +65,13 @@ export default function ({ getService, getPageObjects }) { it('save button returns to dashboard after editing visualization with changes saved', async () => { const title = 'test save'; - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await createMarkdownVis(title); await editMarkdownVis(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(modifiedMarkdownText); @@ -73,13 +79,13 @@ export default function ({ getService, getPageObjects }) { it('cancel button returns to dashboard after editing visualization without saving', async () => { const title = 'test cancel'; - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await createMarkdownVis(title); await editMarkdownVis(); - await PageObjects.visualize.cancelAndReturn(true); + await visualize.cancelAndReturn(true); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(originalMarkdownText); @@ -87,106 +93,106 @@ export default function ({ getService, getPageObjects }) { it('cancel button returns to dashboard with no modal if there are no changes to apply', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.cancelAndReturn(false); + await visualize.cancelAndReturn(false); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(originalMarkdownText); }); it('visualize app menu navigates to the visualize listing page if the last opened visualization was by value', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); // Create markdown by value. await createMarkdownVis(); // Edit then save and return await editMarkdownVis(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await appsMenu.clickLink('Visualize Library'); - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); expect(await testSubjects.exists('visualizationLandingPage')).to.be(true); }); it('visualize app menu navigates to the visualize listing page if the last opened visualization was linked to dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); // Create markdown by reference. await createMarkdownVis('by reference'); // Edit then save and return await editMarkdownVis(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await appsMenu.clickLink('Visualize Library'); - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); expect(await testSubjects.exists('visualizationLandingPage')).to.be(true); }); describe('by value', () => { it('save and return button returns to dashboard after editing visualization with changes saved', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await createMarkdownVis(); - const originalPanelCount = PageObjects.dashboard.getPanelCount(); + const originalPanelCount = dashboard.getPanelCount(); await editMarkdownVis(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(modifiedMarkdownText); - const newPanelCount = PageObjects.dashboard.getPanelCount(); + const newPanelCount = dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount); }); it('cancel button returns to dashboard after editing visualization without saving', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await createMarkdownVis(); await editMarkdownVis(); - await PageObjects.visualize.cancelAndReturn(true); + await visualize.cancelAndReturn(true); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(originalMarkdownText); }); it('save to library button returns to dashboard after editing visualization with changes saved', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await createMarkdownVis(); - const originalPanelCount = PageObjects.dashboard.getPanelCount(); + const originalPanelCount = dashboard.getPanelCount(); await editMarkdownVis(); - await PageObjects.visualize.saveVisualization('test save to library', { + await visualize.saveVisualization('test save to library', { redirectToOrigin: true, }); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(modifiedMarkdownText); - const newPanelCount = PageObjects.dashboard.getPanelCount(); + const newPanelCount = dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount); }); it('should lose its connection to the dashboard when creating new visualization', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.clickNewVisualization(); - await PageObjects.visualize.clickMarkdownWidget(); - await PageObjects.visualize.notLinkedToOriginatingApp(); + await visualize.gotoVisualizationLandingPage(); + await visualize.clickNewVisualization(); + await visualize.clickMarkdownWidget(); + await visualize.notLinkedToOriginatingApp(); // return to origin should not be present in save modal await testSubjects.click('visualizeSaveButton'); diff --git a/test/functional/apps/dashboard/group1/embeddable_data_grid.ts b/test/functional/apps/dashboard/group1/embeddable_data_grid.ts index 0fc763a26abd81..781f9cda2d685d 100644 --- a/test/functional/apps/dashboard/group1/embeddable_data_grid.ts +++ b/test/functional/apps/dashboard/group1/embeddable_data_grid.ts @@ -16,7 +16,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const find = getService('find'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']); + const { common, dashboard, header, timePicker } = getPageObjects([ + 'common', + 'dashboard', + 'header', + 'timePicker', + ]); const retry = getService('retry'); const dataGrid = getService('dataGrid'); @@ -33,13 +38,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', 'doc_table:legacy': false, }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); after(async function () { @@ -59,11 +64,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('are added when a cell filter is clicked', async function () { await find.clickByCssSelector(`[role="gridcell"]:nth-child(4)`); // needs a short delay between becoming visible & being clickable - await PageObjects.common.sleep(250); + await common.sleep(250); await find.clickByCssSelector(`[data-test-subj="filterOutButton"]`); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await find.clickByCssSelector(`[role="gridcell"]:nth-child(4)`); - await PageObjects.common.sleep(250); + await common.sleep(250); await find.clickByCssSelector(`[data-test-subj="filterForButton"]`); const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(2); diff --git a/test/functional/apps/dashboard/group1/embeddable_rendering.ts b/test/functional/apps/dashboard/group1/embeddable_rendering.ts index 746a8c159e68f6..d721bd5eb1945a 100644 --- a/test/functional/apps/dashboard/group1/embeddable_rendering.ts +++ b/test/functional/apps/dashboard/group1/embeddable_rendering.ts @@ -29,13 +29,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardExpect = getService('dashboardExpect'); const dashboardAddPanel = getService('dashboardAddPanel'); const queryBar = getService('queryBar'); - const PageObjects = getPageObjects([ + const { common, dashboard, header, timePicker } = getPageObjects([ 'common', 'dashboard', 'header', - 'visualize', - 'visChart', - 'discover', 'timePicker', ]); let visNames: string[] = []; @@ -114,10 +111,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ from, to }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await common.setTime({ from, to }); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); await elasticChart.setNewChartUiDebugFlag(true); }); @@ -127,7 +124,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const newUrl = currentUrl.replace(/\?.*$/, ''); await browser.get(newUrl, false); await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); await kibanaServer.savedObjects.cleanStandardList(); }); @@ -138,10 +135,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // This one is rendered via svg which lets us do better testing of what is being rendered. visNames.push(await dashboardAddPanel.addVisualization('Filter Bytes Test: vega')); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardExpect.visualizationsArePresent(visNames); expect(visNames.length).to.be.equal(25); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('adding saved searches', async () => { @@ -149,20 +146,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardAddPanel.addEverySavedSearch('"Rendering Test"') ); await dashboardAddPanel.closeAddPanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardExpect.visualizationsArePresent(visAndSearchNames); expect(visAndSearchNames.length).to.be.equal(26); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.dashboard.saveDashboard('embeddable rendering test', { + await dashboard.saveDashboard('embeddable rendering test', { saveAsNew: true, storeTimeWithDashboard: true, }); }); it('initial render test', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await expectAllDataRenders(); }); @@ -170,9 +167,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Change the time to make sure that it's updated when re-opened from the listing page. const fromTime = 'May 10, 2018 @ 00:00:00.000'; const toTime = 'May 11, 2018 @ 00:00:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.dashboard.loadSavedDashboard('embeddable rendering test'); - await PageObjects.dashboard.waitForRenderComplete(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await dashboard.loadSavedDashboard('embeddable rendering test'); + await dashboard.waitForRenderComplete(); await expectAllDataRenders(); }); @@ -184,28 +181,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // setNewChartUiDebugFlag required because window._echDebugStateFlag flag is reset after refresh await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // call query refresh to guarantee all panels are rendered after window._echDebugStateFlag is set await queryBar.clickQuerySubmitButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await expectAllDataRenders(); }); it('panels are updated when time changes outside of data', async () => { const fromTime = 'May 11, 2018 @ 00:00:00.000'; const toTime = 'May 12, 2018 @ 00:00:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.dashboard.waitForRenderComplete(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await dashboard.waitForRenderComplete(); await expectNoDataRenders(); }); it('panels are updated when time changes inside of data', async () => { const fromTime = 'Jan 1, 2018 @ 00:00:00.000'; const toTime = 'Apr 13, 2018 @ 00:00:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.dashboard.waitForRenderComplete(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await dashboard.waitForRenderComplete(); await expectAllDataRenders(); }); }); diff --git a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts index 30c9d39b9b5bcc..591647bedc65df 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts @@ -23,12 +23,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const queryBar = getService('queryBar'); const security = getService('security'); - const PageObjects = getPageObjects([ - 'common', + const { dashboard, discover, header, timePicker } = getPageObjects([ 'dashboard', 'discover', 'header', - 'visualize', 'timePicker', ]); @@ -48,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async () => { @@ -58,11 +56,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Add a filter bar', function () { before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('should show on an empty dashboard', async function () { - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); const hasAddFilter = await testSubjects.exists('addFilter'); expect(hasAddFilter).to.be(true); }); @@ -78,8 +76,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { this.tags(['skipFirefox']); before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); it('uses default index pattern on an empty dashboard', async () => { @@ -90,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows index pattern of vis when one is added', async () => { await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await filterBar.ensureFieldEditorModalIsClosed(); await testSubjects.click('addFilter'); await dashboardExpect.fieldSuggestions(['animal']); @@ -99,7 +97,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('works when a vis with no index pattern is added', async () => { await dashboardAddPanel.addVisualization('Rendering-Test:-markdown'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await filterBar.ensureFieldEditorModalIsClosed(); await testSubjects.click('addFilter'); await dashboardExpect.fieldSuggestions(['animal']); @@ -109,9 +107,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('filter pills', function () { before(async () => { await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); await elasticChart.setNewChartUiDebugFlag(true); }); @@ -122,7 +120,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('are added when a pie chart slice is clicked', async function () { await dashboardAddPanel.addVisualization('Rendering Test: pie'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.filterOnPieSlice('4886'); const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(1); @@ -131,8 +129,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('are preserved after saving a dashboard', async () => { - await PageObjects.dashboard.saveDashboard('with filters'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.saveDashboard('with filters'); + await header.waitUntilLoadingHasFinished(); await elasticChart.setNewChartUiDebugFlag(true); const filterCount = await filterBar.getFilterCount(); @@ -142,9 +140,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('are preserved after opening a dashboard saved with filters', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('with filters'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('with filters'); + await header.waitUntilLoadingHasFinished(); await elasticChart.setNewChartUiDebugFlag(true); await queryBar.submitQuery(); @@ -155,10 +153,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it("restoring filters doesn't break back button", async () => { await browser.goBack(); - await PageObjects.dashboard.expectExistsDashboardLandingPage(); + await dashboard.expectExistsDashboardLandingPage(); await browser.goForward(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await elasticChart.setNewChartUiDebugFlag(true); await queryBar.submitQuery(); await pieChart.expectPieSliceCount(1); @@ -167,26 +165,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it("saving with pinned filter doesn't unpin them", async () => { const filterKey = 'bytes'; await filterBar.toggleFilterPinned(filterKey); - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.saveDashboard('saved with pinned filters'); + await dashboard.switchToEditMode(); + await dashboard.saveDashboard('saved with pinned filters'); expect(await filterBar.isFilterPinned(filterKey)).to.be(true); await pieChart.expectPieSliceCount(1); }); it("navigating to a dashboard with global filter doesn't unpin it if same filter is saved with dashboard", async () => { - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('with filters'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.preserveCrossAppState(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('with filters'); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.isFilterPinned('bytes')).to.be(true); await pieChart.expectPieSliceCount(1); }); it("pinned filters aren't saved", async () => { await filterBar.removeFilter('bytes'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('saved with pinned filters'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('saved with pinned filters'); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.getFilterCount()).to.be(0); await pieChart.expectPieSliceCount(5); }); @@ -195,15 +193,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('saved search filtering', function () { before(async () => { await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); }); it('are added when a cell magnifying glass is clicked', async function () { await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); - await PageObjects.dashboard.waitForRenderComplete(); - const isLegacyDefault = await PageObjects.discover.useLegacyTable(); + await dashboard.waitForRenderComplete(); + const isLegacyDefault = await discover.useLegacyTable(); if (isLegacyDefault) { await testSubjects.click('docTableCellFilter'); } else { @@ -217,8 +215,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('bad filters are loaded properly', function () { before(async () => { await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with bad filters'); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('dashboard with bad filters'); }); it('filter with non-existent index pattern renders if it matches a field', async function () { diff --git a/test/functional/apps/dashboard/group2/dashboard_filtering.ts b/test/functional/apps/dashboard/group2/dashboard_filtering.ts index 9b960369aaefe9..05b831849cf448 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filtering.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filtering.ts @@ -27,13 +27,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const security = getService('security'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'visualize', 'timePicker']); + const { dashboard, header, visualize, timePicker } = getPageObjects([ + 'dashboard', + 'header', + 'visualize', + 'timePicker', + ]); // Failing: See https://github.com/elastic/kibana/issues/160062 describe.skip('dashboard filtering', function () { const populateDashboard = async () => { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); await dashboardAddPanel.addEveryVisualization('"Filter Bytes Test"'); await dashboardAddPanel.addEverySavedSearch('"Filter Bytes Test"'); @@ -41,15 +46,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const addFilterAndRefresh = async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await filterBar.addFilter({ field: 'bytes', operation: 'is', value: '12345678' }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // first round of requests sometimes times out, refresh all visualizations to fetch again await queryBar.clickQuerySubmitButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await elasticChart.setNewChartUiDebugFlag(true); }; @@ -68,9 +73,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.gotoDashboardLandingPage(); }); after(async () => { @@ -85,7 +90,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('filters on pie charts', async () => { @@ -144,13 +149,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addFilterAndRefresh(); await filterBar.toggleFilterPinned('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }); after(async () => { await filterBar.toggleFilterPinned('bytes'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('filters on pie charts', async () => { @@ -205,8 +210,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addFilterAndRefresh(); await filterBar.toggleFilterEnabled('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }); it('pie charts', async () => { @@ -256,67 +261,63 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('nested filtering', () => { before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await elasticChart.setNewChartUiDebugFlag(true); }); it('visualization saved with a query filters data', async () => { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); await dashboardPanelActions.clickEdit(); await queryBar.setQuery('weightLbs:>50'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - // We are on the visualize page, not dashboard, so can't use "PageObjects.dashboard.waitForRenderComplete();" + // We are on the visualize page, not dashboard, so can't use "dashboard.waitForRenderComplete();" // as that expects an item with the `data-shared-items-count` tag. await renderable.waitForRender(); await pieChart.expectPieSliceCount(3); - await PageObjects.visualize.saveVisualizationExpectSuccess( - 'Rendering Test: animal sounds pie' - ); - await PageObjects.header.clickDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await visualize.saveVisualizationExpectSuccess('Rendering Test: animal sounds pie'); + await header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(3); }); it('Nested visualization filter pills filters data as expected', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); await pieChart.filterOnPieSlice('grr'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await pieChart.expectPieSliceCount(1); - await PageObjects.visualize.saveVisualizationExpectSuccess('animal sounds pie'); - await PageObjects.header.clickDashboard(); + await visualize.saveVisualizationExpectSuccess('animal sounds pie'); + await header.clickDashboard(); await pieChart.expectPieSliceCount(1); }); it('Removing filter pills and query unfiters data as expected', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); await queryBar.setQuery(''); await queryBar.submitQuery(); await filterBar.removeFilter('sound.keyword'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await pieChart.expectPieSliceCount(5); - await PageObjects.visualize.saveVisualizationExpectSuccess( - 'Rendering Test: animal sounds pie' - ); - await PageObjects.header.clickDashboard(); + await visualize.saveVisualizationExpectSuccess('Rendering Test: animal sounds pie'); + await header.clickDashboard(); await pieChart.expectPieSliceCount(5); }); @@ -333,7 +334,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await elasticChart.setNewChartUiDebugFlag(true); await queryBar.setQuery('weightLbs<40'); await queryBar.submitQuery(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); }); diff --git a/test/functional/apps/dashboard/group2/full_screen_mode.ts b/test/functional/apps/dashboard/group2/full_screen_mode.ts index 3b91f43c9883af..ef9a615f195b72 100644 --- a/test/functional/apps/dashboard/group2/full_screen_mode.ts +++ b/test/functional/apps/dashboard/group2/full_screen_mode.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects(['dashboard', 'common']); + const { dashboard, common } = getPageObjects(['dashboard', 'common']); const filterBar = getService('filterBar'); describe('full screen mode', () => { @@ -28,9 +28,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); }); after(async () => { @@ -38,80 +38,80 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('option not available in edit mode', async () => { - await PageObjects.dashboard.switchToEditMode(); - const exists = await PageObjects.dashboard.fullScreenModeMenuItemExists(); + await dashboard.switchToEditMode(); + const exists = await dashboard.fullScreenModeMenuItemExists(); expect(exists).to.be(false); }); it('available in view mode', async () => { - await PageObjects.dashboard.saveDashboard('full screen test', { + await dashboard.saveDashboard('full screen test', { saveAsNew: true, exitFromEditMode: true, }); - const exists = await PageObjects.dashboard.fullScreenModeMenuItemExists(); + const exists = await dashboard.fullScreenModeMenuItemExists(); expect(exists).to.be(true); }); it('hides the chrome', async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.clickFullScreenMode(); await retry.try(async () => { - const isChromeHidden = await PageObjects.common.isChromeHidden(); + const isChromeHidden = await common.isChromeHidden(); expect(isChromeHidden).to.be(true); }); }); it('displays exit full screen logo button', async () => { - const exists = await PageObjects.dashboard.exitFullScreenLogoButtonExists(); + const exists = await dashboard.exitFullScreenLogoButtonExists(); expect(exists).to.be(true); }); it('displays exit full screen logo button when panel is expanded', async () => { await dashboardPanelActions.clickExpandPanelToggle(); - const exists = await PageObjects.dashboard.exitFullScreenTextButtonExists(); + const exists = await dashboard.exitFullScreenTextButtonExists(); expect(exists).to.be(true); }); it('exits when the text button is clicked on', async () => { - await PageObjects.dashboard.exitFullScreenMode(); + await dashboard.exitFullScreenMode(); await retry.try(async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); }); }); it('shows filter bar in fullscreen mode', async () => { await filterBar.addFilter({ field: 'bytes', operation: 'is', value: '12345678' }); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.waitForRenderComplete(); + await dashboard.clickFullScreenMode(); await retry.try(async () => { - const isChromeHidden = await PageObjects.common.isChromeHidden(); + const isChromeHidden = await common.isChromeHidden(); expect(isChromeHidden).to.be(true); }); expect(await filterBar.getFilterCount()).to.be(1); - await PageObjects.dashboard.clickExitFullScreenLogoButton(); + await dashboard.clickExitFullScreenLogoButton(); await retry.try(async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); }); await filterBar.removeFilter('bytes'); }); it('exits full screen mode when back button pressed', async () => { - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.clickFullScreenMode(); await browser.goBack(); await retry.try(async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); }); await browser.goForward(); await retry.try(async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); }); }); diff --git a/test/functional/apps/dashboard/group2/multiple_data_views.ts b/test/functional/apps/dashboard/group2/multiple_data_views.ts index 7debd46f9c4b09..21778771917a21 100644 --- a/test/functional/apps/dashboard/group2/multiple_data_views.ts +++ b/test/functional/apps/dashboard/group2/multiple_data_views.ts @@ -19,28 +19,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker', 'home']); + const { common, dashboard, timePicker, home } = getPageObjects([ + 'common', + 'dashboard', + 'timePicker', + 'home', + ]); describe('dashboard multiple data views', () => { before(async () => { await kibanaServer.uiSettings.update({ 'courier:ignoreFilterIfFieldNotInIndex': true }); - await PageObjects.common.navigateToApp('home'); - await PageObjects.home.goToSampleDataPage(); - await PageObjects.home.addSampleDataSet('flights'); - await PageObjects.home.addSampleDataSet('logs'); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('home'); + await home.goToSampleDataPage(); + await home.addSampleDataSet('flights'); + await home.addSampleDataSet('logs'); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearches(['[Flights] Flight Log', '[Logs] Visits']); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await dashboard.waitForRenderComplete(); + await timePicker.setCommonlyUsedTime('This_week'); }); after(async () => { - await PageObjects.common.navigateToApp('home'); - await PageObjects.home.goToSampleDataPage(); - await PageObjects.home.removeSampleDataSet('flights'); - await PageObjects.home.removeSampleDataSet('logs'); + await common.navigateToApp('home'); + await home.goToSampleDataPage(); + await home.removeSampleDataSet('flights'); + await home.removeSampleDataSet('logs'); await kibanaServer.uiSettings.unset('courier:ignoreFilterIfFieldNotInIndex'); }); @@ -56,9 +61,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('applies filters on panels using a data view without the filter field', async () => { await kibanaServer.uiSettings.update({ 'courier:ignoreFilterIfFieldNotInIndex': false }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await testSubjects.click('edit-unsaved-New-Dashboard'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const logsSavedSearchPanel = (await testSubjects.findAll('embeddedSavedSearchDocTable'))[1]; expect( await ( diff --git a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts index 63b1ab776051c3..54dbdd03ba9735 100644 --- a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts +++ b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'common']); + const { dashboard } = getPageObjects(['dashboard']); describe('expanding a panel', () => { before(async () => { @@ -26,9 +26,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); }); after(async () => { @@ -38,13 +38,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('hides other panels', async () => { await dashboardPanelActions.clickExpandPanelToggle(); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); }); }); it('shows other panels after being minimized', async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); // Panels are all minimized on a fresh open of a dashboard, so we need to re-expand in order to then minimize. await dashboardPanelActions.clickExpandPanelToggle(); await dashboardPanelActions.clickExpandPanelToggle(); @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Add a retry to fix https://github.com/elastic/kibana/issues/14574. Perhaps the recent changes to this // being a CSS update is causing the UI to change slower than grabbing the panels? await retry.try(async () => { - const panelCountAfterMaxThenMinimize = await PageObjects.dashboard.getPanelCount(); + const panelCountAfterMaxThenMinimize = await dashboard.getPanelCount(); expect(panelCountAfterMaxThenMinimize).to.be(panelCount); }); }); diff --git a/test/functional/apps/dashboard/group3/bwc_shared_urls.ts b/test/functional/apps/dashboard/group3/bwc_shared_urls.ts index c3b6b3bbfc07e4..3b6e25715987e3 100644 --- a/test/functional/apps/dashboard/group3/bwc_shared_urls.ts +++ b/test/functional/apps/dashboard/group3/bwc_shared_urls.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header']); + const { dashboard, header } = getPageObjects(['dashboard', 'header']); const toasts = getService('toasts'); const browser = getService('browser'); const log = getService('log'); @@ -43,8 +43,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('bwc shared urls', function describeIndexTests() { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); const currentUrl = await browser.getCurrentUrl(); kibanaLegacyBaseUrl = @@ -74,7 +74,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const url = `${kibanaLegacyBaseUrl}#/dashboard?${url56}`; log.debug(`Navigating to ${url}`); await browser.get(url, true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); expect(query).to.equal('memory:>220000'); @@ -82,7 +82,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const warningToast = await toasts.getElementByIndex(1); expect(await warningToast.getVisibleText()).to.contain('Cannot load panels'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); }); @@ -93,74 +93,74 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const url = `${kibanaLegacyBaseUrl}#/dashboard?${urlQuery}`; log.debug(`Navigating to ${url}`); await browser.get(url, true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); expect(query).to.equal('memory:>220000'); const warningToast = await toasts.getElementByIndex(1); expect(await warningToast.getVisibleText()).to.contain('Cannot load panels'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('loads a saved dashboard', async function () { - await PageObjects.dashboard.saveDashboard('saved with colors', { + await dashboard.saveDashboard('saved with colors', { saveAsNew: true, storeTimeWithDashboard: true, }); - savedDashboardId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + savedDashboardId = await dashboard.getDashboardIdFromCurrentUrl(); const url = `${kibanaLegacyBaseUrl}#/dashboard/${savedDashboardId}`; log.debug(`Navigating to ${url}`); await browser.get(url, true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); expect(query).to.equal('memory:>220000'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('loads a saved dashboard with query via dashboard_no_match', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const currentUrl = await browser.getCurrentUrl(); const dashboardBaseUrl = currentUrl.substring(0, currentUrl.indexOf('/app/dashboards')); const url = `${dashboardBaseUrl}/app/dashboards#/dashboard/${savedDashboardId}?_a=(query:(language:kuery,query:'boop'))`; log.debug(`Navigating to ${url}`); await browser.get(url); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const query = await queryBar.getQueryString(); expect(query).to.equal('boop'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }); it('uiState in url takes precedence over saved dashboard state', async function () { - const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const id = await dashboard.getDashboardIdFromCurrentUrl(); const updatedQuery = urlQuery.replace(/F9D9F9/g, '000000'); const url = `${kibanaLegacyBaseUrl}#/dashboard/${id}?${updatedQuery}`; log.debug(`Navigating to ${url}`); await browser.get(url, true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); it('back button works for old dashboards after state migrations', async () => { - await PageObjects.dashboard.preserveCrossAppState(); - const oldId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.preserveCrossAppState(); + const oldId = await dashboard.getDashboardIdFromCurrentUrl(); + await dashboard.waitForRenderComplete(); const url = `${kibanaLegacyBaseUrl}#/dashboard?${urlQuery}`; log.debug(`Navigating to ${url}`); await browser.get(url); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const newId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + await header.waitUntilLoadingHasFinished(); + const newId = await dashboard.getDashboardIdFromCurrentUrl(); expect(newId).to.be.equal(oldId); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await queryBar.submitQuery(); }); }); diff --git a/test/functional/apps/dashboard/group3/copy_panel_to.ts b/test/functional/apps/dashboard/group3/copy_panel_to.ts index 5398606439319c..f39166c5696e27 100644 --- a/test/functional/apps/dashboard/group3/copy_panel_to.ts +++ b/test/functional/apps/dashboard/group3/copy_panel_to.ts @@ -16,14 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ - 'header', - 'common', - 'discover', - 'dashboard', - 'visualize', - 'timePicker', - ]); + const { dashboard, timePicker } = getPageObjects(['dashboard', 'timePicker']); const fewPanelsTitle = 'few panels'; const markdownTitle = 'Copy To Markdown'; @@ -46,15 +39,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard(fewPanelsTitle); - await PageObjects.dashboard.waitForRenderComplete(); - fewPanelsPanelCount = await PageObjects.dashboard.getPanelCount(); - - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setHistoricalDataRange(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard(fewPanelsTitle); + await dashboard.waitForRenderComplete(); + fewPanelsPanelCount = await dashboard.getPanelCount(); + + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setHistoricalDataRange(); await dashboardVisualizations.createAndAddMarkdown({ name: markdownTitle, markdown: 'Please add me to some other dashboard', @@ -62,7 +55,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await kibanaServer.savedObjects.cleanStandardList(); }); @@ -91,16 +84,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click(`dashboard-picker-option-few-panels`); await testSubjects.click('confirmCopyToButton'); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.expectOnDashboard(`Editing ${fewPanelsTitle}`); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard(`Editing ${fewPanelsTitle}`); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.be(fewPanelsPanelCount + 1); // Save & ensure that view mode is applied properly. - await PageObjects.dashboard.clickQuickSave(); + await dashboard.clickQuickSave(); await testSubjects.existOrFail('saveDashboardSuccess'); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); await dashboardPanelActions.expectMissingEditPanelAction(markdownTitle); }); @@ -126,12 +119,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await label.click(); await testSubjects.click('confirmCopyToButton'); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.expectOnDashboard(`Editing New Dashboard`); + await dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard(`Editing New Dashboard`); }); it('it always appends new panels instead of overwriting', async () => { - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.be(2); }); }); diff --git a/test/functional/apps/dashboard/group3/dashboard_state.ts b/test/functional/apps/dashboard/group3/dashboard_state.ts index 8ed77216472740..40022c155f4569 100644 --- a/test/functional/apps/dashboard/group3/dashboard_state.ts +++ b/test/functional/apps/dashboard/group3/dashboard_state.ts @@ -16,17 +16,16 @@ import { PIE_CHART_VIS_NAME, AREA_CHART_VIS_NAME } from '../../../page_objects/d import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'visualize', - 'header', - 'discover', - 'visChart', - 'share', - 'timePicker', - 'unifiedFieldList', - ]); + const { dashboard, header, discover, visChart, share, timePicker, unifiedFieldList } = + getPageObjects([ + 'dashboard', + 'header', + 'discover', + 'visChart', + 'share', + 'timePicker', + 'unifiedFieldList', + ]); const testSubjects = getService('testSubjects'); const browser = getService('browser'); const queryBar = getService('queryBar'); @@ -67,7 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const enableNewChartLibraryDebug = async (force = false) => { - if ((await PageObjects.visChart.isNewChartsLibraryEnabled()) || force) { + if ((await visChart.isNewChartsLibraryEnabled()) || force) { await elasticChart.setNewChartUiDebugFlag(); await queryBar.submitQuery(); } @@ -75,42 +74,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('dashboard state', function () { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); await browser.refresh(); }); after(async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('Overriding colors on an area chart is preserved', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setHistoricalDataRange(); + await dashboard.clickNewDashboard(); + await timePicker.setHistoricalDataRange(); const visName = AREA_CHART_VIS_NAME; await dashboardAddPanel.addVisualization(visName); const dashboardName = 'Overridden colors - new charts library'; - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.saveDashboard(dashboardName); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await queryBar.clickQuerySubmitButton(); - await PageObjects.visChart.openLegendOptionColorsForXY('Count', `[data-title="${visName}"]`); + await visChart.openLegendOptionColorsForXY('Count', `[data-title="${visName}"]`); const overwriteColor = '#d36086'; - await PageObjects.visChart.selectNewLegendColorChoice(overwriteColor); + await visChart.selectNewLegendColorChoice(overwriteColor); - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard(dashboardName); await enableNewChartLibraryDebug(true); - const colorChoiceRetained = await PageObjects.visChart.doesSelectedLegendColorExistForXY( + const colorChoiceRetained = await visChart.doesSelectedLegendColorExistForXY( overwriteColor, xyChartSelector ); @@ -119,60 +118,60 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Saved search with no changes will update when the saved object changes', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); - await PageObjects.header.clickDiscover(); - await PageObjects.timePicker.setHistoricalDataRange(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.discover.saveSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDiscover(); + await timePicker.setHistoricalDataRange(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await discover.saveSearch('my search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.header.clickDashboard(); - await PageObjects.dashboard.clickNewDashboard(); + await header.clickDashboard(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch('my search'); - await PageObjects.dashboard.saveDashboard('No local edits'); + await dashboard.saveDashboard('No local edits'); const inViewMode = await testSubjects.exists('dashboardEditMode'); expect(inViewMode).to.be(true); - await PageObjects.header.clickDiscover(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('agent'); - await PageObjects.discover.saveSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDiscover(); + await unifiedFieldList.clickFieldListItemAdd('agent'); + await discover.saveSearch('my search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.header.clickDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); - const headers = await PageObjects.discover.getColumnHeaders(); + const headers = await discover.getColumnHeaders(); expect(headers.length).to.be(3); expect(headers[1]).to.be('bytes'); expect(headers[2]).to.be('agent'); }); it('Saved search with column changes will not update when the saved object changes', async () => { - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.discover.removeHeaderColumn('bytes'); - await PageObjects.dashboard.saveDashboard('Has local edits'); + await dashboard.switchToEditMode(); + await discover.removeHeaderColumn('bytes'); + await dashboard.saveDashboard('Has local edits'); - await PageObjects.header.clickDiscover(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('clientip'); - await PageObjects.discover.saveSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDiscover(); + await unifiedFieldList.clickFieldListItemAdd('clientip'); + await discover.saveSearch('my search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.header.clickDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); - const headers = await PageObjects.discover.getColumnHeaders(); + const headers = await discover.getColumnHeaders(); expect(headers.length).to.be(2); expect(headers[1]).to.be('agent'); }); const getUrlFromShare = async () => { log.debug(`getUrlFromShare`); - await PageObjects.share.clickShareTopNavButton(); - const sharedUrl = await PageObjects.share.getSharedUrl(); - await PageObjects.share.closeShareModal(); + await share.clickShareTopNavButton(); + const sharedUrl = await share.getSharedUrl(); + await share.closeShareModal(); log.debug(`sharedUrl: ${sharedUrl}`); return sharedUrl; }; @@ -183,16 +182,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const alert = await browser.getAlert(); await alert?.accept(); await enableNewChartLibraryDebug(true); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); }; // Skip this test; directly modifying the URL app state isn't fully supported in the new // React embeddable framework, but this user interaction is not a high priority describe.skip('Directly modifying url updates dashboard state', () => { before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setHistoricalDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setHistoricalDataRange(); }); const changeQuery = async (useHardRefresh: boolean, newQuery: string) => { @@ -211,7 +210,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await browser.get(newUrl.toString(), !useHardRefresh); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const queryBarContentsAfterRefresh = await queryBar.getQueryString(); expect(queryBarContentsAfterRefresh).to.equal(newQuery); }; @@ -220,13 +219,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await changeQuery(true, 'hi:hello'); await queryBar.clearQuery(); await queryBar.clickQuerySubmitButton(); - await PageObjects.dashboard.expectAppStateRemovedFromURL(); + await dashboard.expectAppStateRemovedFromURL(); }); it('for panel size parameters', async function () { await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); const currentUrl = await getUrlFromShare(); - const currentPanelDimensions = await PageObjects.dashboard.getPanelDimensions(); + const currentPanelDimensions = await dashboard.getPanelDimensions(); const newUrl = updateAppStateQueryParam( currentUrl, (appState: Partial) => { @@ -250,12 +249,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await hardRefresh(newUrl); await retry.try(async () => { - const newPanelDimensions = await PageObjects.dashboard.getPanelDimensions(); + const newPanelDimensions = await dashboard.getPanelDimensions(); if (newPanelDimensions.length < 0) { throw new Error('No panel dimensions...'); } - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); // Add a "margin" of error - because of page margins, it won't be a straight doubling of width. const marginOfError = 10; expect(newPanelDimensions[0].width).to.be.lessThan( @@ -268,7 +267,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('when removing a panel', async function () { - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const currentUrl = (await getUrlFromShare()) ?? ''; const newUrl = updateAppStateQueryParam( currentUrl, @@ -281,7 +280,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await hardRefresh(newUrl); await retry.try(async () => { - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.be(0); }); }); @@ -297,11 +296,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('updates a pie slice color on a hard refresh', async function () { - await PageObjects.visChart.openLegendOptionColorsForPie( + await visChart.openLegendOptionColorsForPie( '80,000', `[data-title="${PIE_CHART_VIS_NAME}"]` ); - await PageObjects.visChart.selectNewLegendColorChoice('#F9D9F9'); + await visChart.selectNewLegendColorChoice('#F9D9F9'); const currentUrl = await getUrlFromShare(); const newUrl = updateAppStateQueryParam( currentUrl, @@ -326,7 +325,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } ); await hardRefresh(newUrl); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { const allPieSlicesColor = await pieChart.getAllPieSliceColor('80,000'); @@ -340,9 +339,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('and updates the pie slice legend color', async function () { await retry.try(async () => { - const colorExists = await PageObjects.visChart.doesSelectedLegendColorExistForPie( - '#FFFFFF' - ); + const colorExists = await visChart.doesSelectedLegendColorExistForPie('#FFFFFF'); expect(colorExists).to.be(true); }); }); @@ -370,7 +367,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await hardRefresh(newUrl); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { const pieSliceStyle = await pieChart.getPieSliceStyle('80,000'); @@ -382,9 +379,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('resets the legend color as well', async function () { await retry.try(async () => { - const colorExists = await PageObjects.visChart.doesSelectedLegendColorExistForPie( - '#57c17b' - ); + const colorExists = await visChart.doesSelectedLegendColorExistForPie('#57c17b'); expect(colorExists).to.be(true); }); }); diff --git a/test/functional/apps/dashboard/group3/dashboard_time_picker.ts b/test/functional/apps/dashboard/group3/dashboard_time_picker.ts index 6cc7147aa5fc02..2e5d4217909f0b 100644 --- a/test/functional/apps/dashboard/group3/dashboard_time_picker.ts +++ b/test/functional/apps/dashboard/group3/dashboard_time_picker.ts @@ -17,10 +17,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const pieChart = getService('pieChart'); const elasticChart = getService('elasticChart'); const dashboardVisualizations = getService('dashboardVisualizations'); - const PageObjects = getPageObjects([ + const { dashboard, header, timePicker, discover } = getPageObjects([ 'dashboard', 'header', - 'visualize', 'timePicker', 'discover', ]); @@ -31,8 +30,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('dashboard time picker', function describeIndexTests() { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); await elasticChart.setNewChartUiDebugFlag(true); }); @@ -44,28 +43,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Visualization updated when time picker changes', async () => { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations([PIE_CHART_VIS_NAME]); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations([PIE_CHART_VIS_NAME]); await pieChart.expectEmptyPieChart(); - await PageObjects.timePicker.setHistoricalDataRange(); + await timePicker.setHistoricalDataRange(); await pieChart.expectPieSliceCount(10); }); it('Saved search updated when time picker changes', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardVisualizations.createAndAddSavedSearch({ name: 'saved search', fields: ['bytes', 'agent'], }); - const isLegacyDefault = await PageObjects.discover.useLegacyTable(); + const isLegacyDefault = await discover.useLegacyTable(); if (isLegacyDefault) { await dashboardExpect.docTableFieldCount(150); // Set to time range with no data - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2000 @ 00:00:00.000', 'Jan 1, 2000 @ 01:00:00.000' ); @@ -75,7 +74,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(docCount).to.above(10); // Set to time range with no data - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2000 @ 00:00:00.000', 'Jan 1, 2000 @ 01:00:00.000' ); @@ -85,9 +84,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Timepicker start, end, interval values are set by url', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); log.debug('Went to landing page'); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); log.debug('Clicked new dashboard'); await dashboardVisualizations.createAndAddSavedSearch({ name: 'saved search', @@ -106,9 +105,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.get(`${kibanaBaseUrl}#${urlQuery}`, true); const alert = await browser.getAlert(); await alert?.accept(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const time = await PageObjects.timePicker.getTimeConfig(); - const refresh = await PageObjects.timePicker.getRefreshConfig(); + await header.waitUntilLoadingHasFinished(); + const time = await timePicker.getTimeConfig(); + const refresh = await timePicker.getRefreshConfig(); expect(time.start).to.be('Nov 17, 2012 @ 00:00:00.000'); expect(time.end).to.be('Nov 17, 2015 @ 18:01:36.621'); expect(refresh.interval).to.be('2'); @@ -122,15 +121,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations([PIE_CHART_VIS_NAME]); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations([PIE_CHART_VIS_NAME]); // Same date range as `timePicker.setHistoricalDataRange()` - await PageObjects.timePicker.setAbsoluteRange( - '2015-09-19 06:31:44.000', - '2015-09-23 18:31:44.000' - ); - await PageObjects.dashboard.waitForRenderComplete(); + await timePicker.setAbsoluteRange('2015-09-19 06:31:44.000', '2015-09-23 18:31:44.000'); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(10); }); }); diff --git a/test/functional/apps/dashboard/group3/panel_cloning.ts b/test/functional/apps/dashboard/group3/panel_cloning.ts index 9dfc9949b8b3b0..4233ad2e28ba57 100644 --- a/test/functional/apps/dashboard/group3/panel_cloning.ts +++ b/test/functional/apps/dashboard/group3/panel_cloning.ts @@ -14,78 +14,59 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); - const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ - 'dashboard', - 'header', - 'visualize', - 'discover', - 'timePicker', - ]); + const { dashboard, header, timePicker } = getPageObjects(['dashboard', 'header', 'timePicker']); describe('dashboard panel cloning', function viewEditModeTests() { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setHistoricalDataRange(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); + await timePicker.setHistoricalDataRange(); await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); }); after(async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('clones a panel', async () => { - const initialPanelTitles = await PageObjects.dashboard.getPanelTitles(); - await dashboardPanelActions.clonePanelByTitle(PIE_CHART_VIS_NAME); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); - const postPanelTitles = await PageObjects.dashboard.getPanelTitles(); + const initialPanelTitles = await dashboard.getPanelTitles(); + await dashboardPanelActions.clonePanel(PIE_CHART_VIS_NAME); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + const postPanelTitles = await dashboard.getPanelTitles(); expect(postPanelTitles.length).to.equal(initialPanelTitles.length + 1); }); it('appends a clone title tag', async () => { - const panelTitles = await PageObjects.dashboard.getPanelTitles(); - expect(panelTitles[1]).to.equal(PIE_CHART_VIS_NAME + ' (copy)'); + const panelTitles = await dashboard.getPanelTitles(); + expect(panelTitles[1]).to.equal(`${PIE_CHART_VIS_NAME} (copy)`); }); it('retains original panel dimensions', async () => { - const panelDimensions = await PageObjects.dashboard.getPanelDimensions(); + const panelDimensions = await dashboard.getPanelDimensions(); expect(panelDimensions[0]).to.eql(panelDimensions[1]); }); it('clone of a by reference embeddable is by value', async () => { - const panelName = PIE_CHART_VIS_NAME.replace(/\s+/g, ''); - const clonedPanel = await testSubjects.find(`embeddablePanelHeading-${panelName}(copy)`); - const descendants = await testSubjects.findAllDescendant( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - clonedPanel - ); - expect(descendants.length).to.equal(0); + await dashboardPanelActions.expectNotLinkedToLibrary(`${PIE_CHART_VIS_NAME} (copy)`); }); it('gives a correct title to the clone of a clone', async () => { - const initialPanelTitles = await PageObjects.dashboard.getPanelTitles(); + const initialPanelTitles = await dashboard.getPanelTitles(); const clonedPanelName = initialPanelTitles[initialPanelTitles.length - 1]; - await dashboardPanelActions.clonePanelByTitle(clonedPanelName); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); - const postPanelTitles = await PageObjects.dashboard.getPanelTitles(); + await dashboardPanelActions.clonePanel(clonedPanelName); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + const postPanelTitles = await dashboard.getPanelTitles(); expect(postPanelTitles.length).to.equal(initialPanelTitles.length + 1); expect(postPanelTitles[postPanelTitles.length - 1]).to.equal( - PIE_CHART_VIS_NAME + ' (copy 1)' + `${PIE_CHART_VIS_NAME} (copy 1)` ); }); it('clone of a by value embeddable is by value', async () => { - const panelName = PIE_CHART_VIS_NAME.replace(/\s+/g, ''); - const clonedPanel = await testSubjects.find(`embeddablePanelHeading-${panelName}(copy1)`); - const descendants = await testSubjects.findAllDescendant( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - clonedPanel - ); - expect(descendants.length).to.equal(0); + await dashboardPanelActions.expectNotLinkedToLibrary(`${PIE_CHART_VIS_NAME} (copy)`); }); }); } diff --git a/test/functional/apps/dashboard/group3/panel_context_menu.ts b/test/functional/apps/dashboard/group3/panel_context_menu.ts index 499e046f99a67e..0bf31cf58616c2 100644 --- a/test/functional/apps/dashboard/group3/panel_context_menu.ts +++ b/test/functional/apps/dashboard/group3/panel_context_menu.ts @@ -17,10 +17,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardVisualizations = getService('dashboardVisualizations'); - const PageObjects = getPageObjects([ + const { dashboard, header, discover, timePicker } = getPageObjects([ 'dashboard', 'header', - 'visualize', 'discover', 'timePicker', ]); @@ -28,26 +27,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('dashboard panel context menu', function viewEditModeTests() { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setHistoricalDataRange(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); + await timePicker.setHistoricalDataRange(); await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); }); after(async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('are hidden in view mode', async function () { - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.saveDashboard(dashboardName); await dashboardPanelActions.expectMissingEditPanelAction(); await dashboardPanelActions.expectMissingRemovePanelAction(); }); it('are shown in edit mode', async function () { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); const isContextMenuIconVisible = await dashboardPanelActions.isContextMenuIconVisible(); expect(isContextMenuIconVisible).to.equal(true); @@ -65,7 +64,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // The second parameter of true will include the timestamp in the url and // trigger a hard refresh. await browser.get(currentUrl.toString(), true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardPanelActions.expectExistsEditPanelAction(); await dashboardPanelActions.expectExistsClonePanelAction(); @@ -78,17 +77,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('visualization object edit menu', () => { it('opens a visualization when edit link is clicked', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const currentUrl = await browser.getCurrentUrl(); expect(currentUrl).to.contain(VisualizeConstants.EDIT_PATH); }); it('deletes the visualization when delete link is clicked', async () => { - await PageObjects.header.clickDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); await dashboardPanelActions.removePanel(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.be(0); }); }); @@ -97,39 +96,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const searchName = 'my search'; before(async () => { - await PageObjects.header.clickDiscover(true); - await PageObjects.discover.clickNewSearchButton(); + await header.clickDiscover(true); + await discover.clickNewSearchButton(); await dashboardVisualizations.createSavedSearch({ name: searchName, fields: ['bytes'] }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); + await header.clickDashboard(); // The following tests require a fresh dashboard. - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); - if (inViewMode) await PageObjects.dashboard.switchToEditMode(); + const inViewMode = await dashboard.getIsInViewMode(); + if (inViewMode) await dashboard.switchToEditMode(); await dashboardAddPanel.addSavedSearch(searchName); }); it('should be one panel on dashboard', async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.be(1); }); it('opens a saved search when edit link is clicked', async () => { await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const queryName = await PageObjects.discover.getCurrentQueryName(); + await header.waitUntilLoadingHasFinished(); + const queryName = await discover.getCurrentQueryName(); expect(queryName).to.be(searchName); }); it('deletes the saved search when delete link is clicked', async () => { - await PageObjects.header.clickDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.clickDashboard(); + await header.waitUntilLoadingHasFinished(); await dashboardPanelActions.removePanel(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.be(0); }); }); @@ -139,7 +138,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const currentUrl = await browser.getCurrentUrl(); await browser.get(currentUrl.toString(), false); await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME); - await PageObjects.dashboard.saveDashboard(dashboardName + '2'); + await dashboard.saveDashboard(dashboardName + '2'); await dashboardPanelActions.clickExpandPanelToggle(); }); @@ -151,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('in edit mode', () => { it('switch to edit mode', async function () { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); }); it('some context menu actions should be present', async function () { diff --git a/test/functional/apps/dashboard/group4/dashboard_clone.ts b/test/functional/apps/dashboard/group4/dashboard_clone.ts index c406eaff153916..5166d690a8e6fb 100644 --- a/test/functional/apps/dashboard/group4/dashboard_clone.ts +++ b/test/functional/apps/dashboard/group4/dashboard_clone.ts @@ -14,54 +14,52 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const listingTable = getService('listingTable'); - const PageObjects = getPageObjects(['dashboard', 'header', 'common']); + const { dashboard } = getPageObjects(['dashboard']); describe('dashboard clone', function describeIndexTests() { const dashboardName = 'Dashboard Clone Test'; const clonedDashboardName = dashboardName + ' (1)'; before(async function () { - return PageObjects.dashboard.initTests(); + return dashboard.initTests(); }); it('Clone saves a copy', async function () { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations( - PageObjects.dashboard.getTestVisualizationNames() - ); - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations(dashboard.getTestVisualizationNames()); + await dashboard.saveDashboard(dashboardName); - await PageObjects.dashboard.duplicateDashboard(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.duplicateDashboard(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', clonedDashboardName, 1); }); it('the copy should have all the same visualizations', async function () { - await PageObjects.dashboard.loadSavedDashboard(clonedDashboardName); + await dashboard.loadSavedDashboard(clonedDashboardName); await retry.try(async () => { - const panelTitles = await PageObjects.dashboard.getPanelTitles(); - expect(panelTitles).to.eql(PageObjects.dashboard.getTestVisualizationNames()); + const panelTitles = await dashboard.getPanelTitles(); + expect(panelTitles).to.eql(dashboard.getTestVisualizationNames()); }); }); it('Clone should suggest a unique title', async function () { - await PageObjects.dashboard.loadSavedDashboard(clonedDashboardName); - await PageObjects.dashboard.duplicateDashboard(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard(clonedDashboardName); + await dashboard.duplicateDashboard(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', `${dashboardName} (2)`, 1); }); it('Clone should always increment from the last duplicated dashboard with a unique title', async function () { - await PageObjects.dashboard.loadSavedDashboard(clonedDashboardName); + await dashboard.loadSavedDashboard(clonedDashboardName); // force dashboard duplicate id to increment out of logical progression bounds - await PageObjects.dashboard.duplicateDashboard(`${dashboardName} (20)`); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.duplicateDashboard(`${dashboardName} (20)`); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', `${dashboardName} (20)`, 1); // load dashboard with duplication id 1 - await PageObjects.dashboard.loadSavedDashboard(clonedDashboardName); + await dashboard.loadSavedDashboard(clonedDashboardName); // run normal clone - await PageObjects.dashboard.duplicateDashboard(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.duplicateDashboard(); + await dashboard.gotoDashboardLandingPage(); // clone gets duplication id, that picks off from last duplicated dashboard await listingTable.searchAndExpectItemsCount('dashboard', `${dashboardName} (21)`, 1); }); diff --git a/test/functional/apps/dashboard/group4/dashboard_empty.ts b/test/functional/apps/dashboard/group4/dashboard_empty.ts index 7e370bcb78c454..1d38b777cd6919 100644 --- a/test/functional/apps/dashboard/group4/dashboard_empty.ts +++ b/test/functional/apps/dashboard/group4/dashboard_empty.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker']); + const { common, dashboard, header } = getPageObjects(['common', 'dashboard', 'header']); describe('dashboard empty state', () => { const kbnDirectory = 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana'; @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); log.debug('load kibana with no data'); await kibanaServer.importExport.unload(kbnDirectory); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async () => { @@ -35,11 +35,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Opens the integrations page when there is no data', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const addIntegrations = await testSubjects.find('kbnOverviewAddIntegrations'); await addIntegrations.click(); - await PageObjects.common.waitUntilUrlIncludes('integrations/browse'); + await common.waitUntilUrlIncludes('integrations/browse'); }); it('adds a new data view when no data views', async () => { @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); // create the new data view from the dashboards/create route in order to test that the dashboard is loaded properly as soon as the data view is created... - await PageObjects.common.navigateToApp('dashboards', { hash: '/create' }); + await common.navigateToApp('dashboards', { hash: '/create' }); const dataViewToCreate = 'logstash'; await dataViews.createFromPrompt({ name: dataViewToCreate }); diff --git a/test/functional/apps/dashboard/group4/dashboard_listing.ts b/test/functional/apps/dashboard/group4/dashboard_listing.ts index e33b2cc87082df..6816a298f36da0 100644 --- a/test/functional/apps/dashboard/group4/dashboard_listing.ts +++ b/test/functional/apps/dashboard/group4/dashboard_listing.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'common']); + const { dashboard, header, common } = getPageObjects(['dashboard', 'header', 'common']); const browser = getService('browser'); const listingTable = getService('listingTable'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -22,32 +22,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardName = 'Dashboard Listing Test'; before(async function () { - await PageObjects.dashboard.initTests(); + await dashboard.initTests(); }); describe('create prompt', () => { it('appears when there are no dashboards', async function () { - const promptExists = await PageObjects.dashboard.getCreateDashboardPromptExists(); + const promptExists = await dashboard.getCreateDashboardPromptExists(); expect(promptExists).to.be(true); }); it('creates a new dashboard', async function () { - await PageObjects.dashboard.clickCreateDashboardPrompt(); - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.clickCreateDashboardPrompt(); + await dashboard.saveDashboard(dashboardName); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 1); }); it('is not shown when there is a dashboard', async function () { - const promptExists = await PageObjects.dashboard.getCreateDashboardPromptExists(); + const promptExists = await dashboard.getCreateDashboardPromptExists(); expect(promptExists).to.be(false); }); it('is not shown when there are no dashboards shown during a search', async function () { await listingTable.searchAndExpectItemsCount('dashboard', 'gobeldeguck', 0); - const promptExists = await PageObjects.dashboard.getCreateDashboardPromptExists(); + const promptExists = await dashboard.getCreateDashboardPromptExists(); expect(promptExists).to.be(false); await listingTable.clearSearchFilter(); }); @@ -59,11 +59,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.checkListingSelectAllCheckbox(); await listingTable.clickDeleteSelected(); - await PageObjects.common.expectConfirmModalOpenState(true); + await common.expectConfirmModalOpenState(true); - await PageObjects.common.pressEnterKey(); + await common.pressEnterKey(); - await PageObjects.common.expectConfirmModalOpenState(false); + await common.expectConfirmModalOpenState(false); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 1); }); @@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.checkListingSelectAllCheckbox(); await listingTable.clickDeleteSelected(); - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 0); }); @@ -81,9 +81,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('search', function () { before(async () => { await listingTable.clearSearchFilter(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard('Two Words'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard('Two Words'); + await dashboard.gotoDashboardLandingPage(); }); it('matches on the first word', async function () { @@ -125,37 +125,37 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const useTimeStamp = true; await browser.get(newUrl.toString(), useTimeStamp); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + const onDashboardLandingPage = await dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(false); }); it('title match is case insensitive', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=two%20words'; // Only works on a hard refresh. const useTimeStamp = true; await browser.get(newUrl.toString(), useTimeStamp); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + const onDashboardLandingPage = await dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(false); }); it('stays on listing page if title matches no dashboards', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=nodashboardsnamedme'; // Only works on a hard refresh. const useTimeStamp = true; await browser.get(newUrl.toString(), useTimeStamp); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + const onDashboardLandingPage = await dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(true); }); @@ -165,21 +165,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('stays on listing page if title matches two dashboards', async function () { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard('two words', { + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard('two words', { saveAsNew: true, needsConfirm: true, }); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const currentUrl = await browser.getCurrentUrl(); const newUrl = currentUrl + '&title=two%20words'; // Only works on a hard refresh. const useTimeStamp = true; await browser.get(newUrl.toString(), useTimeStamp); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + const onDashboardLandingPage = await dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(true); }); @@ -189,9 +189,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('matches a title with many special characters', async function () { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard('i am !@#$%^&*()_+~`,.<>{}[]; so special'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard('i am !@#$%^&*()_+~`,.<>{}[]; so special'); + await dashboard.gotoDashboardLandingPage(); const currentUrl = await browser.getCurrentUrl(); // Need to encode that one. const newUrl = @@ -201,24 +201,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const useTimeStamp = true; await browser.get(newUrl.toString(), useTimeStamp); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onDashboardLandingPage = await PageObjects.dashboard.onDashboardLandingPage(); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + const onDashboardLandingPage = await dashboard.onDashboardLandingPage(); expect(onDashboardLandingPage).to.equal(false); }); }); describe('edit meta data', () => { it('saves changes to dashboard metadata', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickCreateDashboardPrompt(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickCreateDashboardPrompt(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addEveryEmbeddableOnCurrentPage(); await dashboardAddPanel.ensureAddPanelIsClosed(); - await PageObjects.dashboard.saveDashboard(`${dashboardName}-editMetaData`); - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.saveDashboard(`${dashboardName}-editMetaData`); + const originalPanelCount = await dashboard.getPanelCount(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchForItemWithName(`${dashboardName}-editMetaData`); await listingTable.inspectVisualization(); await listingTable.editVisualizationDetails({ @@ -230,9 +230,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.setSearchFilterValue('new description'); await listingTable.expectItemsCount('dashboard', 1); await listingTable.clickItemLink('dashboard', 'new title'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.equal(originalPanelCount); }); }); @@ -241,14 +241,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const DASHBOARD_NAME = 'Insights Dashboard'; before(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME, { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard(DASHBOARD_NAME, { saveAsNew: true, waitDialogIsClosed: false, exitFromEditMode: false, }); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); it('shows the insights panel and counts the views', async () => { @@ -268,8 +268,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(views1).to.be(1); await listingTable.clickItemLink('dashboard', DASHBOARD_NAME); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.waitForRenderComplete(); + await dashboard.gotoDashboardLandingPage(); const views2 = await getViewsCount(); expect(views2).to.be(2); }); diff --git a/test/functional/apps/dashboard/group4/dashboard_save.ts b/test/functional/apps/dashboard/group4/dashboard_save.ts index 384cbc1b860e05..ed615b6ac5fbb6 100644 --- a/test/functional/apps/dashboard/group4/dashboard_save.ts +++ b/test/functional/apps/dashboard/group4/dashboard_save.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize']); + const { dashboard, header, visualize } = getPageObjects(['dashboard', 'header', 'visualize']); const listingTable = getService('listingTable'); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -23,64 +23,64 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async function () { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.dashboard.initTests(); + await dashboard.initTests(); }); describe('create new', () => { it('warns on duplicate name for new dashboard', async function () { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard(dashboardName); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard(dashboardName); - await PageObjects.dashboard.expectDuplicateTitleWarningDisplayed({ displayed: false }); + await dashboard.expectDuplicateTitleWarningDisplayed({ displayed: false }); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { waitDialogIsClosed: false, }); - await PageObjects.dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); + await dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); }); it('does not save on reject confirmation', async function () { - await PageObjects.dashboard.cancelSave(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.cancelSave(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 1); }); it('Saves on confirm duplicate title warning', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { waitDialogIsClosed: false, }); - await PageObjects.dashboard.ensureDuplicateTitleCallout(); - await PageObjects.dashboard.clickSave(); + await dashboard.ensureDuplicateTitleCallout(); + await dashboard.clickSave(); // This is important since saving a new dashboard will cause a refresh of the page. We have to // wait till it finishes reloading or it might reload the url after simulating the // dashboard landing page click. - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // after saving a new dashboard, the app state must be removed - await await PageObjects.dashboard.expectAppStateRemovedFromURL(); + await await dashboard.expectAppStateRemovedFromURL(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 2); }); it('Saves new Dashboard using the Enter key', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.enterDashboardTitleAndPressEnter(dashboardNameEnterKey); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.enterDashboardTitleAndPressEnter(dashboardNameEnterKey); // This is important since saving a new dashboard will cause a refresh of the page. We have to // wait till it finishes reloading or it might reload the url after simulating the // dashboard landing page click. - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardNameEnterKey, 1); }); @@ -88,63 +88,63 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('quick save', () => { it('Does not show quick save menu item on a new dashboard', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.expectMissingQuickSaveOption(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.expectMissingQuickSaveOption(); }); it('Does not show dashboard save modal when on quick save', async function () { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard('test quick save'); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard('test quick save'); - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.expectExistsQuickSaveOption(); + await dashboard.switchToEditMode(); + await dashboard.expectExistsQuickSaveOption(); await dashboardAddPanel.clickMarkdownQuickButton(); - await PageObjects.visualize.saveVisualizationAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.clickQuickSave(); + await visualize.saveVisualizationAndReturn(); + await dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); await testSubjects.existOrFail('saveDashboardSuccess'); }); it('Stays in edit mode after performing a quick save', async function () { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('dashboardQuickSaveMenuItem'); }); }); describe('duplication (edit mode)', () => { it('Warns you when you Save as New Dashboard, and the title is a duplicate', async function () { - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { + await dashboard.switchToEditMode(); + await dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave(dashboardName, { waitDialogIsClosed: false, }); - await PageObjects.dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); + await dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); - await PageObjects.dashboard.cancelSave(); + await dashboard.cancelSave(); }); it('Does not warn when only the prefix matches', async function () { - await PageObjects.dashboard.saveDashboard(dashboardName.split(' ')[0]); + await dashboard.saveDashboard(dashboardName.split(' ')[0]); - await PageObjects.dashboard.expectDuplicateTitleWarningDisplayed({ displayed: false }); + await dashboard.expectDuplicateTitleWarningDisplayed({ displayed: false }); }); it('Warns when case is different', async function () { - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave( + await dashboard.switchToEditMode(); + await dashboard.enterDashboardSaveModalApplyUpdatesAndClickSave( dashboardName.toUpperCase(), { waitDialogIsClosed: false, } ); - await PageObjects.dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); + await dashboard.expectDuplicateTitleWarningDisplayed({ displayed: true }); - await PageObjects.dashboard.cancelSave(); + await dashboard.cancelSave(); }); }); @@ -152,17 +152,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardNameFlyout = 'Dashboard Save Test with Flyout'; it('Does not warn when you save an existing dashboard with the title it already has', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.enterDashboardTitleAndPressEnter(dashboardNameFlyout); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.enterDashboardTitleAndPressEnter(dashboardNameFlyout); // This is important since saving a new dashboard will cause a refresh of the page. We have to // wait till it finishes reloading or it might reload the url after simulating the // dashboard landing page click. - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.modifyExistingDashboardDetails(dashboardNameFlyout); + await dashboard.switchToEditMode(); + await dashboard.modifyExistingDashboardDetails(dashboardNameFlyout); }); }); }); diff --git a/test/functional/apps/dashboard/group4/dashboard_time.ts b/test/functional/apps/dashboard/group4/dashboard_time.ts index e47210c0bb0711..e9a34705cc72ca 100644 --- a/test/functional/apps/dashboard/group4/dashboard_time.ts +++ b/test/functional/apps/dashboard/group4/dashboard_time.ts @@ -14,64 +14,62 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; const dashboardName = 'Dashboard Test Time'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker']); + const { dashboard, header, timePicker } = getPageObjects(['dashboard', 'header', 'timePicker']); const pieChart = getService('pieChart'); const browser = getService('browser'); describe('dashboard time', () => { before(async function () { - await PageObjects.dashboard.initTests(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.initTests(); + await dashboard.preserveCrossAppState(); }); after(async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); describe('dashboard without stored timed', () => { it('is saved', async () => { - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations([ - PageObjects.dashboard.getTestVisualizationNames()[0], - ]); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations([dashboard.getTestVisualizationNames()[0]]); + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: false, saveAsNew: true, }); }); it('Does not set the time picker on open', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); - const time = await PageObjects.timePicker.getTimeConfig(); - expect(time.start).to.equal(PageObjects.timePicker.defaultStartTime); - expect(time.end).to.equal(PageObjects.timePicker.defaultEndTime); + const time = await timePicker.getTimeConfig(); + expect(time.start).to.equal(timePicker.defaultStartTime); + expect(time.end).to.equal(timePicker.defaultEndTime); }); }); describe('dashboard with stored timed', function () { it('is saved with time', async function () { - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.switchToEditMode(); + await timePicker.setDefaultAbsoluteRange(); + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true, saveAsNew: false, }); }); it('sets time on open', async function () { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2019 @ 00:00:00.000', 'Jan 2, 2019 @ 00:00:00.000' ); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); - const time = await PageObjects.timePicker.getTimeConfig(); - expect(time.start).to.equal(PageObjects.timePicker.defaultStartTime); - expect(time.end).to.equal(PageObjects.timePicker.defaultEndTime); + const time = await timePicker.getTimeConfig(); + expect(time.start).to.equal(timePicker.defaultStartTime); + expect(time.end).to.equal(timePicker.defaultEndTime); }); // If time is stored with a dashboard, it's supposed to override the current time settings when opened. @@ -80,13 +78,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be overwritten by global state', async function () { const currentUrl = await browser.getCurrentUrl(); const kibanaBaseUrl = currentUrl.substring(0, currentUrl.indexOf('#')); - const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const id = await dashboard.getDashboardIdFromCurrentUrl(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const urlWithGlobalTime = `${kibanaBaseUrl}#/view/${id}?_g=(time:(from:now-1h,to:now))`; await browser.get(urlWithGlobalTime, false); - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal('~ an hour ago'); expect(time.end).to.equal('now'); @@ -100,39 +98,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should use saved time, if time is missing in global state, but _g is present in the url', async function () { const currentUrl = await browser.getCurrentUrl(); const kibanaBaseUrl = currentUrl.substring(0, currentUrl.indexOf('#')); - const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const id = await dashboard.getDashboardIdFromCurrentUrl(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const urlWithGlobalTime = `${kibanaBaseUrl}#/view/${id}?_g=(filters:!())`; await browser.get(urlWithGlobalTime, false); - const time = await PageObjects.timePicker.getTimeConfig(); - expect(time.start).to.equal(PageObjects.timePicker.defaultStartTime); - expect(time.end).to.equal(PageObjects.timePicker.defaultEndTime); + const time = await timePicker.getTimeConfig(); + expect(time.start).to.equal(timePicker.defaultStartTime); + expect(time.end).to.equal(timePicker.defaultEndTime); }); it('should use saved time after time change is undone', async function () { const currentUrl = await browser.getCurrentUrl(); const kibanaBaseUrl = currentUrl.substring(0, currentUrl.indexOf('#')); - const id = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const id = await dashboard.getDashboardIdFromCurrentUrl(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); const urlWithGlobalTime = `${kibanaBaseUrl}#/view/${id}?_g=(filters:!())`; await browser.get(urlWithGlobalTime, false); // set the time to something else - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2019 @ 00:00:00.000', 'Jan 2, 2019 @ 00:00:00.000' ); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await browser.goBack(); // time should have restored to the saved time range. - const time = await PageObjects.timePicker.getTimeConfig(); - expect(time.start).to.equal(PageObjects.timePicker.defaultStartTime); - expect(time.end).to.equal(PageObjects.timePicker.defaultEndTime); + const time = await timePicker.getTimeConfig(); + expect(time.start).to.equal(timePicker.defaultStartTime); + expect(time.end).to.equal(timePicker.defaultEndTime); }); }); @@ -142,16 +140,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // during navigation or page refreshes. describe('time changes', function () { it('preserved during navigation', async function () { - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2019 @ 00:00:00.000', 'Jan 2, 2019 @ 00:00:00.000' ); - await PageObjects.header.clickVisualize(); - await PageObjects.header.clickDashboard(); + await header.clickVisualize(); + await header.clickDashboard(); - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal('Jan 1, 2019 @ 00:00:00.000'); expect(time.end).to.equal('Jan 2, 2019 @ 00:00:00.000'); }); diff --git a/test/functional/apps/dashboard/group5/dashboard_back_button.ts b/test/functional/apps/dashboard/group5/dashboard_back_button.ts index 41ea17d306d260..79eda218ee5563 100644 --- a/test/functional/apps/dashboard/group5/dashboard_back_button.ts +++ b/test/functional/apps/dashboard/group5/dashboard_back_button.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['dashboard', 'header', 'common', 'visualize', 'timePicker']); + const { dashboard } = getPageObjects(['dashboard']); const browser = getService('browser'); const security = getService('security'); @@ -26,8 +26,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); }); after(async () => { @@ -36,11 +36,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('after navigation from listing page to dashboard back button works', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with everything'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('dashboard with everything'); + await dashboard.waitForRenderComplete(); await browser.goBack(); - expect(await PageObjects.dashboard.onDashboardLandingPage()).to.be(true); + expect(await dashboard.onDashboardLandingPage()).to.be(true); }); }); } diff --git a/test/functional/apps/dashboard/group5/dashboard_error_handling.ts b/test/functional/apps/dashboard/group5/dashboard_error_handling.ts index 9721050f190ca4..35bc57d31eb586 100644 --- a/test/functional/apps/dashboard/group5/dashboard_error_handling.ts +++ b/test/functional/apps/dashboard/group5/dashboard_error_handling.ts @@ -11,7 +11,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'common']); + const { dashboard, header } = getPageObjects(['dashboard', 'header']); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); @@ -34,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard_error_cases.json' ); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async () => { @@ -42,11 +42,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('correctly loads default index pattern on first load with an error embeddable', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('Dashboard with Missing Lens Panel'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('Dashboard with Missing Lens Panel'); + await header.waitUntilLoadingHasFinished(); await filterBar.addFilter({ field: 'bytes', operation: 'is', value: '12345678' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.getFilterCount()).to.be(1); }); @@ -54,9 +54,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // see: https://github.com/elastic/kibana/pull/67280#discussion_r430528122 describe('when the saved object is missing', () => { it('shows the missing data view error message', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with missing index pattern'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('dashboard with missing index pattern'); + await header.waitUntilLoadingHasFinished(); const embeddableError = await testSubjects.find('embeddableError'); const errorMessage = await embeddableError.getVisibleText(); diff --git a/test/functional/apps/dashboard/group5/dashboard_query_bar.ts b/test/functional/apps/dashboard/group5/dashboard_query_bar.ts index bec9466023958a..923cb58b87671e 100644 --- a/test/functional/apps/dashboard/group5/dashboard_query_bar.ts +++ b/test/functional/apps/dashboard/group5/dashboard_query_bar.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const retry = getService('retry'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'dashboard', 'discover']); + const { dashboard, discover } = getPageObjects(['dashboard', 'discover']); describe('dashboard query bar', () => { before(async () => { @@ -30,9 +30,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with filter'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('dashboard with filter'); }); after(async () => { @@ -44,7 +44,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/dashboard/current/data'); await queryBar.clickQuerySubmitButton(); await retry.tryForTime(5000, async () => { - const headers = await PageObjects.discover.getColumnHeaders(); + const headers = await discover.getColumnHeaders(); expect(headers.length).to.be(0); await pieChart.expectEmptyPieChart(); }); diff --git a/test/functional/apps/dashboard/group5/dashboard_settings.ts b/test/functional/apps/dashboard/group5/dashboard_settings.ts index 70a131699ddd9c..c04b4a1e4a56d1 100644 --- a/test/functional/apps/dashboard/group5/dashboard_settings.ts +++ b/test/functional/apps/dashboard/group5/dashboard_settings.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const globalNav = getService('globalNav'); const kibanaServer = getService('kibanaServer'); const dashboardSettings = getService('dashboardSettings'); - const PageObjects = getPageObjects(['common', 'dashboard']); + const { dashboard } = getPageObjects(['dashboard']); describe('dashboard settings', () => { let originalTitles: string[] = []; @@ -38,11 +38,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.switchToEditMode(); - originalTitles = await PageObjects.dashboard.getPanelTitles(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.switchToEditMode(); + originalTitles = await dashboard.getPanelTitles(); }); after(async () => { @@ -50,21 +50,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to hide all panel titles', async () => { - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.toggleShowPanelTitles(false); await dashboardSettings.clickApplyButton(); await retry.try(async () => { - const titles = await PageObjects.dashboard.getPanelTitles(); + const titles = await dashboard.getPanelTitles(); expect(titles[0]).to.eql(undefined); }); }); it('should be able to unhide all panel titles', async () => { - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.toggleShowPanelTitles(true); await dashboardSettings.clickApplyButton(); await retry.try(async () => { - const titles = await PageObjects.dashboard.getPanelTitles(); + const titles = await dashboard.getPanelTitles(); expect(titles[0]).to.eql(originalTitles[0]); }); }); @@ -73,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await checkDashboardTitle('few panels'); const newTitle = 'My awesome dashboard!!1'; - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.setCustomPanelTitle(newTitle); await dashboardSettings.clickApplyButton(); @@ -81,25 +81,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should disable quick save when the settings are open', async () => { - await PageObjects.dashboard.expectQuickSaveButtonEnabled(); - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.expectQuickSaveButtonEnabled(); + await dashboard.openSettingsFlyout(); await retry.try(async () => { - await PageObjects.dashboard.expectQuickSaveButtonDisabled(); + await dashboard.expectQuickSaveButtonDisabled(); }); await dashboardSettings.clickCancelButton(); }); it('should enable quick save when the settings flyout is closed', async () => { - await PageObjects.dashboard.expectQuickSaveButtonEnabled(); - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.expectQuickSaveButtonEnabled(); + await dashboard.openSettingsFlyout(); await dashboardSettings.clickCloseFlyoutButton(); await retry.try(async () => { - await PageObjects.dashboard.expectQuickSaveButtonEnabled(); + await dashboard.expectQuickSaveButtonEnabled(); }); }); it('should warn when creating a duplicate title', async () => { - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.setCustomPanelTitle('couple panels'); await dashboardSettings.clickApplyButton(false); await retry.try(async () => { @@ -110,7 +110,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow duplicate title if warned once', async () => { const newTitle = 'couple panels'; - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.setCustomPanelTitle(newTitle); await dashboardSettings.clickApplyButton(false); await retry.try(async () => { diff --git a/test/functional/apps/dashboard/group5/data_shared_attributes.ts b/test/functional/apps/dashboard/group5/data_shared_attributes.ts index f92afbfb0eed7e..4b13b3bd077c3a 100644 --- a/test/functional/apps/dashboard/group5/data_shared_attributes.ts +++ b/test/functional/apps/dashboard/group5/data_shared_attributes.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker']); + const { dashboard, timePicker } = getPageObjects(['dashboard', 'timePicker']); describe('dashboard data-shared attributes', function describeIndexTests() { let originalPanelTitles: string[]; @@ -31,10 +31,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with everything'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('dashboard with everything'); + await dashboard.waitForRenderComplete(); }); after(async () => { @@ -44,29 +44,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should have time picker with data-shared-timefilter-duration', async () => { await retry.try(async () => { - const sharedData = await PageObjects.timePicker.getTimeDurationForSharing(); + const sharedData = await timePicker.getTimeDurationForSharing(); expect(sharedData).to.not.be(null); }); }); it('should have data-shared-items-count set to the number of embeddables on the dashboard', async () => { await retry.try(async () => { - const sharedItemsCount = await PageObjects.dashboard.getSharedItemsCount(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const sharedItemsCount = await dashboard.getSharedItemsCount(); + const panelCount = await dashboard.getPanelCount(); expect(sharedItemsCount).to.eql(panelCount); }); }); it('should have panels with expected data-shared-item title', async () => { await retry.try(async () => { - const sharedData = await PageObjects.dashboard.getPanelSharedItemData(); - originalPanelTitles = await PageObjects.dashboard.getPanelTitles(); + const sharedData = await dashboard.getPanelSharedItemData(); + originalPanelTitles = await dashboard.getPanelTitles(); expect(sharedData.map((item) => item.title)).to.eql(originalPanelTitles); }); }); it('data shared item container data has description and title set', async () => { - const sharedContainerData = await PageObjects.dashboard.getSharedContainerData(); + const sharedContainerData = await dashboard.getSharedContainerData(); expect(sharedContainerData.title).to.be('dashboard with everything'); expect(sharedContainerData.description).to.be( 'I have one of every visualization type since the last time I was created!' @@ -74,7 +74,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('data-shared-item title should update a viz when using a custom panel title', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); const CUSTOM_VIS_TITLE = 'ima custom title for a vis!'; await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); @@ -83,7 +83,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutClosed(); await retry.try(async () => { - const sharedData = await PageObjects.dashboard.getPanelSharedItemData(); + const sharedData = await dashboard.getPanelSharedItemData(); const foundSharedItemTitle = !!sharedData.find((item) => { return item.title === CUSTOM_VIS_TITLE; }); @@ -102,7 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await toggleHideTitle(); await retry.try(async () => { - const sharedData = await PageObjects.dashboard.getPanelSharedItemData(); + const sharedData = await dashboard.getPanelSharedItemData(); const foundSharedItemTitle = !!sharedData.find((item) => { return item.title === ''; }); @@ -112,14 +112,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('data-shared-item title can be reset', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.resetCustomPanelTitle(); await dashboardCustomizePanel.clickSaveButton(); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutClosed(); await retry.try(async () => { - const sharedData = await PageObjects.dashboard.getPanelSharedItemData(); + const sharedData = await dashboard.getPanelSharedItemData(); const foundOriginalSharedItemTitle = !!sharedData.find((item) => { return item.title === originalPanelTitles[0]; }); @@ -128,16 +128,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('data-shared-item title should update a saved search when using a custom panel title', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); const CUSTOM_SEARCH_TITLE = 'ima custom title for a search!'; - await dashboardPanelActions.customizePanelByTitle('Rendering Test: saved search'); + await dashboardPanelActions.customizePanel('Rendering Test: saved search'); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); await dashboardCustomizePanel.setCustomPanelTitle(CUSTOM_SEARCH_TITLE); await dashboardCustomizePanel.clickSaveButton(); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutClosed(); await retry.try(async () => { - const sharedData = await PageObjects.dashboard.getPanelSharedItemData(); + const sharedData = await dashboard.getPanelSharedItemData(); const foundSharedItemTitle = !!sharedData.find((item) => { return item.title === CUSTOM_SEARCH_TITLE; }); diff --git a/test/functional/apps/dashboard/group5/embed_mode.ts b/test/functional/apps/dashboard/group5/embed_mode.ts index 654992ebc40c7e..965f448b38a3f0 100644 --- a/test/functional/apps/dashboard/group5/embed_mode.ts +++ b/test/functional/apps/dashboard/group5/embed_mode.ts @@ -19,7 +19,7 @@ export default function ({ const testSubjects = getService('testSubjects'); const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['dashboard', 'common']); + const { dashboard } = getPageObjects(['dashboard']); const browser = getService('browser'); const globalNav = getService('globalNav'); const screenshot = getService('screenshots'); @@ -50,9 +50,9 @@ export default function ({ await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('dashboard with everything'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('dashboard with everything'); await browser.setWindowSize(1300, 900); }); @@ -82,7 +82,7 @@ export default function ({ }); it('renders as expected', async () => { - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const percentDifference = await screenshot.compareAgainstBaseline( 'dashboard_embed_mode', updateBaselines @@ -105,7 +105,7 @@ export default function ({ }); it('renders as expected', async () => { - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const percentDifference = await screenshot.compareAgainstBaseline( 'dashboard_embed_mode_with_url_params', updateBaselines @@ -114,7 +114,7 @@ export default function ({ }); it('renders as expected when scrolling', async () => { - const panels = await PageObjects.dashboard.getDashboardPanels(); + const panels = await dashboard.getDashboardPanels(); const lastPanel = panels[panels.length - 1]; const lastPanelHeight = -parseInt(await lastPanel.getComputedStyle('height'), 10); log.debug( diff --git a/test/functional/apps/dashboard/group5/empty_dashboard.ts b/test/functional/apps/dashboard/group5/empty_dashboard.ts index 37a92a471ab367..a154b3d936fd4b 100644 --- a/test/functional/apps/dashboard/group5/empty_dashboard.ts +++ b/test/functional/apps/dashboard/group5/empty_dashboard.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardVisualizations = getService('dashboardVisualizations'); const dashboardExpect = getService('dashboardExpect'); - const PageObjects = getPageObjects(['common', 'dashboard']); + const { dashboard } = getPageObjects(['dashboard']); describe('empty dashboard', () => { before(async () => { @@ -28,14 +28,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); after(async () => { await dashboardAddPanel.closeAddPanel(); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await kibanaServer.savedObjects.cleanStandardList(); }); diff --git a/test/functional/apps/dashboard/group5/legacy_urls.ts b/test/functional/apps/dashboard/group5/legacy_urls.ts index e15441b2ca8610..62ae63baa8fc8a 100644 --- a/test/functional/apps/dashboard/group5/legacy_urls.ts +++ b/test/functional/apps/dashboard/group5/legacy_urls.ts @@ -10,10 +10,9 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { dashboard, header, timePicker, visualize, visEditor } = getPageObjects([ 'dashboard', 'header', - 'common', 'timePicker', 'visualize', 'visEditor', @@ -39,14 +38,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); - await PageObjects.dashboard.saveDashboard('legacyTest', { + await dashboard.saveDashboard('legacyTest', { waitDialogIsClosed: true, saveAsNew: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const currentUrl = await browser.getCurrentUrl(); await log.debug(`Current url is ${currentUrl}`); testDashboardId = /#\/view\/(.+)\?/.exec(currentUrl)![1]; @@ -58,7 +57,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await listingTable.deleteItem('legacyTest', testDashboardId); await security.testUser.restoreDefaults(); }); @@ -67,11 +66,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('redirects from old kibana app URL', async () => { const url = `${kibanaLegacyBaseUrl}#/dashboard/${testDashboardId}`; await browser.get(url, true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.timePicker.setDefaultDataRange(); + await timePicker.setDefaultDataRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); }); @@ -79,27 +78,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const url = `${kibanaVisualizeBaseUrl}#/dashboard/${testDashboardId}`; await browser.get(url, true); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.timePicker.setDefaultDataRange(); + await header.waitUntilLoadingHasFinished(); + await timePicker.setDefaultDataRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); }); it('resolves markdown link', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickMarkdownWidget(); - await PageObjects.visEditor.setMarkdownTxt(`[abc](#/dashboard/${testDashboardId})`); - await PageObjects.visEditor.clickGo(); + await visualize.navigateToNewVisualization(); + await visualize.clickMarkdownWidget(); + await visEditor.setMarkdownTxt(`[abc](#/dashboard/${testDashboardId})`); + await visEditor.clickGo(); - await PageObjects.visualize.saveVisualizationExpectSuccess('legacy url markdown'); + await visualize.saveVisualizationExpectSuccess('legacy url markdown'); await (await find.byLinkText('abc')).click(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.timePicker.setDefaultDataRange(); + await header.waitUntilLoadingHasFinished(); + await timePicker.setDefaultDataRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); }); @@ -108,20 +107,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.goBack(); // back to last app await browser.goBack(); - await PageObjects.visEditor.expectMarkdownTextArea(); + await visEditor.expectMarkdownTextArea(); await browser.goForward(); }); it('resolves markdown link from dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization('legacy url markdown'); await (await find.byLinkText('abc')).click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.timePicker.setDefaultDataRange(); + await timePicker.setDefaultDataRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); }); }); diff --git a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts index 1997012cbcf135..4b488fdb25d8a9 100644 --- a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts +++ b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts @@ -17,7 +17,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']); + const { common, dashboard, header, discover } = getPageObjects([ + 'common', + 'dashboard', + 'header', + 'discover', + ]); const from = 'Sep 22, 2015 @ 00:00:00.000'; const to = 'Sep 23, 2015 @ 00:00:00.000'; @@ -32,23 +37,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ from, to }); - await PageObjects.dashboard.navigateToApp(); + await common.setTime({ from, to }); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('highlighting on filtering works', async function () { await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); await filterBar.addFilter({ field: 'agent', operation: 'is', value: 'Mozilla' }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const dataTable = await find.byCssSelector(`[data-test-subj="embeddedSavedSearchDocTable"]`); const $ = await dataTable.parseDomContent(); const marks = $('mark') @@ -59,8 +64,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('removing a filter removes highlights', async function () { await filterBar.removeAllFilters(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const dataTable = await find.byCssSelector(`[data-test-subj="embeddedSavedSearchDocTable"]`); const $ = await dataTable.parseDomContent(); const marks = $('mark') @@ -71,22 +76,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('view action leads to a saved search', async function () { await filterBar.removeAllFilters(); - await PageObjects.dashboard.saveDashboard('Dashboard With Saved Search'); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); + await dashboard.saveDashboard('Dashboard With Saved Search'); + await dashboard.clickCancelOutOfEditMode(false); + const inViewMode = await dashboard.getIsInViewMode(); expect(inViewMode).to.equal(true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.clickContextMenuItem( 'embeddablePanelAction-ACTION_VIEW_SAVED_SEARCH' ); - await PageObjects.discover.waitForDiscoverAppOnScreen(); - expect(await PageObjects.discover.getSavedSearchTitle()).to.equal( - 'Rendering Test: saved search' - ); + await discover.waitForDiscoverAppOnScreen(); + expect(await discover.getSavedSearchTitle()).to.equal('Rendering Test: saved search'); }); }); } diff --git a/test/functional/apps/dashboard/group5/share.ts b/test/functional/apps/dashboard/group5/share.ts index b21f8e4b96b655..ebb1b6a68e9f53 100644 --- a/test/functional/apps/dashboard/group5/share.ts +++ b/test/functional/apps/dashboard/group5/share.ts @@ -43,19 +43,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); - const PageObjects = getPageObjects(['dashboard', 'common', 'share', 'timePicker']); + const { dashboard, common, share } = getPageObjects(['dashboard', 'common', 'share']); const getSharedUrl = async (mode: TestingModes): Promise => { await retry.waitFor('share menu to open', async () => { - await PageObjects.share.clickShareTopNavButton(); - return await PageObjects.share.isShareMenuOpen(); + await share.clickShareTopNavButton(); + return await share.isShareMenuOpen(); }); - return await PageObjects.share.getSharedUrl(); + return await share.getSharedUrl(); }; const unpinnedFilterIsOnlyWhenDashboardIsUnsaved = async (mode: TestingModes) => { await filterBar.addFilter({ field: 'geo.src', operation: 'is', value: 'AE' }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const sharedUrl = await getSharedUrl(mode); const { globalState, appState } = getStateFromUrl(sharedUrl); @@ -68,8 +68,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const unpinnedFilterIsRemoved = async (mode: TestingModes) => { - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); + await dashboard.waitForRenderComplete(); const sharedUrl = await getSharedUrl(mode); expect(sharedUrl).to.not.contain('appState'); @@ -77,8 +77,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const pinnedFilterIsWhenDashboardInGlobalState = async (mode: TestingModes) => { await filterBar.toggleFilterPinned('geo.src'); - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); + await dashboard.waitForRenderComplete(); const sharedUrl = await getSharedUrl(mode); const { globalState, appState } = getStateFromUrl(sharedUrl); @@ -99,17 +99,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); const from = 'Sep 19, 2017 @ 06:31:44.000'; const to = 'Sep 23, 2018 @ 18:31:44.000'; - await PageObjects.common.setTime({ from, to }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.dashboard.waitForRenderComplete(); + await common.setTime({ from, to }); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.switchToEditMode(); + await dashboard.waitForRenderComplete(); }); after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); describe('snapshot share', () => { @@ -123,7 +123,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.setCustomPanelTitle('Test New Title'); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); const sharedUrl = await getSharedUrl('snapshot'); @@ -132,8 +132,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should once again not have "panels" state when save is clicked', async () => { - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); + await dashboard.waitForRenderComplete(); await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); expect(await getSharedUrl('snapshot')).to.not.contain('panels'); }); @@ -161,8 +161,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await filterBar.removeAllFilters(); - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); + await dashboard.waitForRenderComplete(); }); }); diff --git a/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts b/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts index eb2d05da0d4500..fd234bfa7e4cb7 100644 --- a/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts +++ b/test/functional/apps/dashboard/group6/dashboard_esql_chart.ts @@ -14,7 +14,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker', 'header']); + const { dashboard, timePicker, header } = getPageObjects(['dashboard', 'timePicker', 'header']); const testSubjects = getService('testSubjects'); const monacoEditor = getService('monacoEditor'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -31,17 +31,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add an ES|QL datatable chart when the ES|QL panel action is clicked', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultDataRange(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); + await dashboard.switchToEditMode(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAddNewPanelFromUIActionLink('ES|QL'); await dashboardAddPanel.expectEditorMenuClosed(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); }); @@ -50,9 +50,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should remove the panel if cancel button is clicked', async () => { await testSubjects.click('cancelFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await retry.try(async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(0); }); }); @@ -61,11 +61,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAddNewPanelFromUIActionLink('ES|QL'); await dashboardAddPanel.expectEditorMenuClosed(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await monacoEditor.setCodeEditorValue('from logstash-* | stats maxB = max(bytes)'); await testSubjects.click('TextBasedLangEditor-run-query-button'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('applyFlyoutButton'); expect(await testSubjects.exists('mtrVis')).to.be(true); diff --git a/test/functional/apps/dashboard/group6/dashboard_grid.ts b/test/functional/apps/dashboard/group6/dashboard_grid.ts index a68ec3f96eebb5..ddabac7ace11a2 100644 --- a/test/functional/apps/dashboard/group6/dashboard_grid.ts +++ b/test/functional/apps/dashboard/group6/dashboard_grid.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects(['common', 'dashboard']); + const { dashboard } = getPageObjects(['dashboard']); describe('dashboard grid', function () { before(async () => { @@ -26,10 +26,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('few panels'); + await dashboard.switchToEditMode(); }); after(async () => { diff --git a/test/functional/apps/dashboard/group6/dashboard_saved_query.ts b/test/functional/apps/dashboard/group6/dashboard_saved_query.ts index 7ec58ed8ce54a6..acb3e7980b5efb 100644 --- a/test/functional/apps/dashboard/group6/dashboard_saved_query.ts +++ b/test/functional/apps/dashboard/group6/dashboard_saved_query.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker']); + const { dashboard, timePicker } = getPageObjects(['dashboard', 'timePicker']); const browser = getService('browser'); const queryBar = getService('queryBar'); const savedQueryManagementComponent = getService('savedQueryManagementComponent'); @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async () => { @@ -38,8 +38,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // FLAKY: https://github.com/elastic/kibana/issues/189023 describe.skip('saved query management component functionality', function () { before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); it('should show the saved query management load button as disabled when there are no saved queries', async () => { @@ -71,19 +71,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('reinstates filters and the time filter when a saved query has filters and a time filter included', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.not.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.not.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.not.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.not.eql(timePicker.defaultEndTime); }); it('preserves the currently loaded query when the page is reloaded', async () => { await browser.refresh(); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.not.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.not.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.not.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.not.eql(timePicker.defaultEndTime); expect(await savedQueryManagementComponent.getCurrentlyLoadedQueryID()).to.be('OkResponse'); }); diff --git a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts index 2dec441ed2c52e..4a4b21f21e6000 100644 --- a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts +++ b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts @@ -17,12 +17,10 @@ export default function ({ getPageObjects, updateBaselines, }: FtrProviderContext & { updateBaselines: boolean }) { - const PageObjects = getPageObjects([ + const { dashboard, dashboardControls, header, timePicker } = getPageObjects([ 'dashboard', 'dashboardControls', 'header', - 'visualize', - 'common', 'timePicker', ]); const screenshot = getService('screenshots'); @@ -47,7 +45,7 @@ export default function ({ await browser.setScreenshotSize(1000, 500); // adding this navigate adds the timestamp hash to the url which invalidates previous // session. If we don't do this, the colors on the visualizations are different and the screenshots won't match. - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); }); after(async function () { @@ -56,50 +54,50 @@ export default function ({ }); it('compare TSVB snapshot', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setLogstashDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setLogstashDataRange(); await dashboardAddPanel.addVisualization('Rendering Test: tsvb-ts'); await toasts.dismissIfExists(); - await PageObjects.dashboard.saveDashboard('tsvb'); - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.saveDashboard('tsvb'); + await dashboard.clickFullScreenMode(); await dashboardPanelActions.clickExpandPanelToggle(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const percentDifference = await screenshot.compareAgainstBaseline( 'tsvb_dashboard', updateBaselines ); - await PageObjects.dashboard.clickExitFullScreenLogoButton(); + await dashboard.clickExitFullScreenLogoButton(); expect(percentDifference).to.be.lessThan(0.022); }); it('compare area chart snapshot', async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setLogstashDataRange(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setLogstashDataRange(); await dashboardAddPanel.addVisualization('Rendering Test: area with not filter'); await toasts.dismissIfExists(); - await PageObjects.dashboard.saveDashboard('area'); - await PageObjects.dashboard.clickFullScreenMode(); + await dashboard.saveDashboard('area'); + await dashboard.clickFullScreenMode(); await dashboardPanelActions.clickExpandPanelToggle(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const percentDifference = await screenshot.compareAgainstBaseline( 'area_chart', updateBaselines ); - await PageObjects.dashboard.clickExitFullScreenLogoButton(); + await dashboard.clickExitFullScreenLogoButton(); expect(percentDifference).to.be.lessThan(0.029); }); describe('compare controls snapshot', () => { const waitForPageReady = async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('page ready for screenshot', async () => { const queryBarVisible = await testSubjects.exists('globalQueryBar'); const controlGroupVisible = await testSubjects.exists('controls-group-wrapper'); @@ -108,21 +106,21 @@ export default function ({ }; before(async () => { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboardControls.createControl({ + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboardControls.createControl({ controlType: OPTIONS_LIST_CONTROL, dataViewTitle: 'logstash-*', fieldName: 'machine.os.raw', title: 'Machine OS', }); - await PageObjects.dashboardControls.createControl({ + await dashboardControls.createControl({ controlType: RANGE_SLIDER_CONTROL, dataViewTitle: 'logstash-*', fieldName: 'bytes', title: 'Bytes', }); - await PageObjects.dashboard.saveDashboard('Dashboard Controls'); + await dashboard.saveDashboard('Dashboard Controls'); }); it('in light mode', async () => { diff --git a/test/functional/apps/dashboard/group6/embeddable_library.ts b/test/functional/apps/dashboard/group6/embeddable_library.ts index 72cd36521d4909..b7b0a1c3712d8e 100644 --- a/test/functional/apps/dashboard/group6/embeddable_library.ts +++ b/test/functional/apps/dashboard/group6/embeddable_library.ts @@ -7,18 +7,16 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import expect from '@kbn/expect'; - import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['dashboard', 'header', 'visualize', 'settings', 'common']); + const { dashboard } = getPageObjects(['dashboard']); const find = getService('find'); const kibanaServer = getService('kibanaServer'); - const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const panelActions = getService('dashboardPanelActions'); const savedObjectsFinder = getService('savedObjectsFinder'); + const title = 'Rendering Test: heatmap'; describe('embeddable library', () => { before(async () => { @@ -29,48 +27,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); it('unlink visualize panel from embeddable library', async () => { // add heatmap panel from library await dashboardAddPanel.clickOpenAddPanel(); - await savedObjectsFinder.filterEmbeddableNames('Rendering Test: heatmap'); - await find.clickByButtonText('Rendering Test: heatmap'); + await savedObjectsFinder.filterEmbeddableNames(title); + await find.clickByButtonText(title); await dashboardAddPanel.closeAddPanel(); - const originalPanel = await testSubjects.find('embeddablePanelHeading-RenderingTest:heatmap'); - await panelActions.unlinkFromLibrary(originalPanel); - await testSubjects.existOrFail('unlinkPanelSuccess'); - - const updatedPanel = await testSubjects.find('embeddablePanelHeading-RenderingTest:heatmap'); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - updatedPanel - ); - expect(libraryActionExists).to.be(false); + await panelActions.unlinkFromLibrary(title); + await panelActions.expectNotLinkedToLibrary(title); await dashboardAddPanel.clickOpenAddPanel(); - await savedObjectsFinder.filterEmbeddableNames('Rendering Test: heatmap'); - await find.existsByLinkText('Rendering Test: heatmap'); + await savedObjectsFinder.filterEmbeddableNames(title); + await find.existsByLinkText(title); await dashboardAddPanel.closeAddPanel(); }); it('save visualize panel to embeddable library', async () => { - const originalPanel = await testSubjects.find('embeddablePanelHeading-RenderingTest:heatmap'); - await panelActions.saveToLibrary('Rendering Test: heatmap - copy', originalPanel); - await testSubjects.existOrFail('addPanelToLibrarySuccess'); - - const updatedPanel = await testSubjects.find( - 'embeddablePanelHeading-RenderingTest:heatmap-copy' - ); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - updatedPanel - ); - expect(libraryActionExists).to.be(true); + const newTitle = 'Rendering Test: heatmap - copy'; + await panelActions.saveToLibrary(newTitle, title); + await panelActions.expectLinkedToLibrary(newTitle); }); }); } diff --git a/test/functional/apps/dashboard/group6/view_edit.ts b/test/functional/apps/dashboard/group6/view_edit.ts index b7bb75d9af8078..487adc753e652a 100644 --- a/test/functional/apps/dashboard/group6/view_edit.ts +++ b/test/functional/apps/dashboard/group6/view_edit.ts @@ -15,7 +15,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const kibanaServer = getService('kibanaServer'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects(['dashboard', 'header', 'common', 'visualize', 'timePicker']); + const { dashboard, common, visualize, timePicker } = getPageObjects([ + 'dashboard', + 'common', + 'visualize', + 'timePicker', + ]); const dashboardName = 'dashboard with filter'; const filterBar = getService('filterBar'); const security = getService('security'); @@ -30,8 +35,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); }); after(async () => { @@ -40,47 +45,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('existing dashboard opens in last used view mode', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); - expect(await PageObjects.dashboard.getIsInViewMode()).to.equal(true); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard(dashboardName); + expect(await dashboard.getIsInViewMode()).to.equal(true); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); - expect(await PageObjects.dashboard.getIsInViewMode()).to.equal(false); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard(dashboardName); + expect(await dashboard.getIsInViewMode()).to.equal(false); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.loadSavedDashboard('few panels'); - expect(await PageObjects.dashboard.getIsInViewMode()).to.equal(false); + await dashboard.gotoDashboardLandingPage(); + await dashboard.loadSavedDashboard('few panels'); + expect(await dashboard.getIsInViewMode()).to.equal(false); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); }); it('create new dashboard opens in edit mode', async function () { - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - const isInViewMode = await PageObjects.dashboard.getIsInViewMode(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + const isInViewMode = await dashboard.getIsInViewMode(); expect(isInViewMode).to.be(false); }); describe('save as new', () => { it('keeps duplicated dashboard in edit mode', async () => { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - await PageObjects.dashboard.duplicateDashboard('edit'); - const isViewMode = await PageObjects.dashboard.getIsInViewMode(); + await dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.duplicateDashboard('edit'); + const isViewMode = await dashboard.getIsInViewMode(); expect(isViewMode).to.equal(false); }); }); describe('save', function () { it('keeps dashboard in edit mode', async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true, saveAsNew: false, }); - const isViewMode = await PageObjects.dashboard.getIsInViewMode(); + const isViewMode = await dashboard.getIsInViewMode(); expect(isViewMode).to.equal(false); }); }); @@ -88,26 +93,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('shows lose changes warning', function () { describe('and loses changes on confirmation', function () { beforeEach(async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.gotoDashboardEditMode(dashboardName); }); it('when time changed is stored with dashboard', async function () { - await PageObjects.timePicker.setDefaultDataRange(); + await timePicker.setDefaultDataRange(); - const originalTime = await PageObjects.timePicker.getTimeConfig(); + const originalTime = await timePicker.getTimeConfig(); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true, saveAsNew: false, }); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 19, 2013 @ 06:31:44.000', 'Sep 19, 2013 @ 06:31:44.000' ); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); - const newTime = await PageObjects.timePicker.getTimeConfig(); + const newTime = await timePicker.getTimeConfig(); expect(newTime.start).to.equal(originalTime.start); expect(newTime.end).to.equal(originalTime.end); @@ -118,7 +123,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.setQuery(`${originalQuery}and extra stuff`); await queryBar.submitQuery(); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); const query = await queryBar.getQueryString(); expect(query).to.equal(originalQuery); @@ -127,8 +132,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('when a filter is deleted', async function () { // This may seem like a pointless line but there was a bug that only arose when the dashboard // was loaded initially - await PageObjects.dashboard.loadSavedDashboard(dashboardName); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.loadSavedDashboard(dashboardName); + await dashboard.switchToEditMode(); let hasFilter = await filterBar.hasFilter('animal', 'dog'); expect(hasFilter).to.be(true); @@ -138,69 +143,69 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasFilter = await filterBar.hasFilter('animal', 'dog'); expect(hasFilter).to.be(false); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); hasFilter = await filterBar.hasFilter('animal', 'dog'); expect(hasFilter).to.be(true); }); it('when a new vis is added', async function () { - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visualize.saveVisualizationExpectSuccess('new viz panel', { + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + await visualize.saveVisualizationExpectSuccess('new viz panel', { saveAsNew: false, redirectToOrigin: true, }); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); // for this sleep see https://github.com/elastic/kibana/issues/22299 - await PageObjects.common.sleep(500); + await common.sleep(500); // confirm lose changes - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(originalPanelCount); }); it('when an existing vis is added', async function () { - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); + const originalPanelCount = await dashboard.getPanelCount(); await dashboardAddPanel.addVisualization('new viz panel'); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(originalPanelCount); }); }); describe('and preserves edits on cancel', function () { it('when time changed is stored with dashboard', async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - await PageObjects.timePicker.setAbsoluteRange( + await dashboard.gotoDashboardEditMode(dashboardName); + await timePicker.setAbsoluteRange( 'Sep 19, 2013 @ 06:31:44.000', 'Sep 19, 2013 @ 06:31:44.000' ); - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); - await PageObjects.dashboard.switchToEditMode(); - await PageObjects.timePicker.setAbsoluteRange( + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await dashboard.switchToEditMode(); + await timePicker.setAbsoluteRange( 'Sep 19, 2015 @ 06:31:44.000', 'Sep 19, 2015 @ 06:31:44.000' ); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); - await PageObjects.common.clickCancelOnModal(); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await common.clickCancelOnModal(); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false, storeTimeWithDashboard: true, }); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal('Sep 19, 2015 @ 06:31:44.000'); expect(time.end).to.equal('Sep 19, 2015 @ 06:31:44.000'); @@ -210,26 +215,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('and preserves edits on cancel', function () { it('when time changed is stored with dashboard', async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - await PageObjects.timePicker.setDefaultDataRange(); - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); - await PageObjects.timePicker.setAbsoluteRange( + await dashboard.gotoDashboardEditMode(dashboardName); + await timePicker.setDefaultDataRange(); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await timePicker.setAbsoluteRange( 'Sep 19, 2013 @ 06:31:44.000', 'Sep 19, 2013 @ 06:31:44.000' ); - const newTime = await PageObjects.timePicker.getTimeConfig(); + const newTime = await timePicker.getTimeConfig(); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); - await PageObjects.common.clickCancelOnModal(); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await common.clickCancelOnModal(); + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: true, saveAsNew: false, }); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal(newTime.start); expect(time.end).to.equal(newTime.end); @@ -238,32 +243,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Does not show lose changes warning', function () { it('when time changed is not stored with dashboard', async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.saveDashboard(dashboardName, { storeTimeWithDashboard: false, saveAsNew: false, }); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Oct 19, 2014 @ 06:31:44.000', 'Dec 19, 2014 @ 06:31:44.000' ); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); - await PageObjects.common.expectConfirmModalOpenState(false); + await common.expectConfirmModalOpenState(false); }); // See https://github.com/elastic/kibana/issues/10110 - this is intentional. it('when the query is edited but not applied', async function () { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.gotoDashboardEditMode(dashboardName); const originalQuery = await queryBar.getQueryString(); await queryBar.setQuery(`${originalQuery}extra stuff`); - await PageObjects.dashboard.clickCancelOutOfEditMode(false); + await dashboard.clickCancelOutOfEditMode(false); - await PageObjects.common.expectConfirmModalOpenState(false); + await common.expectConfirmModalOpenState(false); - await PageObjects.dashboard.loadSavedDashboard(dashboardName); + await dashboard.loadSavedDashboard(dashboardName); const query = await queryBar.getQueryString(); expect(query).to.equal(originalQuery); }); diff --git a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts index 5b279eff7833bf..1639c273dffbb0 100644 --- a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts +++ b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts @@ -11,7 +11,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'discover', 'header']); + const { common, dashboard, header } = getPageObjects(['common', 'dashboard', 'header']); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const kibanaServer = getService('kibanaServer'); @@ -30,9 +30,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await dashboard.switchToEditMode(); }); it('should create an image embeddable', async () => { @@ -40,13 +40,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickAddNewPanelFromUIActionLink('Image'); await testSubjects.exists(`createImageEmbeddableFlyout`); - await PageObjects.common.setFileInputPath(require.resolve('./elastic_logo.png')); + await common.setFileInputPath(require.resolve('./elastic_logo.png')); await testSubjects.clickWhenNotDisabled(`imageEmbeddableEditorSave`); // check that it is added on the dashboard - expect(await PageObjects.dashboard.getSharedItemsCount()).to.be('1'); - await PageObjects.dashboard.waitForRenderComplete(); - const panel = (await PageObjects.dashboard.getDashboardPanels())[0]; + expect(await dashboard.getSharedItemsCount()).to.be('1'); + await dashboard.waitForRenderComplete(); + const panel = (await dashboard.getDashboardPanels())[0]; const img = await panel.findByCssSelector('img.euiImage'); const imgSrc = await img.getAttribute('src'); expect(imgSrc).to.contain(`files/defaultImage`); @@ -66,21 +66,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardDrilldownsManage.saveChanges(); await dashboardDrilldownsManage.closeFlyout(); - expect(await PageObjects.dashboard.getPanelDrilldownCount()).to.be(1); + expect(await dashboardDrilldownPanelActions.getPanelDrilldownCount()).to.be(1); - const panel = (await PageObjects.dashboard.getDashboardPanels())[0]; + const panel = (await dashboard.getDashboardPanels())[0]; const img = await panel.findByCssSelector('img.euiImage'); - const oldDashboardId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const oldDashboardId = await dashboard.getDashboardIdFromCurrentUrl(); await img.click(); await retry.waitFor('navigate to different dashboard', async () => { - const newDashboardId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const newDashboardId = await dashboard.getDashboardIdFromCurrentUrl(); return typeof newDashboardId === 'string' && oldDashboardId !== newDashboardId; }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }); }); } diff --git a/test/functional/apps/dashboard_elements/input_control_vis/chained_controls.ts b/test/functional/apps/dashboard_elements/input_control_vis/chained_controls.ts index 1339b22af0e07b..6e26a11e29c4a3 100644 --- a/test/functional/apps/dashboard_elements/input_control_vis/chained_controls.ts +++ b/test/functional/apps/dashboard_elements/input_control_vis/chained_controls.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); - const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']); + const { common, visualize, visEditor } = getPageObjects(['common', 'visualize', 'visEditor']); const testSubjects = getService('testSubjects'); const find = getService('find'); const comboBox = getService('comboBox'); @@ -22,9 +22,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { this.tags('includeFirefox'); before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization('chained input control', { + await visualize.initTests(); + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization('chained input control', { navigateToVisualize: false, }); await testSubjects.waitForEnabled('addFilter', 10000); @@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should create a seperate filter pill for parent control and child control', async () => { await comboBox.set('listControlSelect1', '14.61.182.136'); - await PageObjects.visEditor.inputControlSubmit(); + await visEditor.inputControlSubmit(); const hasParentControlFilter = await filterBar.hasFilter('geo.src', 'BR'); expect(hasParentControlFilter).to.equal(true); @@ -61,7 +61,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should clear child control dropdown when parent control value is removed', async () => { await comboBox.clear('listControlSelect0'); - await PageObjects.common.sleep(500); // give time for filter to be removed and event handlers to fire + await common.sleep(500); // give time for filter to be removed and event handlers to fire const childControlInput = await find.byCssSelector('[data-test-subj="inputControl1"] input'); const isDisabled = await childControlInput.getAttribute('disabled'); @@ -72,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should clear child control dropdown when parent control filter pill removed', async () => { await filterBar.removeFilter('geo.src'); - await PageObjects.common.sleep(500); // give time for filter to be removed and event handlers to fire + await common.sleep(500); // give time for filter to be removed and event handlers to fire const hasValue = await comboBox.doesComboBoxHaveSelectedOptions('listControlSelect0'); expect(hasValue).to.equal(false); diff --git a/test/functional/apps/dashboard_elements/input_control_vis/dynamic_options.ts b/test/functional/apps/dashboard_elements/input_control_vis/dynamic_options.ts index b963118933df1e..1ceec60dc06886 100644 --- a/test/functional/apps/dashboard_elements/input_control_vis/dynamic_options.ts +++ b/test/functional/apps/dashboard_elements/input_control_vis/dynamic_options.ts @@ -12,18 +12,23 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']); + const { common, visualize, visEditor, header } = getPageObjects([ + 'common', + 'visualize', + 'visEditor', + 'header', + ]); const comboBox = getService('comboBox'); describe('dynamic options', () => { before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); }); describe('without chained controls', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization('dynamic options input control', { + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization('dynamic options input control', { navigateToVisualize: false, }); }); @@ -33,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(initialOptions.trim().split('\n').join()).to.equal('BD,BR,CN,ID,IN,JP,NG,PK,RU'); await comboBox.filterOptionsList('listControlSelect0', 'R'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const updatedOptions = await comboBox.getOptionsList('listControlSelect0'); expect(updatedOptions.trim().split('\n').join()).to.equal('AR,BR,FR,GR,IR,KR,RO,RU,RW'); @@ -41,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should not fetch new options when non-string is filtered', async () => { await comboBox.set('fieldSelect-0', 'clientip'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickGo(); const initialOptions = await comboBox.getOptionsList('listControlSelect0'); expect(initialOptions.trim().split('\n').join()).to.equal( @@ -49,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await comboBox.filterOptionsList('listControlSelect0', '17'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const updatedOptions = await comboBox.getOptionsList('listControlSelect0'); expect(updatedOptions.trim().split('\n').join()).to.equal( @@ -60,11 +65,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('with chained controls', () => { before(async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization( - 'chained input control with dynamic options', - { navigateToVisualize: false } - ); + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization('chained input control with dynamic options', { + navigateToVisualize: false, + }); await comboBox.set('listControlSelect0', 'win 7'); }); @@ -73,7 +77,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(initialOptions.trim().split('\n').join()).to.equal('BD,BR,CN,ID,IN,JP,MX,NG,PK'); await comboBox.filterOptionsList('listControlSelect1', 'R'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const updatedOptions = await comboBox.getOptionsList('listControlSelect1'); expect(updatedOptions.trim().split('\n').join()).to.equal('AR,BR,FR,GR,IR,KR,RO,RS,RU'); diff --git a/test/functional/apps/dashboard_elements/input_control_vis/input_control_options.ts b/test/functional/apps/dashboard_elements/input_control_vis/input_control_options.ts index c33c356ecc31a8..cccf19de4070a6 100644 --- a/test/functional/apps/dashboard_elements/input_control_vis/input_control_options.ts +++ b/test/functional/apps/dashboard_elements/input_control_vis/input_control_options.ts @@ -13,7 +13,12 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); - const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']); + const { common, visualize, visEditor, timePicker } = getPageObjects([ + 'common', + 'visualize', + 'visEditor', + 'timePicker', + ]); const testSubjects = getService('testSubjects'); const inspector = getService('inspector'); const find = getService('find'); @@ -22,9 +27,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('input control options', () => { before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization('input control options', { + await visualize.initTests(); + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization('input control options', { navigateToVisualize: false, }); }); @@ -68,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add filter pill when submit button is clicked', async () => { - await PageObjects.visEditor.inputControlSubmit(); + await visEditor.inputControlSubmit(); const hasFilter = await filterBar.hasFilter(FIELD_NAME, 'ios'); expect(hasFilter).to.equal(true); @@ -77,8 +82,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should replace existing filter pill(s) when new item is selected', async () => { await comboBox.clear('listControlSelect0'); await comboBox.set('listControlSelect0', 'osx'); - await PageObjects.visEditor.inputControlSubmit(); - await PageObjects.common.sleep(1000); + await visEditor.inputControlSubmit(); + await common.sleep(1000); const hasOldFilter = await filterBar.hasFilter(FIELD_NAME, 'ios'); const hasNewFilter = await filterBar.hasFilter(FIELD_NAME, 'osx'); @@ -88,7 +93,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should clear dropdown when filter pill removed', async () => { await filterBar.removeFilter(FIELD_NAME); - await PageObjects.common.sleep(500); // give time for filter to be removed and event handlers to fire + await common.sleep(500); // give time for filter to be removed and event handlers to fire const hasValue = await comboBox.doesComboBoxHaveSelectedOptions('listControlSelect0'); expect(hasValue).to.equal(false); @@ -96,11 +101,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should clear form when Clear button is clicked but not remove filter pill', async () => { await comboBox.set('listControlSelect0', 'ios'); - await PageObjects.visEditor.inputControlSubmit(); + await visEditor.inputControlSubmit(); const hasFilterBeforeClearBtnClicked = await filterBar.hasFilter(FIELD_NAME, 'ios'); expect(hasFilterBeforeClearBtnClicked).to.equal(true); - await PageObjects.visEditor.inputControlClear(); + await visEditor.inputControlClear(); const hasValue = await comboBox.doesComboBoxHaveSelectedOptions('listControlSelect0'); expect(hasValue).to.equal(false); @@ -109,7 +114,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should remove filter pill when cleared form is submitted', async () => { - await PageObjects.visEditor.inputControlSubmit(); + await visEditor.inputControlSubmit(); const hasFilter = await filterBar.hasFilter(FIELD_NAME, 'ios'); expect(hasFilter).to.equal(false); }); @@ -117,17 +122,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('updateFiltersOnChange is true', () => { before(async () => { - await PageObjects.visEditor.clickVisEditorTab('options'); - await PageObjects.visEditor.checkSwitch('inputControlEditorUpdateFiltersOnChangeCheckbox'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickVisEditorTab('options'); + await visEditor.checkSwitch('inputControlEditorUpdateFiltersOnChangeCheckbox'); + await visEditor.clickGo(); }); after(async () => { - await PageObjects.visEditor.clickVisEditorTab('options'); - await PageObjects.visEditor.uncheckSwitch( - 'inputControlEditorUpdateFiltersOnChangeCheckbox' - ); - await PageObjects.visEditor.clickGo(); + await visEditor.clickVisEditorTab('options'); + await visEditor.uncheckSwitch('inputControlEditorUpdateFiltersOnChangeCheckbox'); + await visEditor.clickGo(); }); it('should not display staging control buttons', async () => { @@ -152,9 +155,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('useTimeFilter', () => { it('should use global time filter when getting terms', async () => { - await PageObjects.visEditor.clickVisEditorTab('options'); + await visEditor.clickVisEditorTab('options'); await testSubjects.setCheckbox('inputControlEditorUseTimeFilterCheckbox', 'check'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickGo(); // Expect control to be disabled because no terms could be gathered with time filter applied const input = await find.byCssSelector('[data-test-subj="inputControl0"] input'); @@ -163,7 +166,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should re-create control when global time filter is updated', async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Jan 1, 2015 @ 00:00:00.000', 'Jan 1, 2016 @ 00:00:00.000' ); @@ -175,7 +178,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); }); } diff --git a/test/functional/apps/dashboard_elements/links/index.ts b/test/functional/apps/dashboard_elements/links/index.ts index 5882a20b2fe4d4..423dec5591465b 100644 --- a/test/functional/apps/dashboard_elements/links/index.ts +++ b/test/functional/apps/dashboard_elements/links/index.ts @@ -14,7 +14,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const { dashboard } = getPageObjects(['dashboardControls', 'dashboard']); + const { dashboard } = getPageObjects(['dashboard']); async function setup() { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/dashboard/current/data'); diff --git a/test/functional/apps/dashboard_elements/links/links_create_edit.ts b/test/functional/apps/dashboard_elements/links/links_create_edit.ts index 688d5cf58b77f7..df930b42c20017 100644 --- a/test/functional/apps/dashboard_elements/links/links_create_edit.ts +++ b/test/functional/apps/dashboard_elements/links/links_create_edit.ts @@ -77,7 +77,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await common.waitForSaveModalToClose(); await testSubjects.exists('addObjectToDashboardSuccess'); await testSubjects.existOrFail('links--component'); - await testSubjects.existOrFail('embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION'); + await dashboardPanelActions.expectLinkedToLibrary(LINKS_PANEL_NAME, false); expect(await dashboardLinks.getNumberOfLinksInPanel()).to.equal(4); await dashboard.clickDiscardChanges(); @@ -106,9 +106,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardLinks.clickPanelEditorSaveButton(); await testSubjects.exists('addObjectToDashboardSuccess'); await testSubjects.existOrFail('links--component'); - await testSubjects.missingOrFail( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' - ); + await dashboardPanelActions.expectNotLinkedToLibrary(); expect(await dashboardLinks.getNumberOfLinksInPanel()).to.equal(4); }); @@ -120,13 +118,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboard.waitForRenderComplete(); await dashboardPanelActions.saveToLibrary('Some more links'); - await testSubjects.existOrFail('addPanelToLibrarySuccess'); }); it('can unlink a panel from the library', async () => { - const panel = await testSubjects.find('embeddablePanelHeading-Somemorelinks'); - await dashboardPanelActions.unlinkFromLibrary(panel); - await testSubjects.existOrFail('unlinkPanelSuccess'); + await dashboardPanelActions.unlinkFromLibrary('Some more links'); }); after(async () => { diff --git a/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts b/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts index a9169b3ff21bdc..18402669293f7c 100644 --- a/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts +++ b/test/functional/apps/dashboard_elements/markdown/_markdown_vis.ts @@ -12,7 +12,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'header']); + const { visualize, visEditor, visChart, header } = getPageObjects([ + 'visualize', + 'visEditor', + 'visChart', + 'header', + ]); const find = getService('find'); const inspector = getService('inspector'); const markdown = ` @@ -23,11 +28,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('markdown app in visualize app', () => { before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickMarkdownWidget(); - await PageObjects.visEditor.setMarkdownTxt(markdown); - await PageObjects.visEditor.clickGo(); + await visualize.initTests(); + await visualize.navigateToNewVisualization(); + await visualize.clickMarkdownWidget(); + await visEditor.setMarkdownTxt(markdown); + await visEditor.clickGo(); }); describe('markdown vis', () => { @@ -36,12 +41,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render markdown as html', async function () { - const h1Txt = await PageObjects.visChart.getMarkdownBodyDescendentText('h1'); + const h1Txt = await visChart.getMarkdownBodyDescendentText('h1'); expect(h1Txt).to.equal('Heading 1'); }); it('should not render html in markdown as html', async function () { - const actual = await PageObjects.visChart.getMarkdownText(); + const actual = await visChart.getMarkdownText(); expect(actual).to.equal( 'Heading 1\n

Inline HTML that should not be rendered as html

' @@ -50,17 +55,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should auto apply changes if auto mode is turned on', async function () { const markdown2 = '## Heading 2'; - await PageObjects.visEditor.toggleAutoMode(); - await PageObjects.visEditor.setMarkdownTxt(markdown2); - await PageObjects.header.waitUntilLoadingHasFinished(); - const h1Txt = await PageObjects.visChart.getMarkdownBodyDescendentText('h2'); + await visEditor.toggleAutoMode(); + await visEditor.setMarkdownTxt(markdown2); + await header.waitUntilLoadingHasFinished(); + const h1Txt = await visChart.getMarkdownBodyDescendentText('h2'); expect(h1Txt).to.equal('Heading 2'); }); it('should resize the editor', async function () { const editorSidebar = await find.byCssSelector('.visEditor__collapsibleSidebar'); const initialSize = await editorSidebar.getSize(); - await PageObjects.visEditor.sizeUpEditor(); + await visEditor.sizeUpEditor(); const afterSize = await editorSidebar.getSize(); expect(afterSize.width).to.be.greaterThan(initialSize.width); }); diff --git a/test/functional/apps/discover/ccs_compatibility/_data_view_editor.ts b/test/functional/apps/discover/ccs_compatibility/_data_view_editor.ts index e87d9149a28efc..8c02a437980d1f 100644 --- a/test/functional/apps/discover/ccs_compatibility/_data_view_editor.ts +++ b/test/functional/apps/discover/ccs_compatibility/_data_view_editor.ts @@ -15,13 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const security = getService('security'); const config = getService('config'); - const PageObjects = getPageObjects([ - 'common', - 'discover', - 'header', - 'timePicker', - 'unifiedSearch', - ]); + const { common, timePicker } = getPageObjects(['common', 'timePicker']); const defaultIndexPatternString = config.get('esTestCluster.ccs') ? 'ftr-remote:logstash-*' : 'logstash-*'; @@ -47,8 +41,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['saved-search', 'index-pattern'] }); await kibanaServer.importExport.load(kbnDirectory); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async () => { diff --git a/test/functional/apps/discover/ccs_compatibility/_saved_queries.ts b/test/functional/apps/discover/ccs_compatibility/_saved_queries.ts index d7bf3de1d40176..4c02ea7cdf21dd 100644 --- a/test/functional/apps/discover/ccs_compatibility/_saved_queries.ts +++ b/test/functional/apps/discover/ccs_compatibility/_saved_queries.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const log = getService('log'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const browser = getService('browser'); const filterBar = getService('filterBar'); const queryBar = getService('queryBar'); @@ -54,24 +54,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'query'] }); // set up a query with filters and a time filter log.debug('set up a query with filters to save'); - await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('discover'); + await common.setTime({ from, to }); + await common.navigateToApp('discover'); await dataViews.switchToAndValidate(logstashIndexPatternString); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('4,731'); }); await filterBar.addFilter({ field: 'extension.raw', operation: 'is one of', value: ['jpg'] }); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('3,029'); }); await queryBar.setQuery('response:200'); await queryBar.submitQuery(); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('2,792'); }); }; @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace(defaultSettings); log.debug('discover'); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -98,7 +98,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'query'] }); await esNode.unload('test/functional/fixtures/es_archiver/date_nested'); await esNode.unload('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); describe('saved query selection', () => { @@ -117,7 +117,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); expect(await queryBar.getQueryString()).to.eql('response:200'); - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); @@ -129,7 +129,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataViews.switchToAndValidate(logstashIndexPatternString); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('4,731'); }); @@ -164,10 +164,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('reinstates filters and the time filter when a saved query has filters and a time filter included', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); expect(timePickerValues.start).to.eql(from); expect(timePickerValues.end).to.eql(to); @@ -175,12 +175,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('preserves the currently loaded query when the page is reloaded', async () => { await browser.refresh(); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); expect(timePickerValues.start).to.eql(from); expect(timePickerValues.end).to.eql(to); await retry.waitForWithTimeout('the right hit count', 65000, async () => { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); log.debug(`Found hit count is ${hitCount}. Looking for 2,792.`); return hitCount === '2,792'; }); @@ -253,7 +253,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('allows clearing if non default language was remembered in localstorage', async () => { await savedQueryManagementComponent.openSavedQueryManagementComponent(); await queryBar.switchQueryLanguage('lucene'); - await PageObjects.common.navigateToApp('discover'); // makes sure discovered is reloaded without any state in url + await common.navigateToApp('discover'); // makes sure discovered is reloaded without any state in url await savedQueryManagementComponent.openSavedQueryManagementComponent(); await queryBar.expectQueryLanguageOrFail('lucene'); // make sure lucene is remembered after refresh (comes from localstorage) await savedQueryManagementComponent.loadSavedQuery('OkResponse'); diff --git a/test/functional/apps/discover/ccs_compatibility/_search_errors.ts b/test/functional/apps/discover/ccs_compatibility/_search_errors.ts index 34d5601ae8c11f..7045e0e7d1a3b0 100644 --- a/test/functional/apps/discover/ccs_compatibility/_search_errors.ts +++ b/test/functional/apps/discover/ccs_compatibility/_search_errors.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const isCcsTest = config.get('esTestCluster.ccs'); const archiveDirectory = isCcsTest @@ -41,11 +41,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('exception on single shard shows warning and results', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.switchToAndValidate(defaultIndex); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await retry.try(async () => { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('14,004'); }); await filterBar.addDslFilter(` @@ -65,7 +65,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Ensure documents are still returned for the successful shards await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('9,247'); }); @@ -74,11 +74,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('exception on all shards shows error', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.switchToAndValidate(defaultIndex); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await retry.try(async () => { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('14,004'); }); await filterBar.addDslFilter(` diff --git a/test/functional/apps/discover/ccs_compatibility/_timeout_results.ts b/test/functional/apps/discover/ccs_compatibility/_timeout_results.ts index 3f55a407a846a8..3f0ea5a4ab2e4d 100644 --- a/test/functional/apps/discover/ccs_compatibility/_timeout_results.ts +++ b/test/functional/apps/discover/ccs_compatibility/_timeout_results.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const testSubjects = getService('testSubjects'); const toasts = getService('toasts'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common, discover } = getPageObjects(['common', 'discover']); const dataViews = getService('dataViews'); const esArchiver = getService('esArchiver'); @@ -41,7 +41,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('bfetch enabled', () => { it('timeout on single shard shows warning and results with bfetch enabled', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.createFromSearchBar({ name: 'ftr-remote:logstash-*,logstash-*', hasTimeField: false, @@ -86,7 +86,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Ensure documents are still returned for the successful shards await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('14,004'); }); }); @@ -102,7 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('timeout on single shard shows warning and results', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.createFromSearchBar({ name: 'ftr-remote:logstash-*,logstash-*', hasTimeField: false, @@ -147,7 +147,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Ensure documents are still returned for the successful shards await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be('14,004'); }); }); diff --git a/test/functional/apps/discover/classic/_classic_table_doc_navigation.ts b/test/functional/apps/discover/classic/_classic_table_doc_navigation.ts index bad480e12b9633..c56ecc020f2bf7 100644 --- a/test/functional/apps/discover/classic/_classic_table_doc_navigation.ts +++ b/test/functional/apps/discover/classic/_classic_table_doc_navigation.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const docTable = getService('docTable'); const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'context']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const esArchiver = getService('esArchiver'); const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); @@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: 'logstash-*', 'doc_table:legacy': true, @@ -37,9 +37,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await discover.waitForDocTableLoadingComplete(); }); it('should open the doc view of the selected document', async function () { @@ -62,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create an exists filter from the doc view of the selected document', async function () { - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await docTable.toggleRowExpanded(); const detailsRow = await docTable.getDetailsRow(); diff --git a/test/functional/apps/discover/classic/_discover_fields_api.ts b/test/functional/apps/discover/classic/_discover_fields_api.ts index 46dc8e60eb4a7a..e0fe867a25c8b2 100644 --- a/test/functional/apps/discover/classic/_discover_fields_api.ts +++ b/test/functional/apps/discover/classic/_discover_fields_api.ts @@ -15,10 +15,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, settings, unifiedFieldList } = getPageObjects([ 'common', 'discover', - 'header', 'timePicker', 'settings', 'unifiedFieldList', @@ -35,8 +34,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -45,55 +44,55 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should correctly display documents', async function () { log.debug('check if Document title exists in the grid'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); - const rowData = await PageObjects.discover.getDocTableIndex(1); + expect(await discover.getDocHeader()).to.have.string('Document'); + const rowData = await discover.getDocTableIndex(1); log.debug('check the newest doc timestamp in UTC (check diff timezone in last test)'); expect(rowData.startsWith('Sep 22, 2015 @ 23:50:13.253')).to.be.ok(); const expectedHitCount = '14,004'; await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); }); it('adding a column removes a default column', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('_score'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('_score'); - expect(await PageObjects.discover.getDocHeader()).not.to.have.string('Document'); + await unifiedFieldList.clickFieldListItemAdd('_score'); + expect(await discover.getDocHeader()).to.have.string('_score'); + expect(await discover.getDocHeader()).not.to.have.string('Document'); }); it('removing a column adds a default column', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemRemove('_score'); - expect(await PageObjects.discover.getDocHeader()).not.to.have.string('_score'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + await unifiedFieldList.clickFieldListItemRemove('_score'); + expect(await discover.getDocHeader()).not.to.have.string('_score'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); it('displays _source viewer in doc viewer', async function () { - await PageObjects.discover.clickDocTableRowToggle(0); - await PageObjects.discover.isShowingDocViewer(); - await PageObjects.discover.clickDocViewerTab('doc_view_source'); - await PageObjects.discover.expectSourceViewerToExist(); + await discover.clickDocTableRowToggle(0); + await discover.isShowingDocViewer(); + await discover.clickDocViewerTab('doc_view_source'); + await discover.expectSourceViewerToExist(); }); it('switches to _source column when fields API is no longer used', async function () { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); - expect(await PageObjects.discover.getDocHeader()).to.have.string('_source'); + expect(await discover.getDocHeader()).to.have.string('_source'); }); it('switches to Document column when fields API is used', async function () { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); }); } diff --git a/test/functional/apps/discover/classic/_doc_table.ts b/test/functional/apps/discover/classic/_doc_table.ts index 4f880a5b86c507..5c765a6b2ef216 100644 --- a/test/functional/apps/discover/classic/_doc_table.ts +++ b/test/functional/apps/discover/classic/_doc_table.ts @@ -19,7 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const docTable = getService('docTable'); const queryBar = getService('queryBar'); const find = getService('find'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -44,9 +44,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); log.debug('discover doc table'); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async function () { @@ -57,29 +57,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show records by default', async function () { // with the default range the number of hits is ~14000 - const rows = await PageObjects.discover.getDocTableRows(); + const rows = await discover.getDocTableRows(); expect(rows.length).to.be.greaterThan(0); }); it('should refresh the table content when changing time window', async function () { - const initialRows = await PageObjects.discover.getDocTableRows(); + const initialRows = await discover.getDocTableRows(); const fromTime = 'Sep 20, 2015 @ 23:00:00.000'; const toTime = 'Sep 20, 2015 @ 23:14:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await discover.waitUntilSearchingHasFinished(); - const finalRows = await PageObjects.discover.getDocTableRows(); + const finalRows = await discover.getDocTableRows(); expect(finalRows.length).to.be.below(initialRows.length); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); }); describe('classic table in window 900x700', function () { before(async () => { await browser.setWindowSize(900, 700); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should load more rows when scrolling down the document table', async function () { @@ -97,8 +97,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('classic table in window 600x700', function () { before(async () => { await browser.setWindowSize(600, 700); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should load more rows when scrolling down the document table', async function () { @@ -115,8 +115,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('legacy', function () { before(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); after(async () => { await kibanaServer.uiSettings.replace({}); @@ -124,21 +124,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it(`should load up to ${rowsHardLimit} rows when scrolling at the end of the table`, async function () { const initialRows = await testSubjects.findAll('docTableRow'); // click the Skip to the end of the table - await PageObjects.discover.skipToEndOfDocTable(); + await discover.skipToEndOfDocTable(); // now count the rows const finalRows = await testSubjects.findAll('docTableRow'); expect(finalRows.length).to.be.above(initialRows.length); expect(finalRows.length).to.be(rowsHardLimit); - await PageObjects.discover.backToTop(); + await discover.backToTop(); }); it('should go the end and back to top of the classic table when using the accessible buttons', async function () { // click the Skip to the end of the table - await PageObjects.discover.skipToEndOfDocTable(); + await discover.skipToEndOfDocTable(); // now check the footer text content - const footer = await PageObjects.discover.getDocTableFooter(); + const footer = await discover.getDocTableFooter(); expect(await footer.getVisibleText()).to.have.string(rowsHardLimit); - await PageObjects.discover.backToTop(); + await discover.backToTop(); // check that the skip to end of the table button now has focus const skipButton = await testSubjects.find('discoverSkipTableButton'); const activeElement = await find.activeElement(); @@ -171,7 +171,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show the detail panel actions', async function () { await retry.try(async function () { await docTable.clickRowToggle({ isAnchorRow: false, rowIndex: rowToInspect - 1 }); - // const detailsEl = await PageObjects.discover.getDocTableRowDetails(rowToInspect); + // const detailsEl = await discover.getDocTableRowDetails(rowToInspect); const [surroundingActionEl, singleActionEl] = await docTable.getRowActions({ isAnchorRow: false, rowIndex: rowToInspect - 1, @@ -184,7 +184,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should not close the detail panel actions when data is re-requested', async function () { await retry.try(async function () { - const nrOfFetches = await PageObjects.discover.getNrOfFetches(); + const nrOfFetches = await discover.getNrOfFetches(); await docTable.clickRowToggle({ isAnchorRow: false, rowIndex: rowToInspect - 1 }); const detailsEl = await docTable.getDetailsRows(); const defaultMessageEl = await detailsEl[0].findByTestSubject( @@ -192,7 +192,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); expect(defaultMessageEl).to.be.ok(); await queryBar.submitQuery(); - const nrOfFetchesResubmit = await PageObjects.discover.getNrOfFetches(); + const nrOfFetchesResubmit = await discover.getNrOfFetches(); expect(nrOfFetchesResubmit).to.be.above(nrOfFetches); const defaultMessageElResubmit = await detailsEl[0].findByTestSubject( 'docViewerRowDetailsTitle' @@ -203,7 +203,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show allow toggling columns from the expanded document', async function () { - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); await retry.try(async function () { await docTable.clickRowToggle({ isAnchorRow: false, rowIndex: rowToInspect - 1 }); @@ -237,23 +237,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; afterEach(async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clickFieldListItemRemove(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove(column); + await header.waitUntilLoadingHasFinished(); } }); it('should add more columns to the table', async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clearFieldSearchInput(); - await PageObjects.unifiedFieldList.findFieldByName(column); - await PageObjects.unifiedFieldList.waitUntilFieldlistHasCountOfFields( - expectedFieldLength[column] - ); + await unifiedFieldList.clearFieldSearchInput(); + await unifiedFieldList.findFieldByName(column); + await unifiedFieldList.waitUntilFieldlistHasCountOfFields(expectedFieldLength[column]); await retry.waitFor('field to appear', async function () { return await testSubjects.exists(`field-${column}`); }); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd(column); + await header.waitUntilLoadingHasFinished(); // test the header now const docHeader = await find.byCssSelector('thead > tr:nth-child(1)'); const docHeaderText = await docHeader.getVisibleText(); @@ -263,17 +261,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should remove columns from the table', async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clearFieldSearchInput(); - await PageObjects.unifiedFieldList.findFieldByName(column); - await PageObjects.unifiedFieldList.waitUntilFieldlistHasCountOfFields( - expectedFieldLength[column] - ); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clearFieldSearchInput(); + await unifiedFieldList.findFieldByName(column); + await unifiedFieldList.waitUntilFieldlistHasCountOfFields(expectedFieldLength[column]); + await unifiedFieldList.clickFieldListItemAdd(column); + await header.waitUntilLoadingHasFinished(); } // remove the second column - await PageObjects.unifiedFieldList.clickFieldListItemRemove(extraColumns[1]); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove(extraColumns[1]); + await header.waitUntilLoadingHasFinished(); // test that the second column is no longer there const docHeader = await find.byCssSelector('thead > tr:nth-child(1)'); expect(await docHeader.getVisibleText()).to.not.have.string(extraColumns[1]); @@ -281,9 +277,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should make the document table scrollable', async function () { - await PageObjects.unifiedFieldList.clearFieldSearchInput(); + await unifiedFieldList.clearFieldSearchInput(); const dscTableWrapper = await find.byCssSelector('.kbnDocTableWrapper'); - const fieldNames = await PageObjects.unifiedFieldList.getAllFieldNames(); + const fieldNames = await unifiedFieldList.getAllFieldNames(); const clientHeight = await dscTableWrapper.getAttribute('clientHeight'); let fieldCounter = 0; const checkScrollable = async () => { @@ -293,7 +289,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return Number(scrollWidth) > Number(clientWidth); }; const addColumn = async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd(fieldNames[fieldCounter++]); + await unifiedFieldList.clickFieldListItemAdd(fieldNames[fieldCounter++]); }; await addColumn(); diff --git a/test/functional/apps/discover/classic/_doc_table_newline.ts b/test/functional/apps/discover/classic/_doc_table_newline.ts index d18c007b845f3d..3c2b426a2dbe42 100644 --- a/test/functional/apps/discover/classic/_doc_table_newline.ts +++ b/test/functional/apps/discover/classic/_doc_table_newline.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'unifiedFieldList']); + const { common, unifiedFieldList } = getPageObjects(['common', 'unifiedFieldList']); const find = getService('find'); const log = getService('log'); const retry = getService('retry'); @@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'newline-test', 'doc_table:legacy': true, }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -40,7 +40,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should break text on newlines', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemToggle('message'); + await unifiedFieldList.clickFieldListItemToggle('message'); const dscTableRows = await find.allByCssSelector('.kbnDocTable__row'); await retry.waitFor('height of multi-line content > single-line content', async () => { @@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const heightWithNewline = await dscTableRows[1].getAttribute('clientHeight'); log.debug(`Without newlines: ${heightWithoutNewline}, With newlines: ${heightWithNewline}`); - await PageObjects.common.sleep(10000); + await common.sleep(10000); return Number(heightWithNewline) > Number(heightWithoutNewline); }); }); diff --git a/test/functional/apps/discover/classic/_esql_grid.ts b/test/functional/apps/discover/classic/_esql_grid.ts index f49c32bada69f7..94dcabdba4efcd 100644 --- a/test/functional/apps/discover/classic/_esql_grid.ts +++ b/test/functional/apps/discover/classic/_esql_grid.ts @@ -17,13 +17,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects([ + const { common, discover, dashboard, header, timePicker } = getPageObjects([ 'common', 'discover', 'dashboard', 'header', 'timePicker', - 'unifiedFieldList', ]); const defaultSettings = { @@ -37,8 +36,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -50,16 +49,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should render esql view correctly', async function () { const savedSearchESQL = 'testESQLWithLegacySetting'; - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('docTableHeader'); await testSubjects.missingOrFail('euiDataGridBody'); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('docTableHeader'); await testSubjects.existOrFail('euiDataGridBody'); @@ -68,14 +67,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('docViewerFlyout'); - await PageObjects.discover.saveSearch(savedSearchESQL); + await discover.saveSearch(savedSearchESQL); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(savedSearchESQL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('docTableHeader'); await testSubjects.existOrFail('euiDataGridBody'); @@ -88,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardAddPanel.addSavedSearch('A Saved Search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('docTableHeader'); await testSubjects.missingOrFail('euiDataGridBody'); }); diff --git a/test/functional/apps/discover/classic/_field_data.ts b/test/functional/apps/discover/classic/_field_data.ts index bce589ee7d2936..2ebd49bb24ae2b 100644 --- a/test/functional/apps/discover/classic/_field_data.ts +++ b/test/functional/apps/discover/classic/_field_data.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'header', 'discover', 'visualize', 'timePicker']); + const { common, timePicker } = getPageObjects(['common', 'timePicker']); const find = getService('find'); const testSubjects = getService('testSubjects'); @@ -30,8 +30,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'discover:searchFieldsFromSource': true, 'doc_table:legacy': true, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async function () { @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // we don't technically need this sleep here because the tryForTime will retry and the // results will match on the 2nd or 3rd attempt, but that debug output is huge in this // case and it can be avoided with just a few seconds sleep. - await PageObjects.common.sleep(2000); + await common.sleep(2000); await retry.try(async function tryingForTime() { const row = await find.byCssSelector(`tr.kbnDocTable__row:nth-child(1)`); const rowData = await row.getVisibleText(); diff --git a/test/functional/apps/discover/classic/_field_data_with_fields_api.ts b/test/functional/apps/discover/classic/_field_data_with_fields_api.ts index 4549d57eb3b761..4932ba3e24348f 100644 --- a/test/functional/apps/discover/classic/_field_data_with_fields_api.ts +++ b/test/functional/apps/discover/classic/_field_data_with_fields_api.ts @@ -14,7 +14,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'header', 'discover', 'visualize', 'timePicker']); + const { common, timePicker } = getPageObjects(['common', 'timePicker']); const find = getService('find'); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); @@ -29,8 +29,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'discover:searchFieldsFromSource': false, 'doc_table:legacy': true, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async function () { @@ -44,7 +44,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // we don't technically need this sleep here because the tryForTime will retry and the // results will match on the 2nd or 3rd attempt, but that debug output is huge in this // case and it can be avoided with just a few seconds sleep. - await PageObjects.common.sleep(2000); + await common.sleep(2000); await retry.try(async function tryingForTime() { const row = await find.byCssSelector(`tr.kbnDocTable__row:nth-child(1)`); const rowData = await row.getVisibleText(); diff --git a/test/functional/apps/discover/classic/_hide_announcements.ts b/test/functional/apps/discover/classic/_hide_announcements.ts index 2c84a45be02057..df7fcbb6281368 100644 --- a/test/functional/apps/discover/classic/_hide_announcements.ts +++ b/test/functional/apps/discover/classic/_hide_announcements.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); @@ -25,8 +25,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', 'doc_table:legacy': true, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -34,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should display try document explorer button', async function () { - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); const tourButtonExists = await testSubjects.exists('tryDocumentExplorerButton'); expect(tourButtonExists).to.be(true); }); diff --git a/test/functional/apps/discover/context_awareness/_data_source_profile.ts b/test/functional/apps/discover/context_awareness/_data_source_profile.ts index f7625025b06713..35e3552afa6555 100644 --- a/test/functional/apps/discover/context_awareness/_data_source_profile.ts +++ b/test/functional/apps/discover/context_awareness/_data_source_profile.ts @@ -12,7 +12,11 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'timePicker', 'discover', 'unifiedFieldList']); + const { common, discover, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'unifiedFieldList', + ]); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); @@ -25,12 +29,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-* | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('log.level'); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(6); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:30:00.000Z'); @@ -44,12 +48,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-logs | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('log.level'); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(3); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:00:00.000Z'); @@ -67,10 +71,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-* | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_source'); @@ -83,10 +87,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-logs | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_source'); @@ -99,13 +103,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { describe('cell renderers', () => { it('should render custom @timestamp but not custom log.level', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('log.level'); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(6); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:30:00.000Z'); @@ -115,13 +119,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render custom @timestamp and custom log.level', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('log.level'); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(3); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:00:00.000Z'); @@ -135,11 +139,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('doc viewer extension', () => { it('should not render custom doc viewer view', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_source'); @@ -148,11 +152,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render custom doc viewer view', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_source'); diff --git a/test/functional/apps/discover/context_awareness/_root_profile.ts b/test/functional/apps/discover/context_awareness/_root_profile.ts index a8338c52a73da3..59856d8ba8c1f7 100644 --- a/test/functional/apps/discover/context_awareness/_root_profile.ts +++ b/test/functional/apps/discover/context_awareness/_root_profile.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'timePicker', 'discover']); + const { common, discover } = getPageObjects(['common', 'discover']); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); @@ -24,10 +24,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-* | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(6); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:30:00.000Z'); @@ -39,11 +39,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { describe('cell renderers', () => { it('should render custom @timestamp', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const timestamps = await testSubjects.findAll('exampleRootProfileTimestamp'); expect(timestamps).to.have.length(6); expect(await timestamps[0].getVisibleText()).to.be('2024-06-10T16:30:00.000Z'); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts b/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts index 9dbdd5fe7355d4..b82bc9241b392d 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_cell_renderers.ts @@ -13,7 +13,12 @@ import type { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'unifiedFieldList', 'header']); + const { common, discover, unifiedFieldList, header } = getPageObjects([ + 'common', + 'discover', + 'unifiedFieldList', + 'header', + ]); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); const dataGrid = getService('dataGrid'); @@ -39,14 +44,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-logs,logstash* | sort @timestamp desc | where `log.level` is not null', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('log.level'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const firstCell = await dataGrid.getCellElementExcludingControlColumns(0, 0); const logLevelBadge = await firstCell.findByTestSubject('*logLevelBadgeCell-'); @@ -63,14 +68,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example* | sort @timestamp desc | where `log.level` is not null', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('log.level'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { const firstCell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -82,19 +87,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { it('should render log.level badge cell', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-logs,logstash*'); await queryBar.setQuery('log.level:*'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('log.level'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); let firstCell: WebElementWrapper; let logLevelBadge: WebElementWrapper; @@ -112,9 +117,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle(); const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { firstCell = await dataGrid.getCellElementExcludingControlColumns(0, 1); @@ -127,19 +132,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it("should not render log.level badge cell if it's not a logs data source", async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-*'); await queryBar.setQuery('log.level:*'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('log.level'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('log.level'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); let firstCell: WebElementWrapper; @@ -153,9 +158,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle(); const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { firstCell = await dataGrid.getCellElementExcludingControlColumns(1, 1); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts index d26bd525a4b9f1..6ed126bad8c7e8 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts @@ -12,7 +12,12 @@ import kbnRison from '@kbn/rison'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'unifiedFieldList', 'header']); + const { common, discover, unifiedFieldList, header } = getPageObjects([ + 'common', + 'discover', + 'unifiedFieldList', + 'header', + ]); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); const queryBar = getService('queryBar'); @@ -27,10 +32,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); async function expectColumns(columns: string[]) { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { - const actualColumns = await PageObjects.discover.getColumnHeaders(); + const actualColumns = await discover.getColumnHeaders(); expect(actualColumns).to.eql(columns); }); } @@ -43,7 +48,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-logs', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); await expectColumns(['@timestamp', 'log.level', 'message']); @@ -61,7 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-*', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); await expectColumns(['@timestamp', 'Document']); @@ -87,13 +92,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-logs', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('log.level'); + await unifiedFieldList.clickFieldListItemRemove('message'); await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); @@ -118,7 +123,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-logs', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); @@ -127,11 +132,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { it('should render default columns and row height', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-logs'); await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); @@ -142,11 +147,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render default columns and row height when switching data views', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-*'); await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); @@ -164,15 +169,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should reset default columns and row height when clicking "New"', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('log.level'); + await unifiedFieldList.clickFieldListItemRemove('message'); await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); @@ -191,11 +196,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ defaultColumns: ['bad_column', 'data_stream.type', 'message'], }); - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataViews.switchToAndValidate('my-example-logs'); await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); }); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_doc_viewer.ts b/test/functional/apps/discover/context_awareness/extensions/_get_doc_viewer.ts index 411e293eb8c25c..2bc410f00ac274 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_doc_viewer.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_doc_viewer.ts @@ -11,7 +11,7 @@ import kbnRison from '@kbn/rison'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'header']); + const { common, discover, header } = getPageObjects(['common', 'discover', 'header']); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); @@ -24,10 +24,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-logs | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_logs_overview'); @@ -40,10 +40,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-metrics | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.missingOrFail('docViewerTab-doc_view_logs_overview'); @@ -52,11 +52,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { it('should render logs overview tab for logs data source', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_logs_overview'); @@ -66,9 +66,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check Surrounding docs page const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickRowToggle({ isAnchorRow: true }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); @@ -79,9 +79,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check Single doc page const [singleDocActionEl] = await dataGrid.getRowActions(); await singleDocActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.existOrFail('docViewerTab-doc_view_logs_overview'); @@ -90,11 +90,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not render logs overview tab for non-logs data source', async () => { - await PageObjects.common.navigateToActualUrl('discover', undefined, { + await common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-metrics'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.missingOrFail('docViewerTab-doc_view_logs_overview'); @@ -102,9 +102,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check Surrounding docs page const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickRowToggle({ isAnchorRow: true }); await testSubjects.existOrFail('docViewerTab-doc_view_table'); @@ -113,9 +113,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check Single doc page const [singleDocActionEl] = await dataGrid.getRowActions(); await singleDocActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('docViewerTab-doc_view_table'); await testSubjects.missingOrFail('docViewerTab-doc_view_logs_overview'); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_row_additional_leading_controls.ts b/test/functional/apps/discover/context_awareness/extensions/_get_row_additional_leading_controls.ts index e9ff182beed570..b56a67fef2c9da 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_row_additional_leading_controls.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_row_additional_leading_controls.ts @@ -11,7 +11,7 @@ import kbnRison from '@kbn/rison'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'header']); + const { common, discover, header } = getPageObjects(['common', 'discover', 'header']); const testSubjects = getService('testSubjects'); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); @@ -24,10 +24,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-logs | sort @timestamp desc' }, }); - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { hash: `/?_a=${state}`, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.existOrFail('unifiedDataTable_additionalRowControl_menuControl'); }); @@ -37,10 +37,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example-metrics | sort @timestamp desc' }, }); - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { hash: `/?_a=${state}`, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.missingOrFail('unifiedDataTable_additionalRowControl_menuControl'); }); @@ -48,9 +48,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { it('should render logs controls for logs data source', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.existOrFail('unifiedDataTable_additionalRowControl_menuControl'); @@ -58,18 +58,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle(); const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.existOrFail('unifiedDataTable_additionalRowControl_menuControl'); }); it('should not render logs controls for non-logs data source', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.switchTo('my-example-metrics'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.missingOrFail('unifiedDataTable_additionalRowControl_menuControl'); @@ -77,9 +77,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle(); const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('exampleLogsControl_visBarVerticalStacked'); await testSubjects.missingOrFail('unifiedDataTable_additionalRowControl_menuControl'); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts b/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts index 22c05022ea8f60..563d7bc33d1ced 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts @@ -12,11 +12,10 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { common, timePicker, discover, header } = getPageObjects([ 'common', 'timePicker', 'discover', - 'unifiedFieldList', 'header', ]); const esArchiver = getService('esArchiver'); @@ -39,19 +38,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from logstash* | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); // logstash does not have log.level field, so the color indicator should not be rendered await testSubjects.existOrFail('euiDataGridBody'); await testSubjects.missingOrFail('dataGridHeaderCell-colorIndicator'); // switch the time frame back await browser.goBack(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should not render log.level row indicators if not a logs data source', async () => { @@ -59,10 +58,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from my-example* | sort @timestamp desc' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // my-example* has a log.level field, but it's not matching the logs profile, so the color indicator should not be rendered await testSubjects.existOrFail('euiDataGridBody'); await testSubjects.missingOrFail('dataGridHeaderCell-colorIndicator'); @@ -75,10 +74,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { esql: 'from my-example-logs,logstash* | sort @timestamp desc | where `log.level` is not null', }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // in this case it's matching the logs data source profile and has a log.level field, so the color indicator should be rendered await testSubjects.existOrFail('dataGridHeaderCell-colorIndicator'); const firstCell = await dataGrid.getCellElement(0, 0); @@ -101,13 +100,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render log.level row indicators on Surrounding documents page', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await dataViews.switchTo('my-example-logs,logstash*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); const [, surroundingActionEl] = await dataGrid.getRowActions(); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); let anchorCell = await dataGrid.getCellElement(0, 0); let anchorColorIndicator = await anchorCell.findByTestSubject( @@ -128,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); anchorCell = await dataGrid.getCellElement(0, 0); anchorColorIndicator = await anchorCell.findByTestSubject( diff --git a/test/functional/apps/discover/context_awareness/index.ts b/test/functional/apps/discover/context_awareness/index.ts index 59dad4caa32f17..d3da15973b49b7 100644 --- a/test/functional/apps/discover/context_awareness/index.ts +++ b/test/functional/apps/discover/context_awareness/index.ts @@ -12,7 +12,8 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects, loadTestFile }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); + const from = '2024-06-10T14:00:00.000Z'; const to = '2024-06-10T16:30:00.000Z'; @@ -32,7 +33,7 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid await kibanaServer.importExport.unload( 'test/functional/fixtures/kbn_archiver/discover/context_awareness' ); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); }); loadTestFile(require.resolve('./_root_profile')); diff --git a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts index 096d6fc3f2f6d9..c6f5fd97246292 100644 --- a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts +++ b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts @@ -19,7 +19,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']); + const { common, dashboard, header, discover } = getPageObjects([ + 'common', + 'dashboard', + 'header', + 'discover', + ]); describe('discover saved search embeddable', () => { before(async () => { @@ -32,7 +37,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ + await common.setTime({ from: 'Sep 22, 2015 @ 00:00:00.000', to: 'Sep 23, 2015 @ 00:00:00.000', }); @@ -40,28 +45,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); const addSearchEmbeddableToDashboard = async () => { await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const rows = await dataGrid.getDocTableRows(); expect(rows.length).to.be.above(0); }; const refreshDashboardPage = async () => { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }; it('can save a search embeddable with a defined rows per page number', async function () { @@ -69,7 +74,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addSearchEmbeddableToDashboard(); await dataGrid.checkCurrentRowsPerPageToBe(100); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.saveDashboard(dashboardName, { saveAsNew: true, waitDialogIsClosed: true, exitFromEditMode: false, @@ -81,7 +86,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeRowsPerPageTo(10); - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); await refreshDashboardPage(); await dataGrid.checkCurrentRowsPerPageToBe(10); @@ -89,7 +94,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should control columns correctly', async () => { await addSearchEmbeddableToDashboard(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('Sep 22, 2015 @ 23:50:13.253'); @@ -118,11 +123,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addSearchEmbeddableToDashboard(); await queryBar.setQuery('bytes > 5000'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.getSavedSearchDocumentCount()).to.be('2,572 documents'); + await header.waitUntilLoadingHasFinished(); + expect(await discover.getSavedSearchDocumentCount()).to.be('2,572 documents'); await queryBar.setQuery('this < is not : a valid > query'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const embeddableError = await testSubjects.find('embeddableError'); const errorMessage = await embeddableError.findByTestSubject('errorMessageMarkdown'); const errorText = await errorMessage.getVisibleText(); diff --git a/test/functional/apps/discover/esql/_esql_columns.ts b/test/functional/apps/discover/esql/_esql_columns.ts index a3d115d1117f64..2eba53aaab8060 100644 --- a/test/functional/apps/discover/esql/_esql_columns.ts +++ b/test/functional/apps/discover/esql/_esql_columns.ts @@ -24,10 +24,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const monacoEditor = getService('monacoEditor'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', - 'dashboard', 'header', 'timePicker', 'unifiedFieldList', @@ -44,17 +43,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); }); beforeEach(async () => { - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should render initial columns for non-transformational commands correctly', async () => { @@ -62,32 +61,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getHeaderFields()).to.eql(columns); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.discover.saveSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_INITIAL_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_INITIAL_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); }); it('should render custom columns for non-transformational commands correctly', async () => { const columns = ['bytes', 'extension']; - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.discover.saveSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_CUSTOM_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_CUSTOM_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); }); @@ -97,31 +96,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await monacoEditor.setCodeEditorValue('from logstash-* | limit 500'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); await monacoEditor.setCodeEditorValue('from logs* | limit 500'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['bytes']); // different index pattern => reset columns await monacoEditor.setCodeEditorValue('from logstash-* | limit 500'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['extension']); // same index pattern => don't reset columns @@ -129,8 +128,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `${await monacoEditor.getCodeEditorValue()} | where bytes > 0` ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['extension']); }); @@ -140,18 +139,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `${await monacoEditor.getCodeEditorValue()} | keep ip, @timestamp` ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.discover.saveSearch(SAVED_SEARCH_TRANSFORMATIONAL_INITIAL_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_TRANSFORMATIONAL_INITIAL_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); }); @@ -161,38 +160,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `${await monacoEditor.getCodeEditorValue()} | keep ip, @timestamp, bytes` ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp', 'bytes']); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('@timestamp'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('@timestamp'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); - await PageObjects.discover.saveSearch(SAVED_SEARCH_TRANSFORMATIONAL_CUSTOM_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_TRANSFORMATIONAL_CUSTOM_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(columns); }); it('should reset columns if available fields or index pattern are different in transformational query', async () => { await monacoEditor.setCodeEditorValue('from logstash-* | keep ip, @timestamp'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp']); // reset columns if available fields are different await monacoEditor.setCodeEditorValue('from logstash-* | keep ip, @timestamp, bytes'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp', 'bytes']); // don't reset columns if available fields and index pattern are the same @@ -200,46 +199,46 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'from logstash-* | keep ip, @timestamp, bytes | limit 1' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp', 'bytes']); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('@timestamp'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('@timestamp'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', 'bytes']); // reset columns if index pattern is different await monacoEditor.setCodeEditorValue('from logs* | keep ip, @timestamp, bytes | limit 1'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp', 'bytes']); }); it('should restore columns correctly when switching between saved searches', async () => { - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_INITIAL_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_INITIAL_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_CUSTOM_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(SAVED_SEARCH_NON_TRANSFORMATIONAL_CUSTOM_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['bytes', 'extension']); - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_TRANSFORMATIONAL_INITIAL_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(SAVED_SEARCH_TRANSFORMATIONAL_INITIAL_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', '@timestamp']); - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_TRANSFORMATIONAL_CUSTOM_COLUMNS); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(SAVED_SEARCH_TRANSFORMATIONAL_CUSTOM_COLUMNS); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['ip', 'bytes']); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); }); }); diff --git a/test/functional/apps/discover/esql/_esql_view.ts b/test/functional/apps/discover/esql/_esql_view.ts index d382722748a845..f8871ded33fcfe 100644 --- a/test/functional/apps/discover/esql/_esql_view.ts +++ b/test/functional/apps/discover/esql/_esql_view.ts @@ -25,7 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const esql = getService('esql'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects([ + const { common, discover, dashboard, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'dashboard', @@ -52,17 +52,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/kbn_archiver/kibana_sample_data_flights_index_pattern' ); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async () => { - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); }); describe('ES|QL in Discover', () => { it('should render esql view correctly', async function () { - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await testSubjects.exists('showQueryBarMenu')).to.be(true); expect(await testSubjects.exists('superDatePickerToggleQuickMenuButton')).to.be(true); @@ -79,8 +79,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('field-@message-showDetails'); expect(await testSubjects.exists('discoverFieldListPanelEdit-@message')).to.be(true); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await testSubjects.exists('fieldListFiltersFieldSearch')).to.be(true); expect(await testSubjects.exists('TextBasedLangEditor')).to.be(true); @@ -103,15 +103,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not render the histogram for indices with no @timestamp field', async function () { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const testQuery = `from kibana_sample_data_flights | limit 10`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await testSubjects.exists('TextBasedLangEditor')).to.be(true); // I am not rendering the histogram for indices with no @timestamp field @@ -119,33 +119,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render the histogram for indices with no @timestamp field when the ?t_start, ?t_end params are in the query', async function () { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const testQuery = `from kibana_sample_data_flights | limit 10 | where timestamp >= ?t_start and timestamp <= ?t_end`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const fromTime = 'Apr 10, 2018 @ 00:00:00.000'; const toTime = 'Nov 15, 2018 @ 00:00:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); expect(await testSubjects.exists('TextBasedLangEditor')).to.be(true); expect(await testSubjects.exists('unifiedHistogramChart')).to.be(true); }); it('should perform test query correctly', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.selectTextBaseLang(); + await timePicker.setDefaultAbsoluteRange(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // here Lens suggests a XY so it is rendered expect(await testSubjects.exists('unifiedHistogramChart')).to.be(true); expect(await testSubjects.exists('xyVisChart')).to.be(true); @@ -154,48 +154,48 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render when switching to a time range with no data, then back to a time range with data', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); let cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('1'); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 19, 2015 @ 06:31:44.000', 'Sep 19, 2015 @ 06:31:44.000' ); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await testSubjects.exists('discoverNoResults')).to.be(true); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('1'); }); it('should query an index pattern that doesnt translate to a dataview correctly', async function () { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('1'); }); it('should render correctly if there are empty fields', async function () { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10 | keep machine.ram_range, bytes`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be(' - '); expect(await dataGrid.getHeaders()).to.eql([ @@ -207,14 +207,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should work without a FROM statement', async function () { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `ROW a = 1, b = "two", c = null`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.discover.dragFieldToTable('a'); + await discover.dragFieldToTable('a'); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('1'); }); @@ -222,7 +222,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('errors', () => { it('should show error messages for syntax errors in query', async function () { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const brokenQueries = [ 'from logstash-* | limit 10*', 'from logstash-* | limit A', @@ -232,10 +232,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { for (const testQuery of brokenQueries) { await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // error in fetching documents because of the invalid query - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); const message = await testSubjects.getVisibleText('discoverErrorCalloutMessage'); expect(message).to.contain( "[esql] > Couldn't parse Elasticsearch ES|QL query. Check your query and try again." @@ -250,14 +250,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('switch modal', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); it('should show switch modal when switching to a data view', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('switch-to-dataviews'); await retry.try(async () => { await testSubjects.existOrFail('discover-esql-to-dataview-modal'); @@ -265,12 +265,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not show switch modal when switching to a data view while a saved search is open', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('switch-to-dataviews'); await retry.try(async () => { await testSubjects.existOrFail('discover-esql-to-dataview-modal'); @@ -281,21 +281,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { await testSubjects.missingOrFail('discover-esql-to-dataview-modal'); }); - await PageObjects.discover.saveSearch('esql_test'); + await discover.saveSearch('esql_test'); await testSubjects.click('switch-to-dataviews'); await testSubjects.missingOrFail('discover-esql-to-dataview-modal'); }); it('should show switch modal when switching to a data view while a saved search with unsaved changes is open', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.saveSearch('esql_test2'); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.saveSearch('esql_test2'); const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('switch-to-dataviews'); await retry.try(async () => { await testSubjects.existOrFail('discover-esql-to-dataview-modal'); @@ -305,23 +305,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('inspector', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('shows Discover and Lens requests in Inspector', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); let retries = 0; await retry.try(async () => { if (retries > 0) { await inspector.close(); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); } await inspector.open(); retries = retries + 1; @@ -337,10 +337,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dataSource: { type: 'esql' }, query: { esql: 'from kibana_sample_data_flights' }, }); - await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { + await common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10`; await monacoEditor.setCodeEditorValue(testQuery); @@ -348,7 +348,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { window.ELASTIC_ESQL_DELAY_SECONDS = 5; }); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.execute(() => { window.ELASTIC_ESQL_DELAY_SECONDS = undefined; }); @@ -366,15 +366,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('query history', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); it('should see my current query in the history', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); const historyItems = await esql.getHistoryItems(); @@ -387,16 +387,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('updating the query should add this to the history', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); const historyItems = await esql.getHistoryItems(); @@ -409,10 +409,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should select a query from the history and submit it', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); // click a history item @@ -428,16 +428,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add a failed query to the history', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const testQuery = 'from logstash-* | limit 100 | woof and meow'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); const historyItem = await esql.getHistoryItem(0); @@ -449,21 +449,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should sort correctly', async () => { const savedSearchName = 'testSorting'; - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const testQuery = 'from logstash-* | sort @timestamp | limit 100'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains an initial value', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -477,7 +477,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickDocSortDesc('bytes', 'Sort High-Low'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains the highest value', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -489,10 +489,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Sort fields\n1' ); - await PageObjects.discover.saveSearch(savedSearchName); + await discover.saveSearch(savedSearchName); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains the same highest value', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -502,8 +502,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains the same highest value after reload', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -511,15 +511,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return text === '17,966'; }); - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.loadSavedSearch(savedSearchName); + await discover.loadSavedSearch(savedSearchName); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor( 'first cell contains the same highest value after reopening', @@ -532,7 +532,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickDocSortDesc('bytes', 'Sort Low-High'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains the lowest value', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -544,10 +544,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Sort fields\n1' ); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickDocSortDesc('extension', 'Sort A-Z'); @@ -563,8 +563,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains the same lowest value after reload', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -581,14 +581,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } ); - await PageObjects.discover.saveSearch(savedSearchName); + await discover.saveSearch(savedSearchName); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(savedSearchName); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor( 'first cell contains the same lowest value as dashboard panel', @@ -616,24 +616,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('filtering by clicking on the table', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); it('should append a where clause by clicking the table', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | sort @timestamp desc | limit 10000 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await dataGrid.clickCellFilterForButtonExcludingControlColumns(0, 1); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( @@ -642,9 +642,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // negate await dataGrid.clickCellFilterOutButtonExcludingControlColumns(0, 1); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const newValue = await monacoEditor.getCodeEditorValue(); expect(newValue).to.eql( @@ -653,19 +653,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should append an end in existing where clause by clicking the table', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | sort @timestamp desc | limit 10000 | stats countB = count(bytes) by geo.dest | sort countB | where countB > 0`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await dataGrid.clickCellFilterForButtonExcludingControlColumns(0, 1); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( diff --git a/test/functional/apps/discover/group1/_date_nanos.ts b/test/functional/apps/discover/group1/_date_nanos.ts index fa14a78c80ddfe..f8450b10141a40 100644 --- a/test/functional/apps/discover/group1/_date_nanos.ts +++ b/test/functional/apps/discover/group1/_date_nanos.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'timePicker', 'discover']); + const { common, timePicker, discover } = getPageObjects(['common', 'timePicker', 'discover']); const kibanaServer = getService('kibanaServer'); const security = getService('security'); const fromTime = 'Sep 22, 2019 @ 20:31:44.000'; @@ -26,8 +26,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/date_nanos'); await kibanaServer.uiSettings.replace({ defaultIndex: 'date-nanos' }); await security.testUser.setRoles(['kibana_admin', 'kibana_date_nanos']); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await common.navigateToApp('discover'); + await timePicker.setAbsoluteRange(fromTime, toTime); }); after(async function unloadMakelogs() { @@ -37,10 +37,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a timestamp with nanoseconds in the first result row', async function () { - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.be(fromTime); expect(time.end).to.be(toTime); - const rowData = await PageObjects.discover.getDocTableIndex(1); + const rowData = await discover.getDocTableIndex(1); expect(rowData.startsWith('Sep 22, 2019 @ 23:50:13.253123345')).to.be.ok(); }); }); diff --git a/test/functional/apps/discover/group1/_date_nanos_mixed.ts b/test/functional/apps/discover/group1/_date_nanos_mixed.ts index 05f6928ea0d4de..7162d01bb96cc3 100644 --- a/test/functional/apps/discover/group1/_date_nanos_mixed.ts +++ b/test/functional/apps/discover/group1/_date_nanos_mixed.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'timePicker', 'discover']); + const { common, discover } = getPageObjects(['common', 'discover']); const kibanaServer = getService('kibanaServer'); const security = getService('security'); const browser = getService('browser'); @@ -33,26 +33,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await browser.setWindowSize(1200, 900); await security.testUser.setRoles(['kibana_admin', 'kibana_date_nanos_mixed']); - await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('discover'); + await common.setTime({ from, to }); + await common.navigateToApp('discover'); }); after(async () => { await security.testUser.restoreDefaults(); await esArchiver.unload('test/functional/fixtures/es_archiver/date_nanos_mixed'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('shows a list of records of indices with date & date_nanos fields in the right order', async function () { - const isLegacy = await PageObjects.discover.useLegacyTable(); - const rowData1 = await PageObjects.discover.getDocTableIndex(1); + const isLegacy = await discover.useLegacyTable(); + const rowData1 = await discover.getDocTableIndex(1); expect(rowData1).to.contain('Jan 1, 2019 @ 12:10:30.124000000'); - const rowData2 = await PageObjects.discover.getDocTableIndex(isLegacy ? 3 : 2); + const rowData2 = await discover.getDocTableIndex(isLegacy ? 3 : 2); expect(rowData2).to.contain('Jan 1, 2019 @ 12:10:30.123498765'); - const rowData3 = await PageObjects.discover.getDocTableIndex(isLegacy ? 5 : 3); + const rowData3 = await discover.getDocTableIndex(isLegacy ? 5 : 3); expect(rowData3).to.contain('Jan 1, 2019 @ 12:10:30.123456789'); - const rowData4 = await PageObjects.discover.getDocTableIndex(isLegacy ? 7 : 4); + const rowData4 = await discover.getDocTableIndex(isLegacy ? 7 : 4); expect(rowData4).to.contain('Jan 1, 2019 @ 12:10:30.123000000'); }); }); diff --git a/test/functional/apps/discover/group1/_discover.ts b/test/functional/apps/discover/group1/_discover.ts index e0936a122034bc..1326758fe09126 100644 --- a/test/functional/apps/discover/group1/_discover.ts +++ b/test/functional/apps/discover/group1/_discover.ts @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const inspector = getService('inspector'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -39,8 +39,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); @@ -49,63 +49,63 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryName1 = 'Query # 1'; it('should show correct time range string by timepicker', async function () { - const time = await PageObjects.timePicker.getTimeConfig(); - expect(time.start).to.be(PageObjects.timePicker.defaultStartTime); - expect(time.end).to.be(PageObjects.timePicker.defaultEndTime); - const rowData = await PageObjects.discover.getDocTableIndex(1); + const time = await timePicker.getTimeConfig(); + expect(time.start).to.be(timePicker.defaultStartTime); + expect(time.end).to.be(timePicker.defaultEndTime); + const rowData = await discover.getDocTableIndex(1); log.debug('check the newest doc timestamp in UTC (check diff timezone in last test)'); expect(rowData).to.contain('Sep 22, 2015 @ 23:50:13.253'); }); it('save query should show toast message and display query name', async function () { - await PageObjects.discover.saveSearch(queryName1); - const actualQueryNameString = await PageObjects.discover.getCurrentQueryName(); + await discover.saveSearch(queryName1); + const actualQueryNameString = await discover.getCurrentQueryName(); expect(actualQueryNameString).to.be(queryName1); }); it('load query should show query name', async function () { - await PageObjects.discover.loadSavedSearch(queryName1); + await discover.loadSavedSearch(queryName1); await retry.try(async function () { - expect(await PageObjects.discover.getCurrentQueryName()).to.be(queryName1); + expect(await discover.getCurrentQueryName()).to.be(queryName1); }); }); it('renaming a saved query should modify name in breadcrumb', async function () { const queryName2 = 'Modified Query # 1'; - await PageObjects.discover.loadSavedSearch(queryName1); - await PageObjects.discover.saveSearch(queryName2); + await discover.loadSavedSearch(queryName1); + await discover.saveSearch(queryName2); await retry.try(async function () { - expect(await PageObjects.discover.getCurrentQueryName()).to.be(queryName2); + expect(await discover.getCurrentQueryName()).to.be(queryName2); }); }); it('should show the correct hit count', async function () { const expectedHitCount = '14,004'; await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); }); it('should show correct time range string in chart', async function () { - const actualTimeString = await PageObjects.discover.getChartTimespan(); - const expectedTimeString = `${PageObjects.timePicker.defaultStartTime} - ${PageObjects.timePicker.defaultEndTime} (interval: Auto - 3 hours)`; + const actualTimeString = await discover.getChartTimespan(); + const expectedTimeString = `${timePicker.defaultStartTime} - ${timePicker.defaultEndTime} (interval: Auto - 3 hours)`; expect(actualTimeString).to.be(expectedTimeString); }); it('should modify the time range when a bar is clicked', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.clickHistogramBar(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const time = await PageObjects.timePicker.getTimeConfig(); + await timePicker.setDefaultAbsoluteRange(); + await discover.clickHistogramBar(); + await discover.waitUntilSearchingHasFinished(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.be('Sep 21, 2015 @ 12:00:00.000'); expect(time.end).to.be('Sep 21, 2015 @ 15:00:00.000'); await retry.waitForWithTimeout( 'table to contain the right search result', 3000, async () => { - const rowData = await PageObjects.discover.getDocTableField(1); + const rowData = await discover.getDocTableField(1); log.debug(`The first timestamp value in doc table: ${rowData}`); return rowData.includes('Sep 21, 2015 @ 14:59:08.840'); } @@ -113,37 +113,37 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct initial chart interval of Auto', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('discoverQueryHits'); // to cancel out tooltips - const actualInterval = await PageObjects.discover.getChartInterval(); + const actualInterval = await discover.getChartInterval(); const expectedInterval = 'auto'; expect(actualInterval).to.be(expectedInterval); }); it('should not show "no results"', async () => { - const isVisible = await PageObjects.discover.hasNoResults(); + const isVisible = await discover.hasNoResults(); expect(isVisible).to.be(false); }); it('should reload the saved search with persisted query to show the initial hit count', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); // apply query some changes await queryBar.setQuery('test'); await queryBar.submitQuery(); await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be('22'); + expect(await discover.getHitCount()).to.be('22'); }); // reset to persisted state await queryBar.clearQuery(); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); const expectedHitCount = '14,004'; await retry.try(async function () { expect(await queryBar.getQueryString()).to.be(''); - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); }); }); @@ -154,27 +154,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { log.debug('setAbsoluteRangeForAnotherQuery'); - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await discover.waitUntilSearchingHasFinished(); }); it('should show "no results"', async () => { await retry.waitFor('no results screen is displayed', async function () { - const isVisible = await PageObjects.discover.hasNoResults(); + const isVisible = await discover.hasNoResults(); return isVisible === true; }); }); it('should suggest a new time range is picked', async () => { - const isVisible = await PageObjects.discover.hasNoResultsTimepicker(); + const isVisible = await discover.hasNoResultsTimepicker(); expect(isVisible).to.be(true); }); it('should show matches when time range is expanded', async () => { - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); await retry.try(async function () { - expect(await PageObjects.discover.hasNoResults()).to.be(false); - expect(await PageObjects.discover.getHitCountInt()).to.be.above(0); + expect(await discover.hasNoResults()).to.be(false); + expect(await discover.getHitCountInt()).to.be.above(0); }); }); }); @@ -182,15 +182,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('nested query', () => { before(async () => { log.debug('setAbsoluteRangeForAnotherQuery'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); }); it('should support querying on nested fields', async function () { await queryBar.setQuery('nestedField:{ child: nestedValue }'); await queryBar.submitQuery(); await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be('1'); + expect(await discover.getHitCount()).to.be('1'); }); }); }); @@ -203,9 +203,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; await retry.try(async () => { - await PageObjects.discover.loadSavedSearch(expected.title); - const { title, description } = - await PageObjects.common.getSharedItemTitleAndDescription(); + await discover.loadSavedSearch(expected.title); + const { title, description } = await common.getSharedItemTitleAndDescription(); expect(title).to.eql(expected.title); expect(description).to.eql(expected.description); }); @@ -215,32 +214,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('time zone switch', () => { it('should show bars in the correct time zone after switching', async function () { await kibanaServer.uiSettings.update({ 'dateFormat:tz': 'America/Phoenix' }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.awaitKibanaChrome(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await queryBar.clearQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); log.debug( 'check that the newest doc timestamp is now -7 hours from the UTC time in the first test' ); - const rowData = await PageObjects.discover.getDocTableIndex(1); + const rowData = await discover.getDocTableIndex(1); expect(rowData.startsWith('Sep 22, 2015 @ 16:50:13.253')).to.be.ok(); }); }); describe('invalid time range in URL', function () { it('should get the default timerange', async function () { - await PageObjects.common.navigateToUrl('discover', '#/?_g=(time:(from:now-15m,to:null))', { + await common.navigateToUrl('discover', '#/?_g=(time:(from:now-15m,to:null))', { useActualUrl: true, }); - await PageObjects.header.awaitKibanaChrome(); - const time = await PageObjects.timePicker.getTimeConfig(); + await header.awaitKibanaChrome(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.be('~ 15 minutes ago'); expect(time.end).to.be('now'); }); @@ -248,23 +247,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('managing fields', function () { it('should add a field, sort by it, remove it and also sorting by it', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('_score'); - await PageObjects.discover.clickFieldSort('_score', 'Sort Low-High'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await unifiedFieldList.clickFieldListItemAdd('_score'); + await discover.clickFieldSort('_score', 'Sort Low-High'); const currentUrlWithScore = await browser.getCurrentUrl(); expect(currentUrlWithScore).to.contain('_score'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('_score'); + await unifiedFieldList.clickFieldListItemRemove('_score'); const currentUrlWithoutScore = await browser.getCurrentUrl(); expect(currentUrlWithoutScore).not.to.contain('_score'); }); it('should add a field with customLabel, sort by it, display it correctly', async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('referer'); - await PageObjects.discover.clickFieldSort('referer', 'Sort A-Z'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Referer custom'); - expect(await PageObjects.unifiedFieldList.getAllFieldNames()).to.contain('Referer custom'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await unifiedFieldList.clickFieldListItemAdd('referer'); + await discover.clickFieldSort('referer', 'Sort A-Z'); + expect(await discover.getDocHeader()).to.have.string('Referer custom'); + expect(await unifiedFieldList.getAllFieldNames()).to.contain('Referer custom'); const url = await browser.getCurrentUrl(); expect(url).to.contain('referer'); }); @@ -273,7 +272,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('refresh interval', function () { it('should refetch when autofresh is enabled', async () => { const intervalS = 5; - await PageObjects.timePicker.startAutoRefresh(intervalS); + await timePicker.startAutoRefresh(intervalS); const getRequestTimestamp = async () => { // check inspector panel request stats for timestamp @@ -301,7 +300,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await inspector.close(); - await PageObjects.timePicker.pauseAutoRefresh(); + await timePicker.pauseAutoRefresh(); }); }); diff --git a/test/functional/apps/discover/group1/_discover_accessibility.ts b/test/functional/apps/discover/group1/_discover_accessibility.ts index b6ad925c6d0f7b..9749328be31bc3 100644 --- a/test/functional/apps/discover/group1/_discover_accessibility.ts +++ b/test/functional/apps/discover/group1/_discover_accessibility.ts @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common } = getPageObjects(['common']); const defaultSettings = { defaultIndex: 'logstash-*', @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { diff --git a/test/functional/apps/discover/group1/_discover_histogram.ts b/test/functional/apps/discover/group1/_discover_histogram.ts index 1289885fc0ceef..aaabc64456b27e 100644 --- a/test/functional/apps/discover/group1/_discover_histogram.ts +++ b/test/functional/apps/discover/group1/_discover_histogram.ts @@ -16,10 +16,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const elasticChart = getService('elasticChart'); const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const PageObjects = getPageObjects([ + const { timePicker, dashboard, discover, common, header } = getPageObjects([ 'timePicker', 'dashboard', - 'settings', 'discover', 'common', 'header', @@ -44,29 +43,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await security.testUser.setRoles(['kibana_admin', 'long_window_logstash']); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async () => { await esArchiver.unload('test/functional/fixtures/es_archiver/long_window_logstash'); await kibanaServer.savedObjects.cleanStandardList(); await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); async function prepareTest(time: TimeStrings, interval?: string) { - await PageObjects.common.setTime(time); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.setTime(time); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); if (interval) { - await PageObjects.discover.setChartInterval(interval); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.setChartInterval(interval); + await header.waitUntilLoadingHasFinished(); } } it('should modify the time range when the histogram is brushed', async function () { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); const prevRenderingCount = await elasticChart.getVisualizationRenderingCount(); await retry.waitFor('chart rendering complete', async () => { const actualCount = await elasticChart.getVisualizationRenderingCount(); @@ -77,12 +76,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let prevRowData = ''; // to make sure the table is already rendered await retry.try(async () => { - prevRowData = await PageObjects.discover.getDocTableField(1); + prevRowData = await discover.getDocTableField(1); log.debug(`The first timestamp value in doc table before brushing: ${prevRowData}`); }); - await PageObjects.discover.brushHistogram(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.brushHistogram(); + await discover.waitUntilSearchingHasFinished(); const renderingCountInc = 2; await retry.waitFor('chart rendering complete after being brushed', async () => { const actualCount = await elasticChart.getVisualizationRenderingCount(); @@ -90,42 +89,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(`renderings after brushing - actual: ${actualCount} expected: ${expectedCount}`); return actualCount <= expectedCount; }); - const newDurationHours = await PageObjects.timePicker.getTimeDurationInHours(); + const newDurationHours = await timePicker.getTimeDurationInHours(); expect(Math.round(newDurationHours)).to.be(24); // might fail if histogram's width changes await retry.waitFor('doc table containing the documents of the brushed range', async () => { - const rowData = await PageObjects.discover.getDocTableField(1); + const rowData = await discover.getDocTableField(1); log.debug(`The first timestamp value in doc table after brushing: ${rowData}`); return prevRowData !== rowData; }); }); it('should update correctly when switching data views and brushing the histogram', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.selectIndexPattern('logstash-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.selectIndexPattern('long-window-logstash-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.brushHistogram(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('7'); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); + await discover.selectIndexPattern('logstash-*'); + await discover.waitUntilSearchingHasFinished(); + await discover.selectIndexPattern('long-window-logstash-*'); + await discover.waitUntilSearchingHasFinished(); + await discover.brushHistogram(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('7'); }); it('should update the histogram timerange when the query is resubmitted', async function () { await kibanaServer.uiSettings.update({ 'timepicker:timeDefaults': '{ "from": "2015-09-18T19:37:13.000Z", "to": "now"}', }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.awaitKibanaChrome(); - const initialTimeString = await PageObjects.discover.getChartTimespan(); + await common.navigateToApp('discover'); + await header.awaitKibanaChrome(); + const initialTimeString = await discover.getChartTimespan(); await queryBar.clickQuerySubmitButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('chart timespan to have changed', async () => { - const refreshedTimeString = await PageObjects.discover.getChartTimespan(); + const refreshedTimeString = await discover.getChartTimespan(); await queryBar.clickQuerySubmitButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); log.debug( `Timestamp before: ${initialTimeString}, Timestamp after: ${refreshedTimeString}` ); @@ -153,7 +152,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await prepareTest({ from, to }, 'Day'); const chartCanvasExist = await elasticChart.canvasExists(); expect(chartCanvasExist).to.be(true); - const chartIntervalIconTip = await PageObjects.discover.getChartIntervalWarningIcon(); + const chartIntervalIconTip = await discover.getChartIntervalWarningIcon(); expect(chartIntervalIconTip).to.be(false); }); it('should visualize monthly data with different years scaled to seconds', async () => { @@ -162,7 +161,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await prepareTest({ from, to }, 'Second'); const chartCanvasExist = await elasticChart.canvasExists(); expect(chartCanvasExist).to.be(true); - const chartIntervalIconTip = await PageObjects.discover.getChartIntervalWarningIcon(); + const chartIntervalIconTip = await discover.getChartIntervalWarningIcon(); expect(chartIntervalIconTip).to.be(true); }); it('should allow hide/show histogram, persisted in url state', async () => { @@ -171,7 +170,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await prepareTest({ from, to }); let canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); @@ -180,8 +179,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); - await PageObjects.discover.toggleChartVisibility(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.toggleChartVisibility(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); @@ -194,7 +193,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await prepareTest({ from, to }); // close chart for saved search - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); let canvasExists: boolean; await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); @@ -202,43 +201,43 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // save search - await PageObjects.discover.saveSearch(savedSearch); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch(savedSearch); + await header.waitUntilLoadingHasFinished(); // open new search - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); // load saved search - await PageObjects.discover.loadSavedSearch(savedSearch); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.loadSavedSearch(savedSearch); + await header.waitUntilLoadingHasFinished(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); // open chart for saved search - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); await retry.waitFor(`Discover histogram to be displayed`, async () => { canvasExists = await elasticChart.canvasExists(); return canvasExists; }); // save search - await PageObjects.discover.saveSearch(savedSearch); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch(savedSearch); + await header.waitUntilLoadingHasFinished(); // open new search - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); // load saved search - await PageObjects.discover.loadSavedSearch(savedSearch); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.loadSavedSearch(savedSearch); + await header.waitUntilLoadingHasFinished(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); }); it('should show permitted hidden histogram state when returning back to discover', async () => { // close chart - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); let canvasExists: boolean; await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); @@ -246,28 +245,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // save search - await PageObjects.discover.saveSearch('persisted hidden histogram'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('persisted hidden histogram'); + await header.waitUntilLoadingHasFinished(); // open chart - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); }); // go to dashboard - await PageObjects.dashboard.navigateToApp(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + await header.waitUntilLoadingHasFinished(); // go to discover - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); // close chart - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); await retry.try(async () => { canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); @@ -275,33 +274,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should recover from broken query search when clearing the query bar', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); // Make sure the chart is visible - await PageObjects.discover.toggleChartVisibility(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.toggleChartVisibility(); + await discover.waitUntilSearchingHasFinished(); // type an invalid search query, hit refresh await queryBar.setQuery('this is > not valid'); await queryBar.submitQuery(); - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); // now remove the query await queryBar.clearQuery(); await queryBar.submitQuery(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // check no error state - expect(await PageObjects.discover.isChartVisible()).to.be(true); + expect(await discover.isChartVisible()).to.be(true); }); it('should reset all histogram state when resetting the saved search', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); const savedSearch = 'histogram state'; - await PageObjects.discover.saveSearch(savedSearch); - await PageObjects.discover.chooseBreakdownField('extension.keyword'); - await PageObjects.discover.setChartInterval('Second'); + await discover.saveSearch(savedSearch); + await discover.chooseBreakdownField('extension.keyword'); + await discover.setChartInterval('Second'); let requestData = (await testSubjects.getAttribute('unifiedHistogramChart', 'data-request-data')) ?? ''; expect(JSON.parse(requestData)).to.eql({ @@ -310,10 +309,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { timeInterval: 's', breakdownField: 'extension.keyword', }); - await PageObjects.discover.toggleChartVisibility(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.revertUnsavedChanges(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.toggleChartVisibility(); + await discover.waitUntilSearchingHasFinished(); + await discover.revertUnsavedChanges(); + await discover.waitUntilSearchingHasFinished(); requestData = (await testSubjects.getAttribute('unifiedHistogramChart', 'data-request-data')) ?? ''; expect(JSON.parse(requestData)).to.eql({ diff --git a/test/functional/apps/discover/group1/_discover_histogram_breakdown.ts b/test/functional/apps/discover/group1/_discover_histogram_breakdown.ts index d95305abd07948..5ce8732e5355a8 100644 --- a/test/functional/apps/discover/group1/_discover_histogram_breakdown.ts +++ b/test/functional/apps/discover/group1/_discover_histogram_breakdown.ts @@ -14,17 +14,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common, discover, header, timePicker } = getPageObjects([ + 'common', + 'discover', + 'header', + 'timePicker', + ]); describe('discover unified histogram breakdown', function describeIndexTests() { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); }); after(async () => { @@ -32,30 +37,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should choose breakdown field', async () => { - await PageObjects.discover.chooseBreakdownField('extension.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); - const list = await PageObjects.discover.getHistogramLegendList(); + await discover.chooseBreakdownField('extension.raw'); + await header.waitUntilLoadingHasFinished(); + const list = await discover.getHistogramLegendList(); expect(list).to.eql(['jpg', 'css', 'png', 'Other']); }); it('should add filter using histogram legend values', async () => { - await PageObjects.discover.clickLegendFilter('png', '+'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.clickLegendFilter('png', '+'); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.hasFilter('extension.raw', 'png')).to.be(true); }); it('should save breakdown field in saved search', async () => { await filterBar.removeFilter('extension.raw'); - await PageObjects.discover.saveSearch('with breakdown'); + await discover.saveSearch('with breakdown'); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const prevList = await PageObjects.discover.getHistogramLegendList(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); + const prevList = await discover.getHistogramLegendList(); expect(prevList).to.eql([]); - await PageObjects.discover.loadSavedSearch('with breakdown'); - await PageObjects.header.waitUntilLoadingHasFinished(); - const list = await PageObjects.discover.getHistogramLegendList(); + await discover.loadSavedSearch('with breakdown'); + await header.waitUntilLoadingHasFinished(); + const list = await discover.getHistogramLegendList(); expect(list).to.eql(['jpg', 'css', 'png', 'Other']); }); }); diff --git a/test/functional/apps/discover/group1/_doc_accessibility.ts b/test/functional/apps/discover/group1/_doc_accessibility.ts index d924700d748fa0..759f222fc4e290 100644 --- a/test/functional/apps/discover/group1/_doc_accessibility.ts +++ b/test/functional/apps/discover/group1/_doc_accessibility.ts @@ -19,7 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const testSubjects = getService('testSubjects'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker', 'context']); + const { common, header, timePicker } = getPageObjects(['common', 'header', 'timePicker']); const defaultSettings = { defaultIndex: 'logstash-*', @@ -32,9 +32,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -45,7 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle({ rowIndex: 0 }); const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); await rowActions[0].click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.pressKeys(browser.keys.TAB); await browser.pressKeys(browser.keys.SPACE); await browser.pressKeys(browser.keys.TAB); diff --git a/test/functional/apps/discover/group1/_errors.ts b/test/functional/apps/discover/group1/_errors.ts index 003c4a266a3aae..d6f2eae89c9f14 100644 --- a/test/functional/apps/discover/group1/_errors.ts +++ b/test/functional/apps/discover/group1/_errors.ts @@ -14,7 +14,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'header', 'discover', 'timePicker']); + const { common, header, discover, timePicker } = getPageObjects([ + 'common', + 'header', + 'discover', + 'timePicker', + ]); describe('errors', function describeIndexTests() { before(async function () { @@ -23,8 +28,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/invalid_scripted_field' ); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async function () { @@ -33,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('invalid scripted field error', () => { it('is rendered', async () => { - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); const painlessStackTrace = await testSubjects.find('painlessStackTrace'); expect(painlessStackTrace).not.to.be(undefined); }); @@ -41,11 +46,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('not found', () => { it('should redirect to main page when trying to access invalid route', async () => { - await PageObjects.common.navigateToUrl('discover', '#/invalid-route', { + await common.navigateToUrl('discover', '#/invalid-route', { useActualUrl: true, ensureCurrentUrl: false, }); - await PageObjects.header.awaitKibanaChrome(); + await header.awaitKibanaChrome(); const invalidLink = await testSubjects.find('invalidRouteMessage'); expect(await invalidLink.getVisibleText()).to.be( diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid.ts index 580cbd4a2ae41f..90cf9067cd852e 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid.ts @@ -13,7 +13,11 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('discover data grid tests', function describeDiscoverDataGrid() { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'unifiedFieldList']); + const { common, timePicker, unifiedFieldList } = getPageObjects([ + 'common', + 'timePicker', + 'unifiedFieldList', + ]); const kibanaServer = getService('kibanaServer'); const defaultSettings = { defaultIndex: 'logstash-*' }; const testSubjects = getService('testSubjects'); @@ -27,8 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); it('can add fields to the table', async function () { @@ -37,16 +41,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await getTitles()).to.be('@timestamp Document'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); expect(await getTitles()).to.be('@timestamp bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('agent'); + await unifiedFieldList.clickFieldListItemAdd('agent'); expect(await getTitles()).to.be('@timestamp bytes agent'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('bytes'); + await unifiedFieldList.clickFieldListItemRemove('bytes'); expect(await getTitles()).to.be('@timestamp agent'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('agent'); + await unifiedFieldList.clickFieldListItemRemove('agent'); expect(await getTitles()).to.be('@timestamp Document'); }); diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_context.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_context.ts index 5fad9c4460c80a..cbd9221311f16e 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_context.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_context.ts @@ -22,11 +22,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const dataGrid = getService('dataGrid'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, dashboard, header, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', - 'settings', 'dashboard', 'header', 'unifiedFieldList', @@ -47,21 +46,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); for (const columnName of TEST_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItemAdd(columnName); + await unifiedFieldList.clickFieldListItemAdd(columnName); } for (const [columnName, value] of TEST_FILTER_COLUMN_NAMES) { - await PageObjects.unifiedFieldList.clickFieldListItem(columnName); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter(columnName, value); + await unifiedFieldList.clickFieldListItem(columnName); + await unifiedFieldList.clickFieldListPlusFilter(columnName, value); } }); after(async () => { - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); }); it('should open the context view with the selected document as anchor', async () => { @@ -103,16 +102,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('navigates to context view from embeddable', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.saveSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await discover.saveSearch('my search'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch('my search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts index 1f93c918125f09..a58dcf94e3a4a7 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_copy_to_clipboard.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const toasts = getService('toasts'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker', 'dashboard']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const defaultSettings = { defaultIndex: 'logstash-*', }; @@ -31,11 +31,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async function () { @@ -45,7 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to copy a column values to clipboard', async () => { const canReadClipboard = await browser.checkBrowserPermission('clipboard-read'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickCopyColumnValues('@timestamp'); @@ -75,7 +75,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to copy a column name to clipboard', async () => { const canReadClipboard = await browser.checkBrowserPermission('clipboard-read'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickCopyColumnName('@timestamp'); if (canReadClipboard) { diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_navigation.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_navigation.ts index fe5882bf0d299c..37f9d930ef1a05 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_navigation.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_navigation.ts @@ -14,7 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const dataGrid = getService('dataGrid'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'context']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const esArchiver = getService('esArchiver'); const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); @@ -33,9 +33,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); it('should open the doc view of the selected document', async function () { @@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create an exists filter from doc view of the selected document', async function () { - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle({ rowIndex: 0 }); await dataGrid.clickFieldActionInFlyout('@timestamp', 'addExistsFilterButton'); diff --git a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts index d75218f598dc82..b8743f65e73cef 100644 --- a/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2_data_grid1/_data_grid_doc_table.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const monacoEditor = getService('monacoEditor'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, dashboard, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -41,11 +41,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async function () { @@ -65,17 +65,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const fromTime = 'Sep 20, 2015 @ 23:00:00.000'; const toTime = 'Sep 20, 2015 @ 23:14:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await discover.waitUntilSearchingHasFinished(); - const finalRows = await PageObjects.discover.getDocTableRows(); + const finalRows = await discover.getDocTableRows(); expect(finalRows.length).to.be.below(initialRows.length); }); it('should show popover with expanded cell content by click on expand button', async () => { log.debug('open popover with expanded cell content to get json from the editor'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); await retry.waitForWithTimeout('timestamp matches expected doc', 5000, async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -111,14 +111,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show popover with expanded cell content by click on expand button on embeddable', async () => { log.debug('open popover with expanded cell content to get json from the editor'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.saveSearch('expand-cell-search'); - - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); + await discover.saveSearch('expand-cell-search'); + + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await header.waitUntilLoadingHasFinished(); await dashboardAddPanel.addSavedSearch('expand-cell-search'); await retry.waitForWithTimeout('timestamp matches expected doc', 5000, async () => { @@ -221,42 +221,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { afterEach(async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clickFieldListItemRemove(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove(column); + await header.waitUntilLoadingHasFinished(); } }); it('should add more columns to the table', async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clearFieldSearchInput(); - await PageObjects.unifiedFieldList.findFieldByName(column); - await PageObjects.unifiedFieldList.waitUntilFieldlistHasCountOfFields( - expectedFieldLength[column] - ); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clearFieldSearchInput(); + await unifiedFieldList.findFieldByName(column); + await unifiedFieldList.waitUntilFieldlistHasCountOfFields(expectedFieldLength[column]); + await unifiedFieldList.clickFieldListItemAdd(column); + await header.waitUntilLoadingHasFinished(); // test the header now - const header = await dataGrid.getHeaderFields(); - expect(header.join(' ')).to.have.string(column); + const headerFields = await dataGrid.getHeaderFields(); + expect(headerFields.join(' ')).to.have.string(column); } }); it('should remove columns from the table', async function () { for (const column of extraColumns) { - await PageObjects.unifiedFieldList.clearFieldSearchInput(); - await PageObjects.unifiedFieldList.findFieldByName(column); - await PageObjects.unifiedFieldList.waitUntilFieldlistHasCountOfFields( - expectedFieldLength[column] - ); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(column); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clearFieldSearchInput(); + await unifiedFieldList.findFieldByName(column); + await unifiedFieldList.waitUntilFieldlistHasCountOfFields(expectedFieldLength[column]); + await unifiedFieldList.clickFieldListItemAdd(column); + await header.waitUntilLoadingHasFinished(); } // remove the second column - await PageObjects.unifiedFieldList.clickFieldListItemRemove(extraColumns[1]); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove(extraColumns[1]); + await header.waitUntilLoadingHasFinished(); // test that the second column is no longer there - const header = await dataGrid.getHeaderFields(); - expect(header.join(' ')).to.not.have.string(extraColumns[1]); + const headerFields = await dataGrid.getHeaderFields(); + expect(headerFields.join(' ')).to.not.have.string(extraColumns[1]); }); }); }); diff --git a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts index 3e99c7c74cf404..9f826f9a75ee51 100644 --- a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts +++ b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_data.ts @@ -15,11 +15,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const queryBar = getService('queryBar'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', - 'header', 'discover', - 'visualize', 'timePicker', 'unifiedFieldList', ]); @@ -34,9 +32,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); describe('field data', function () { it('search php should show the correct hit count', async function () { @@ -44,18 +42,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async function () { await queryBar.setQuery('php'); await queryBar.submitQuery(); - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); it('the search term should be highlighted in the field data', async function () { // marks is the style that highlights the text in yellow - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - const marks = await PageObjects.discover.getMarks(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + const marks = await discover.getMarks(); expect(marks.length).to.be.greaterThan(0); expect(marks.indexOf('php')).to.be(0); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('extension'); + await unifiedFieldList.clickFieldListItemRemove('extension'); }); it('search type:apache should show the correct hit count', async function () { @@ -63,7 +61,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.setQuery('type:apache'); await queryBar.submitQuery(); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); @@ -77,7 +75,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('doc view should sort ascending', async function () { const expectedTimeStamp = 'Sep 20, 2015 @ 00:00:00.000'; await dataGrid.clickDocSortAsc(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('first cell contains expected timestamp', async () => { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); @@ -92,8 +90,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'whitespace but "(" found.'; await queryBar.setQuery('xxx(yyy))'); await queryBar.submitQuery(); - await PageObjects.discover.showsErrorCallout(); - const message = await PageObjects.discover.getDiscoverErrorMessage(); + await discover.showsErrorCallout(); + const message = await discover.getDiscoverErrorMessage(); expect(message).to.contain(expectedError); }); }); diff --git a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_tokens.ts b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_tokens.ts index fac2ec812b3ba9..3b6cd56aa9c3aa 100644 --- a/test/functional/apps/discover/group2_data_grid2/_data_grid_field_tokens.ts +++ b/test/functional/apps/discover/group2_data_grid2/_data_grid_field_tokens.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, dashboard, unifiedFieldList, header } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -33,14 +33,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; async function findFirstColumnTokens() { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); return await findFirstFieldIcons('euiDataGridBody > dataGridHeader'); } async function findFirstDocViewerTokens() { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); let fieldTokens: string[] | undefined = []; await retry.try(async () => { await dataGrid.clickRowToggle({ rowIndex: 0 }); @@ -85,14 +85,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should not render field tokens when Document column is visible', async function () { - expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + expect(await discover.getHitCount()).to.be('14,004'); expect(await findFirstColumnTokens()).to.eql([]); @@ -111,10 +111,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render field tokens correctly when columns are selected', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('ip'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('ip'); + await unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); expect(await findFirstColumnTokens()).to.eql(['Number', 'Text', 'IP address', 'Geo point']); @@ -133,13 +133,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render field tokens correctly for ES|QL', async function () { - await PageObjects.discover.selectTextBaseLang(); - expect(await PageObjects.discover.getHitCount()).to.be('10'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('ip'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + await discover.selectTextBaseLang(); + expect(await discover.getHitCount()).to.be('10'); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('ip'); + await unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); expect(await findFirstColumnTokens()).to.eql(['Number', 'Text', 'IP address', 'Geo point']); @@ -158,16 +158,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render field tokens correctly on Dashboard', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd( - 'relatedContent.article:modified_time' - ); - await PageObjects.discover.saveSearch('With columns'); - - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); + await unifiedFieldList.clickFieldListItemAdd('relatedContent.article:modified_time'); + await discover.saveSearch('With columns'); + + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('With columns'); @@ -188,8 +186,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render field tokens correctly on Surrounding Documents page', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); // navigate to the context view await dataGrid.clickRowToggle({ rowIndex: 0 }); @@ -198,7 +196,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { rowIndex: 0, }); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await findFirstColumnTokens()).to.eql(['Number', 'Text']); }); diff --git a/test/functional/apps/discover/group2_data_grid2/_data_grid_footer.ts b/test/functional/apps/discover/group2_data_grid2/_data_grid_footer.ts index 1afa0f3aace458..0e233db2ee54c3 100644 --- a/test/functional/apps/discover/group2_data_grid2/_data_grid_footer.ts +++ b/test/functional/apps/discover/group2_data_grid2/_data_grid_footer.ts @@ -17,7 +17,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'unifiedFieldList']); + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'unifiedFieldList', + ]); const defaultSettings = { defaultIndex: 'logstash-*' }; const testSubjects = getService('testSubjects'); const retry = getService('retry'); @@ -39,10 +44,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should show footer only for the last page and allow to load more', async () => { @@ -71,7 +76,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // press "Load more" await testSubjects.click(LOAD_MORE_SELECTOR); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // more pages appeared and the footer is gone await retry.try(async function () { @@ -86,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // press "Load more" await testSubjects.click(LOAD_MORE_SELECTOR); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // more pages appeared and the footer is gone await retry.try(async function () { @@ -110,7 +115,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.isEnabled(LOAD_MORE_SELECTOR)).to.be(true); // enable the refresh interval - await PageObjects.timePicker.startAutoRefresh(10); + await timePicker.startAutoRefresh(10); // the button is disabled now await retry.waitFor('disabled state', async function () { @@ -118,7 +123,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // disable the refresh interval - await PageObjects.timePicker.pauseAutoRefresh(); + await timePicker.pauseAutoRefresh(); // the button is enabled again await retry.waitFor('enabled state', async function () { @@ -142,7 +147,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.common.setTime({ + await common.setTime({ from: 'Sep 10, 2015 @ 00:00:00.000', to: 'Sep 30, 2019 @ 00:00:00.000', }); @@ -151,13 +156,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'discover:sampleSize': 4, 'discover:sampleRowsPerPage': 2, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should work for date nanos too', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('_id'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('_id'); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getRowsText()).to.eql([ 'Sep 22, 2019 @ 23:50:13.253123345AU_x3-TaGFA8no6QjiSJ', @@ -185,7 +190,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // press "Load more" await testSubjects.click(LOAD_MORE_SELECTOR); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // more pages appeared and the footer is gone await retry.try(async function () { @@ -205,7 +210,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // press "Load more" await testSubjects.click(LOAD_MORE_SELECTOR); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // more pages appeared and the footer is gone await retry.try(async function () { diff --git a/test/functional/apps/discover/group2_data_grid2/_data_grid_new_line.ts b/test/functional/apps/discover/group2_data_grid2/_data_grid_new_line.ts index 72b0c99acf51b5..217044f03e8820 100644 --- a/test/functional/apps/discover/group2_data_grid2/_data_grid_new_line.ts +++ b/test/functional/apps/discover/group2_data_grid2/_data_grid_new_line.ts @@ -21,11 +21,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ - 'settings', + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', - 'header', 'timePicker', 'unifiedFieldList', ]); @@ -60,12 +58,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); await dataViews.createFromSearchBar({ name: INDEX_NAME, adHoc: true, hasTimeField: false }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should not show new lines for Document column', async () => { @@ -79,8 +77,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show new lines for "message" column except for Single row height setting', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('message'); + await discover.waitUntilSearchingHasFinished(); let cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); let content = await cell.findByCssSelector('.unifiedDataTable__cellValue'); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_column_widths.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_column_widths.ts index a197628250807c..ba6f64d929fb18 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_column_widths.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_column_widths.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, dashboard, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { @@ -49,27 +49,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should not show reset width button for auto width column', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('@message'); expect(await dataGrid.resetColumnWidthExists('@message')).to.be(false); }); it('should show reset width button for absolute width column, and allow resetting to auto width', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('@message'); await testResizeColumn('@message'); }); it('should reset the last column to auto width if only absolute width columns remain', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('@message'); const { originalWidth: messageOriginalWidth, newWidth: messageNewWidth } = await dataGrid.resizeColumn('@message', -300); expect(messageNewWidth).to.be(messageOriginalWidth - 300); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); const { originalWidth: bytesOriginalWidth, newWidth: bytesNewWidth } = await dataGrid.resizeColumn('bytes', -100); expect(bytesNewWidth).to.be(bytesOriginalWidth - 100); @@ -81,12 +81,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not reset the last column to auto width when there are remaining auto width columns', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); const { originalWidth: bytesOriginalWidth, newWidth: bytesNewWidth } = await dataGrid.resizeColumn('bytes', -200); expect(bytesNewWidth).to.be(bytesOriginalWidth - 200); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('agent'); + await unifiedFieldList.clickFieldListItemAdd('agent'); const { originalWidth: agentOriginalWidth, newWidth: agentNewWidth } = await dataGrid.resizeColumn('agent', -100); expect(agentNewWidth).to.be(agentOriginalWidth - 100); @@ -96,34 +96,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow resetting column width in surrounding docs view', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('@message'); await dataGrid.clickRowToggle({ rowIndex: 0 }); const [, surroundingActionEl] = await dataGrid.getRowActions({ rowIndex: 0 }); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testResizeColumn('@message'); }); it('should allow resetting column width in Dashboard panel', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('A Saved Search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testResizeColumn('_source'); }); it('should use custom column width on Dashboard when specified', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('A Saved Search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const { originalWidth, newWidth } = await dataGrid.resizeColumn('_source', -100); expect(newWidth).to.be(originalWidth - 100); - await PageObjects.dashboard.saveDashboard('test'); + await dashboard.saveDashboard('test'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const initialWidth = (await (await dataGrid.getHeaderElement('_source')).getSize()).width; expect(initialWidth).to.be(newWidth); }); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_density.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_density.ts index 938f6544f68a6b..b50cd7e16cf017 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_density.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_density.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['settings', 'common', 'discover', 'header', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const defaultSettings = { defaultIndex: 'logstash-*' }; const security = getService('security'); @@ -35,10 +35,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should use the default density', async () => { @@ -66,7 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getCurrentDensityValue()).to.be('Expanded'); await browser.refresh(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentDensityValue()).to.be('Expanded'); @@ -74,12 +74,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should save and revert unsaved densities properly', async () => { // Open saved search - await PageObjects.discover.loadSavedSearch('A Saved Search'); + await discover.loadSavedSearch('A Saved Search'); // Change density await dataGrid.clickGridSettings(); await dataGrid.changeDensityValue('Expanded'); - await PageObjects.discover.saveUnsavedChanges(); + await discover.saveUnsavedChanges(); // Change density await dataGrid.clickGridSettings(); @@ -87,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('unsavedChangesBadge'); // Revert change - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); // Verify density reset await dataGrid.clickGridSettings(); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_pagination.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_pagination.ts index eab07ae66419ff..3e349129dc474e 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_pagination.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_pagination.ts @@ -15,8 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects([ - 'settings', + const { common, discover, header, timePicker, dashboard } = getPageObjects([ 'common', 'discover', 'header', @@ -48,10 +47,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should show pagination', async () => { @@ -105,8 +104,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // first render is based on settings value - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); expect((await dataGrid.getDocTableRows()).length).to.be(6); await dataGrid.checkCurrentRowsPerPageToBe(6); @@ -115,34 +114,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // save as a new search const savedSearchTitle = 'search with saved rowsPerPage'; - await PageObjects.discover.saveSearch(savedSearchTitle); + await discover.saveSearch(savedSearchTitle); // start a new search session await testSubjects.click('discoverNewButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect((await dataGrid.getDocTableRows()).length).to.be(6); // as in settings await dataGrid.checkCurrentRowsPerPageToBe(6); // open the saved search - await PageObjects.discover.loadSavedSearch(savedSearchTitle); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(savedSearchTitle); + await discover.waitUntilSearchingHasFinished(); expect((await dataGrid.getDocTableRows()).length).to.be(10); // as in the saved search await dataGrid.checkCurrentRowsPerPageToBe(10); // should use "rowsPerPage" form the saved search on dashboard - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(savedSearchTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect((await dataGrid.getDocTableRows()).length).to.be(10); // as in the saved search await dataGrid.checkCurrentRowsPerPageToBe(10); // should use "rowsPerPage" form settings by default on dashboard await dashboardPanelActions.removePanelByTitle(savedSearchTitle); await dashboardAddPanel.addSavedSearch('A Saved Search'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect((await dataGrid.getDocTableRows()).length).to.be(6); // as in settings await dataGrid.checkCurrentRowsPerPageToBe(6); }); @@ -156,31 +155,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hideAnnouncements: true, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); // expect pagination to be present for data view mode expect((await dataGrid.getDocTableRows()).length).to.be(rowsPerPage); await dataGrid.checkCurrentRowsPerPageToBe(rowsPerPage); await testSubjects.existOrFail('pagination-button-0'); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // expect no pagination for ES|QL mode expect((await dataGrid.getDocTableRows()).length).to.above(rowsPerPage); await testSubjects.missingOrFail('pagination-button-0'); - await PageObjects.discover.saveSearch(savedSearchESQL); + await discover.saveSearch(savedSearchESQL); - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(savedSearchESQL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // expect no pagination for ES|QL mode on Dashboard expect((await dataGrid.getDocTableRows()).length).to.above(rowsPerPage); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_height.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_height.ts index 9dd549e3fa90b8..fc5ccf9323ef21 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_height.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_height.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['settings', 'common', 'discover', 'header', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const defaultSettings = { defaultIndex: 'logstash-*' }; const security = getService('security'); @@ -35,10 +35,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should use the default row height', async () => { @@ -85,7 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentRowHeightValue()).to.be('Single'); @@ -135,7 +135,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentHeaderRowHeightValue()).to.be('Single'); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_navigation.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_navigation.ts index 8d8027e4b3ed9c..f2715e2af85cd8 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_navigation.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_navigation.ts @@ -13,7 +13,12 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'settings', 'header']); + const { common, discover, timePicker, settings } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'settings', + ]); const es = getService('es'); const security = getService('security'); @@ -32,18 +37,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('discover data grid row navigation', function () { before(async () => { await security.testUser.setRoles(['kibana_admin', 'similar_index', 'similar_index_two']); - await PageObjects.common.navigateToApp('settings'); + await common.navigateToApp('settings'); await createIndex('similar_index'); await createIndex('similar_index_two'); - await PageObjects.settings.createIndexPattern('similar_index*', '@timestamp', true); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await settings.createIndexPattern('similar_index*', '@timestamp', true); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); it('should navigate through rows with the same id but different indices correctly', async () => { - await PageObjects.discover.selectIndexPattern('similar_index*'); + await discover.selectIndexPattern('similar_index*'); await dataGrid.clickRowToggle(); const indexBeforePaginating = await testSubjects.getVisibleText( diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts index 26c53042741fc4..97e56a1de868ce 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_row_selection.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const security = getService('security'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -39,13 +39,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); after(async function () { @@ -211,8 +211,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('can copy columns for selected rows as text', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'extension', 'bytes']); }); diff --git a/test/functional/apps/discover/group2_data_grid3/_data_grid_sample_size.ts b/test/functional/apps/discover/group2_data_grid3/_data_grid_sample_size.ts index 34427b2d2a312c..759990efcaa223 100644 --- a/test/functional/apps/discover/group2_data_grid3/_data_grid_sample_size.ts +++ b/test/functional/apps/discover/group2_data_grid3/_data_grid_sample_size.ts @@ -26,8 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects([ - 'settings', + const { common, discover, header, timePicker, dashboard } = getPageObjects([ 'common', 'discover', 'header', @@ -57,11 +56,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); async function goToLastPageAndCheckFooterMessage(sampleSize: number) { @@ -90,8 +89,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeSampleSizeValue(CUSTOM_SAMPLE_SIZE); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(CUSTOM_SAMPLE_SIZE); await goToLastPageAndCheckFooterMessage(CUSTOM_SAMPLE_SIZE); @@ -103,12 +102,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeSampleSizeValue(CUSTOM_SAMPLE_SIZE); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await browser.refresh(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(CUSTOM_SAMPLE_SIZE); @@ -121,39 +120,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeSampleSizeValue(CUSTOM_SAMPLE_SIZE_FOR_SAVED_SEARCH); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.saveSearch(SAVED_SEARCH_NAME); + await discover.saveSearch(SAVED_SEARCH_NAME); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(CUSTOM_SAMPLE_SIZE_FOR_SAVED_SEARCH); await goToLastPageAndCheckFooterMessage(CUSTOM_SAMPLE_SIZE_FOR_SAVED_SEARCH); // reset to the default value - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(DEFAULT_SAMPLE_SIZE); await goToLastPageAndCheckFooterMessage(DEFAULT_SAMPLE_SIZE); // load the saved search again - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NAME); + await discover.loadSavedSearch(SAVED_SEARCH_NAME); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(CUSTOM_SAMPLE_SIZE_FOR_SAVED_SEARCH); await goToLastPageAndCheckFooterMessage(CUSTOM_SAMPLE_SIZE_FOR_SAVED_SEARCH); // load another saved search without a custom sample size - await PageObjects.discover.loadSavedSearch('A Saved Search'); + await discover.loadSavedSearch('A Saved Search'); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(DEFAULT_SAMPLE_SIZE); await goToLastPageAndCheckFooterMessage(DEFAULT_SAMPLE_SIZE); }); it('should use the default sample size on Dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('A Saved Search'); @@ -163,8 +162,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should use custom sample size on Dashboard when specified', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(SAVED_SEARCH_NAME); @@ -173,7 +172,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeSampleSizeValue(CUSTOM_SAMPLE_SIZE_FOR_DASHBOARD_PANEL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be( @@ -181,10 +180,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await goToLastPageAndCheckFooterMessage(CUSTOM_SAMPLE_SIZE_FOR_DASHBOARD_PANEL); - await PageObjects.dashboard.saveDashboard('test'); + await dashboard.saveDashboard('test'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be( diff --git a/test/functional/apps/discover/group3/_default_columns.ts b/test/functional/apps/discover/group3/_default_columns.ts index e599b99fd0ebe7..b3670833b83291 100644 --- a/test/functional/apps/discover/group3/_default_columns.ts +++ b/test/functional/apps/discover/group3/_default_columns.ts @@ -13,13 +13,11 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', 'unifiedFieldList', - 'unifiedSearch', - 'header', ]); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -57,10 +55,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should render default columns', async function () { @@ -81,35 +79,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); await dataViews.switchToAndValidate('Kibana Sample Data Logs (TSDB)'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['timestamp', 'message', 'extension']); await dataViews.switchToAndValidate('kibana_sample_data_flights'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['timestamp', 'DestCountry']); await dataViews.switchToAndValidate('logstash-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'extension']); }); it('should combine selected columns and default columns after switching data views', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('DestCountry'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemRemove('DestCountry'); + await unifiedFieldList.clickFieldListItemRemove('message'); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'extension', 'bytes']); await dataViews.switchToAndValidate('Kibana Sample Data Logs (TSDB)'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql([ 'timestamp', 'extension', @@ -118,9 +116,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); await dataViews.switchToAndValidate('logstash-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'extension', 'bytes']); }); @@ -128,8 +126,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'discover:modifyColumnsOnSwitch': false, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql([ '@timestamp', @@ -139,9 +137,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); await dataViews.switchToAndValidate('kibana_sample_data_flights'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.expandTimeRangeAsSuggestedInNoResultsMessage(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.expandTimeRangeAsSuggestedInNoResultsMessage(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql([ 'timestamp', 'message', diff --git a/test/functional/apps/discover/group3/_doc_viewer.ts b/test/functional/apps/discover/group3/_doc_viewer.ts index 32b2af1b2d6275..6da0725978afe9 100644 --- a/test/functional/apps/discover/group3/_doc_viewer.ts +++ b/test/functional/apps/discover/group3/_doc_viewer.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -39,10 +39,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', hideAnnouncements: true, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); afterEach(async () => { @@ -54,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('search', function () { beforeEach(async () => { await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); + await discover.isShowingDocViewer(); await retry.waitFor('rendered items', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length > 0; }); @@ -66,13 +66,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to search by string', async function () { - await PageObjects.discover.findFieldByNameInDocViewer('geo'); + await discover.findFieldByNameInDocViewer('geo'); await retry.waitFor('first updates', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length === 4; }); - await PageObjects.discover.findFieldByNameInDocViewer('.sr'); + await discover.findFieldByNameInDocViewer('.sr'); await retry.waitFor('second updates', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length === 2; @@ -80,21 +80,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to search by wildcard', async function () { - await PageObjects.discover.findFieldByNameInDocViewer('relatedContent*image'); + await discover.findFieldByNameInDocViewer('relatedContent*image'); await retry.waitFor('updates', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length === 2; }); }); it('should be able to search with spaces as wildcard', async function () { - await PageObjects.discover.findFieldByNameInDocViewer('relatedContent image'); + await discover.findFieldByNameInDocViewer('relatedContent image'); await retry.waitFor('updates', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length === 4; }); }); it('should be able to search with fuzzy search (1 typo)', async function () { - await PageObjects.discover.findFieldByNameInDocViewer('rel4tedContent.art'); + await discover.findFieldByNameInDocViewer('rel4tedContent.art'); await retry.waitFor('updates', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length === 3; @@ -102,7 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should ignore empty search', async function () { - await PageObjects.discover.findFieldByNameInDocViewer(' '); // only spaces + await discover.findFieldByNameInDocViewer(' '); // only spaces await retry.waitFor('the clear button', async () => { return await testSubjects.exists('clearSearchButton'); @@ -118,22 +118,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('filter by field type', function () { beforeEach(async () => { await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); + await discover.isShowingDocViewer(); await retry.waitFor('rendered items', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length > 0; }); }); it('should reveal and hide the filter form when the toggle is clicked', async function () { - await PageObjects.discover.openFilterByFieldTypeInDocViewer(); + await discover.openFilterByFieldTypeInDocViewer(); expect(await find.allByCssSelector('[data-test-subj*="typeFilter"]')).to.have.length(6); - await PageObjects.discover.closeFilterByFieldTypeInDocViewer(); + await discover.closeFilterByFieldTypeInDocViewer(); }); it('should filter by field type', async function () { const initialFieldsCount = (await find.allByCssSelector('.kbnDocViewer__fieldName')).length; - await PageObjects.discover.openFilterByFieldTypeInDocViewer(); + await discover.openFilterByFieldTypeInDocViewer(); await testSubjects.click('typeFilter-date'); @@ -157,16 +157,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filters by type in ES|QL view', async function () { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10000`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); + await discover.isShowingDocViewer(); await retry.waitFor('rendered items', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length > 0; }); @@ -179,7 +179,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const pinnedFieldsCount = 1; await dataGrid.togglePinActionInFlyout('agent'); - await PageObjects.discover.openFilterByFieldTypeInDocViewer(); + await discover.openFilterByFieldTypeInDocViewer(); expect(await find.allByCssSelector('[data-test-subj*="typeFilter"]')).to.have.length(6); await testSubjects.click('typeFilter-number'); @@ -195,19 +195,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('hide null values switch - ES|QL mode', function () { beforeEach(async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); const testQuery = 'from logstash-* | sort @timestamp | limit 10000'; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); + await discover.isShowingDocViewer(); }); afterEach(async () => { @@ -220,7 +220,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should hide fields with null values ', async function () { - await PageObjects.discover.findFieldByNameInDocViewer('machine'); + await discover.findFieldByNameInDocViewer('machine'); const results = (await find.allByCssSelector('.kbnDocViewer__fieldName')).length; const hideNullValuesSwitch = await testSubjects.find( 'unifiedDocViewerHideNullValuesSwitch' @@ -236,7 +236,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('pinning fields', function () { it('should be able to pin and unpin fields', async function () { await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); + await discover.isShowingDocViewer(); await retry.waitFor('rendered items', async () => { return (await find.allByCssSelector('.kbnDocViewer__fieldName')).length > 0; }); diff --git a/test/functional/apps/discover/group3/_drag_drop.ts b/test/functional/apps/discover/group3/_drag_drop.ts index 32d7f8e3bada83..b6ea2186c0ce26 100644 --- a/test/functional/apps/discover/group3/_drag_drop.ts +++ b/test/functional/apps/discover/group3/_drag_drop.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -31,65 +31,57 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*', }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); afterEach(async () => { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.savedObjects.cleanStandardList(); await kibanaServer.uiSettings.replace({}); - await PageObjects.unifiedFieldList.cleanSidebarLocalStorage(); + await unifiedFieldList.cleanSidebarLocalStorage(); }); describe('should add fields as columns via drag and drop', function () { it('should support dragging and dropping a field onto the grid', async function () { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 5 empty fields. 4 meta fields.' ); - expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( - '@timestamp, Document' - ); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Document'); - await PageObjects.discover.dragFieldToTable('extension'); + await discover.dragFieldToTable('extension'); - expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( - '@timestamp, extension' - ); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, extension'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ') - ).to.be('extension'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ')).to.be( + 'extension' + ); }); it('should support dragging and dropping a field onto the grid (with keyboard)', async function () { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 5 empty fields. 4 meta fields.' ); - expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( - '@timestamp, Document' - ); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, Document'); - await PageObjects.discover.dragFieldWithKeyboardToTable('@message'); + await discover.dragFieldWithKeyboardToTable('@message'); - expect((await PageObjects.discover.getColumnHeaders()).join(', ')).to.be( - '@timestamp, @message' - ); + expect((await discover.getColumnHeaders()).join(', ')).to.be('@timestamp, @message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ') - ).to.be('@message'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ')).to.be( + '@message' + ); }); }); }); diff --git a/test/functional/apps/discover/group3/_lens_vis.ts b/test/functional/apps/discover/group3/_lens_vis.ts index 6d2788cfd18b3d..2577958b03599e 100644 --- a/test/functional/apps/discover/group3/_lens_vis.ts +++ b/test/functional/apps/discover/group3/_lens_vis.ts @@ -19,7 +19,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const toasts = getService('toasts'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common, discover, header, timePicker } = getPageObjects([ + 'common', + 'discover', + 'header', + 'timePicker', + ]); const security = getService('security'); const defaultSettings = { defaultIndex: 'logstash-*', @@ -32,28 +37,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const defaultTotalCount = '14,004'; async function checkNoVis(totalCount: string) { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.isChartVisible()).to.be(false); - expect(await PageObjects.discover.getHitCount()).to.be(totalCount); + expect(await discover.isChartVisible()).to.be(false); + expect(await discover.getHitCount()).to.be(totalCount); } async function checkHistogramVis(timespan: string, totalCount: string) { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('xyVisChart'); await testSubjects.existOrFail('unifiedHistogramEditVisualization'); await testSubjects.existOrFail('unifiedHistogramBreakdownSelectorButton'); await testSubjects.existOrFail('unifiedHistogramTimeIntervalSelectorButton'); - expect(await PageObjects.discover.getChartTimespan()).to.be(timespan); - expect(await PageObjects.discover.getHitCount()).to.be(totalCount); + expect(await discover.getChartTimespan()).to.be(timespan); + expect(await discover.getHitCount()).to.be(totalCount); } async function checkESQLHistogramVis(timespan: string, totalCount: string) { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('xyVisChart'); await testSubjects.existOrFail('unifiedHistogramSaveVisualization'); @@ -61,8 +66,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.missingOrFail('unifiedHistogramEditVisualization'); await testSubjects.missingOrFail('unifiedHistogramBreakdownSelectorButton'); await testSubjects.missingOrFail('unifiedHistogramTimeIntervalSelectorButton'); - expect(await PageObjects.discover.getChartTimespan()).to.be(timespan); - expect(await PageObjects.discover.getHitCount()).to.be(totalCount); + expect(await discover.getChartTimespan()).to.be(timespan); + expect(await discover.getHitCount()).to.be(totalCount); } async function openLensEditFlyout() { @@ -112,17 +117,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should show histogram by default', async () => { await checkHistogramVis(defaultTimespan, defaultTotalCount); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 23:50:13.253' ); @@ -132,7 +137,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const savedSearchTotalCount = '4,756'; await checkHistogramVis(savedSearchTimeSpan, savedSearchTotalCount); - await PageObjects.discover.saveSearch('testDefault'); + await discover.saveSearch('testDefault'); await checkHistogramVis(savedSearchTimeSpan, savedSearchTotalCount); @@ -142,14 +147,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show no histogram for no results view and recover when time range expanded', async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 19, 2015 @ 00:00:00.000', 'Sep 19, 2015 @ 00:00:00.000' ); - expect(await PageObjects.discover.hasNoResults()).to.be(true); + expect(await discover.hasNoResults()).to.be(true); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 00:00:00.000' ); @@ -158,9 +163,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Sep 20, 2015 @ 00:00:00.000 - Sep 20, 2015 @ 00:00:00.000 (interval: Auto - millisecond)', '1' ); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be( - 'histogramForDataView' - ); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForDataView'); }); it('should show no histogram for non-time-based data views and recover for time-based data views', async () => { @@ -170,18 +173,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, changeTimestampField: `--- I don't want to use the time filter ---`, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await checkNoVis(defaultTotalCount); await dataViews.editFromSearchBar({ newName: 'logs', newTimeField: '@timestamp' }); await checkHistogramVis(defaultTimespan, defaultTotalCount); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be( - 'histogramForDataView' - ); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForDataView'); }); it('should show ESQL histogram for ES|QL query', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); await testSubjects.click('querySubmitButton'); @@ -191,7 +192,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '10' ); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 00:00:00.000' ); @@ -200,16 +201,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to customize ESQL histogram and save it', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await changeVisShape('Line'); - await PageObjects.discover.saveSearch('testCustomESQLHistogram'); + await discover.saveSearch('testCustomESQLHistogram'); await checkESQLHistogramVis( 'Sep 19, 2015 @ 06:31:44.000 - Sep 23, 2015 @ 18:31:44.000', @@ -218,14 +219,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); expect(await getCurrentVisTitle()).to.be('Line'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); }); it('should be able to load a saved search with custom histogram vis, edit vis and revert changes', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLHistogram'); + await discover.loadSavedSearch('testCustomESQLHistogram'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Line'); @@ -240,10 +241,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Line'); @@ -255,10 +256,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to load a saved search with custom histogram vis, edit query and revert changes', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLHistogram'); + await discover.loadSavedSearch('testCustomESQLHistogram'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Line'); @@ -273,8 +274,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await monacoEditor.setCodeEditorValue('from logstash-* | limit 100'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Bar'); @@ -283,15 +284,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('unsavedChangesBadge'); expect(await monacoEditor.getCodeEditorValue()).to.be('from logstash-* | limit 100'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Line'); await testSubjects.existOrFail('xyVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); await checkESQLHistogramVis(defaultTimespanESQL, '10'); expect(await monacoEditor.getCodeEditorValue()).to.be('from logstash-* | limit 10'); @@ -302,38 +303,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await checkESQLHistogramVis(defaultTimespanESQL, '5'); - await PageObjects.discover.chooseLensSuggestion('pie'); + await discover.chooseLensSuggestion('pie'); await testSubjects.existOrFail('unsavedChangesBadge'); expect(await monacoEditor.getCodeEditorValue()).to.contain('averageA'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Line'); await testSubjects.existOrFail('xyVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); await checkESQLHistogramVis(defaultTimespanESQL, '10'); expect(await monacoEditor.getCodeEditorValue()).to.be('from logstash-* | limit 10'); }); it('should be able to load a saved search with custom histogram vis and handle invalidations', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLHistogram'); + await discover.loadSavedSearch('testCustomESQLHistogram'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Line'); @@ -343,7 +344,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '10' ); expect(await monacoEditor.getCodeEditorValue()).to.be('from logstash-* | limit 10'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); // now we are changing to a different query to check invalidation logic await monacoEditor.setCodeEditorValue( @@ -351,43 +352,43 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await checkESQLHistogramVis(defaultTimespanESQL, '5'); - await PageObjects.discover.chooseLensSuggestion('pie'); + await discover.chooseLensSuggestion('pie'); await testSubjects.existOrFail('unsavedChangesBadge'); expect(await monacoEditor.getCodeEditorValue()).to.contain('averageA'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); - await PageObjects.discover.saveSearch('testCustomESQLHistogramInvalidation', true); + await discover.saveSearch('testCustomESQLHistogramInvalidation', true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); }); it('should be able to load a saved search with custom histogram vis and save new customization', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLHistogram'); + await discover.loadSavedSearch('testCustomESQLHistogram'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Line'); @@ -404,11 +405,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await checkESQLHistogramVis(defaultTimespanESQL, '5'); - await PageObjects.discover.chooseLensSuggestion('pie'); + await discover.chooseLensSuggestion('pie'); await testSubjects.existOrFail('unsavedChangesBadge'); expect(await monacoEditor.getCodeEditorValue()).to.contain('averageA'); @@ -417,19 +418,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('partitionVisChart'); // now we customize the vis again - await PageObjects.discover.chooseLensSuggestion('waffle'); + await discover.chooseLensSuggestion('waffle'); expect(await getCurrentVisTitle()).to.be('Waffle'); await testSubjects.existOrFail('partitionVisChart'); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.saveSearch( - 'testCustomESQLHistogramInvalidationPlusCustomization', - true - ); + await discover.saveSearch('testCustomESQLHistogramInvalidationPlusCustomization', true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Waffle'); @@ -437,49 +435,49 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Waffle'); await testSubjects.existOrFail('partitionVisChart'); }); it('should be able to customize ESQL vis and save it', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await checkESQLHistogramVis(defaultTimespanESQL, '5'); - await PageObjects.discover.chooseLensSuggestion('pie'); + await discover.chooseLensSuggestion('pie'); - await PageObjects.discover.saveSearch('testCustomESQLVis'); - await PageObjects.discover.saveSearch('testCustomESQLVisPartition', true); + await discover.saveSearch('testCustomESQLVis'); + await discover.saveSearch('testCustomESQLVisPartition', true); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); }); it('should be able to load a saved search with custom vis, edit query and revert changes', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLVisPartition'); + await discover.loadSavedSearch('testCustomESQLVisPartition'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await testSubjects.missingOrFail('unsavedChangesBadge'); @@ -487,46 +485,46 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await monacoEditor.setCodeEditorValue('from logstash-* | limit 100'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Bar'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); await checkESQLHistogramVis(defaultTimespanESQL, '100'); await testSubjects.existOrFail('unsavedChangesBadge'); expect(await monacoEditor.getCodeEditorValue()).to.be('from logstash-* | limit 100'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); expect(await monacoEditor.getCodeEditorValue()).to.contain('averageB'); // should be still Pie after reverting and saving again - await PageObjects.discover.saveSearch('testCustomESQLVisPartition'); + await discover.saveSearch('testCustomESQLVisPartition'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); }); it('should be able to change to an unfamiliar vis type via lens flyout', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLVisPartition'); + await discover.loadSavedSearch('testCustomESQLVisPartition'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); @@ -539,41 +537,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await getCurrentVisTitle()).to.be('Treemap'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); - await PageObjects.discover.saveSearch('testCustomESQLVisTreemap', true); + await discover.saveSearch('testCustomESQLVisTreemap', true); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Treemap'); await testSubjects.existOrFail('partitionVisChart'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Treemap'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension.raw' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Bar'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Treemap'); @@ -581,39 +579,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to load a saved search with custom vis, edit vis and revert changes', async () => { - await PageObjects.discover.loadSavedSearch('testCustomESQLVis'); + await discover.loadSavedSearch('testCustomESQLVis'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.discover.chooseLensSuggestion('waffle'); + await discover.chooseLensSuggestion('waffle'); expect(await getCurrentVisTitle()).to.be('Waffle'); await testSubjects.existOrFail('partitionVisChart'); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - await PageObjects.discover.chooseLensSuggestion('barVerticalStacked'); + await discover.chooseLensSuggestion('barVerticalStacked'); await changeVisShape('Line'); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.saveUnsavedChanges(); + await discover.saveUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await getCurrentVisTitle()).to.be('Line'); @@ -621,48 +619,48 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should close lens flyout on revert changes', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await getCurrentVisTitle()).to.be('Bar'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.discover.chooseLensSuggestion('treemap'); + await discover.chooseLensSuggestion('treemap'); expect(await getCurrentVisTitle()).to.be('Treemap'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); - await PageObjects.discover.saveSearch('testCustomESQLVisRevert'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch('testCustomESQLVisRevert'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.discover.chooseLensSuggestion('pie'); + await discover.chooseLensSuggestion('pie'); expect(await getCurrentVisTitle()).to.be('Pie'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); await openLensEditFlyout(); await testSubjects.existOrFail('lnsEditOnFlyFlyout'); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.revertUnsavedChanges(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); await testSubjects.missingOrFail('lnsEditOnFlyFlyout'); // it should close the flyout expect(await getCurrentVisTitle()).to.be('Treemap'); await testSubjects.existOrFail('partitionVisChart'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); }); }); } diff --git a/test/functional/apps/discover/group3/_panels_toggle.ts b/test/functional/apps/discover/group3/_panels_toggle.ts index 7b9e431bf080a2..a789e6f92c2fda 100644 --- a/test/functional/apps/discover/group3/_panels_toggle.ts +++ b/test/functional/apps/discover/group3/_panels_toggle.ts @@ -16,8 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const monacoEditor = getService('monacoEditor'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ - 'settings', + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -54,20 +53,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { isChartAvailable: boolean; totalHits: string; }) { - expect(await PageObjects.discover.getHitCount()).to.be(totalHits); + expect(await discover.getHitCount()).to.be(totalHits); if (shouldSidebarBeOpen) { - expect(await PageObjects.discover.isSidebarPanelOpen()).to.be(true); + expect(await discover.isSidebarPanelOpen()).to.be(true); await testSubjects.existOrFail('unifiedFieldListSidebar__toggle-collapse'); await testSubjects.missingOrFail('dscShowSidebarButton'); } else { - expect(await PageObjects.discover.isSidebarPanelOpen()).to.be(false); + expect(await discover.isSidebarPanelOpen()).to.be(false); await testSubjects.missingOrFail('unifiedFieldListSidebar__toggle-collapse'); await testSubjects.existOrFail('dscShowSidebarButton'); } if (isChartAvailable) { - expect(await PageObjects.discover.isChartVisible()).to.be(shouldHistogramBeOpen); + expect(await discover.isChartVisible()).to.be(shouldHistogramBeOpen); if (shouldHistogramBeOpen) { await testSubjects.existOrFail('dscPanelsToggleInHistogram'); await testSubjects.existOrFail('dscHideHistogramButton'); @@ -82,7 +81,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.missingOrFail('dscHideHistogramButton'); } } else { - expect(await PageObjects.discover.isChartVisible()).to.be(false); + expect(await discover.isChartVisible()).to.be(false); await testSubjects.missingOrFail('dscPanelsToggleInHistogram'); await testSubjects.missingOrFail('dscHideHistogramButton'); await testSubjects.missingOrFail('dscShowHistogramButton'); @@ -110,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.closeSidebar(); + await discover.closeSidebar(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: false, @@ -119,7 +118,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.openSidebar(); + await discover.openSidebar(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: true, @@ -138,7 +137,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.closeHistogramPanel(); + await discover.closeHistogramPanel(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: true, @@ -147,7 +146,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.openHistogramPanel(); + await discover.openHistogramPanel(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: true, @@ -165,8 +164,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.closeSidebar(); - await PageObjects.discover.closeHistogramPanel(); + await discover.closeSidebar(); + await discover.closeHistogramPanel(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: false, @@ -175,8 +174,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { totalHits, }); - await PageObjects.discover.openSidebar(); - await PageObjects.discover.openHistogramPanel(); + await discover.openSidebar(); + await discover.openHistogramPanel(); await checkSidebarAndHistogram({ shouldSidebarBeOpen: true, @@ -190,12 +189,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('time based data view', function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); checkPanelsToggle({ isChartAvailable: true, totalHits: '14,004' }); @@ -203,17 +202,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('non-time based data view', function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); await dataViews.createFromSearchBar({ name: 'log*', adHoc: true, hasTimeField: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); checkPanelsToggle({ isChartAvailable: false, totalHits: '14,004' }); @@ -221,12 +220,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('ES|QL with histogram chart', function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); checkPanelsToggle({ isChartAvailable: true, totalHits: '10' }); @@ -234,17 +233,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('ES|QL with aggs chart', function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.selectTextBaseLang(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats avg(bytes) by extension | limit 100' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); checkPanelsToggle({ isChartAvailable: true, totalHits: '5' }); @@ -252,18 +251,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('ES|QL without a time field', function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); await dataViews.createFromSearchBar({ name: 'log*', adHoc: true, hasTimeField: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); checkPanelsToggle({ isChartAvailable: false, totalHits: '10' }); diff --git a/test/functional/apps/discover/group3/_request_counts.ts b/test/functional/apps/discover/group3/_request_counts.ts index 449fcca90adfb0..8a029928af0cb5 100644 --- a/test/functional/apps/discover/group3/_request_counts.ts +++ b/test/functional/apps/discover/group3/_request_counts.ts @@ -13,13 +13,11 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header } = getPageObjects([ 'common', 'discover', 'timePicker', 'header', - 'unifiedSearch', - 'settings', ]); const testSubjects = getService('testSubjects'); const browser = getService('browser'); @@ -40,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'bfetch:disable': true, enableESQL: true, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { @@ -50,8 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); }); const getSearchCount = async (type: 'ese' | 'esql') => { @@ -64,8 +62,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const waitForLoadingToFinish = async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await header.waitUntilLoadingHasFinished(); + await discover.waitForDocTableLoadingComplete(); await elasticChart.canvasExists(); }; @@ -124,7 +122,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it(`should send ${expectedRequests} requests (documents + chart) when changing the time range`, async () => { await expectSearches(type, expectedRequests, async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 21, 2015 @ 06:31:44.000', 'Sep 23, 2015 @ 00:00:00.000' ); @@ -134,7 +132,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it(`should send ${savedSearchesRequests} requests for saved search changes`, async () => { await setQuery(query1); await queryBar.clickQuerySubmitButton(); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 21, 2015 @ 06:31:44.000', 'Sep 23, 2015 @ 00:00:00.000' ); @@ -143,14 +141,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // https://github.com/elastic/kibana/issues/165192 // creating the saved search await expectSearches(type, savedSearchesRequests ?? expectedRequests, async () => { - await PageObjects.discover.saveSearch(savedSearch); + await discover.saveSearch(savedSearch); }); // resetting the saved search await setQuery(query2); await queryBar.clickQuerySubmitButton(); await waitForLoadingToFinish(); await expectSearches(type, expectedRequests, async () => { - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); }); // clearing the saved search await expectSearches('ese', savedSearchesRequests ?? expectedRequests, async () => { @@ -160,7 +158,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // loading the saved search // TODO: https://github.com/elastic/kibana/issues/165192 await expectSearches(type, savedSearchesRequests ?? expectedRequests, async () => { - await PageObjects.discover.loadSavedSearch(savedSearch); + await discover.loadSavedSearch(savedSearch); }); }); }; @@ -178,10 +176,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it(`should send 2 requests (documents + chart) when toggling the chart visibility`, async () => { await expectSearches(type, 2, async () => { - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); }); await expectSearches(type, 2, async () => { - await PageObjects.discover.toggleChartVisibility(); + await discover.toggleChartVisibility(); }); }); @@ -197,31 +195,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should send 2 requests (documents + chart) when sorting', async () => { await expectSearches(type, 2, async () => { - await PageObjects.discover.clickFieldSort('@timestamp', 'Sort Old-New'); + await discover.clickFieldSort('@timestamp', 'Sort Old-New'); }); }); it('should send 2 requests (documents + chart) when changing to a breakdown field without an other bucket', async () => { await expectSearches(type, 2, async () => { - await PageObjects.discover.chooseBreakdownField('type'); + await discover.chooseBreakdownField('type'); }); }); it('should send 3 requests (documents + chart + other bucket) when changing to a breakdown field with an other bucket', async () => { await expectSearches(type, 3, async () => { - await PageObjects.discover.chooseBreakdownField('extension.raw'); + await discover.chooseBreakdownField('extension.raw'); }); }); it('should send 2 requests (documents + chart) when changing the chart interval', async () => { await expectSearches(type, 2, async () => { - await PageObjects.discover.setChartInterval('Day'); + await discover.setChartInterval('Day'); }); }); it('should send 2 requests (documents + chart) when changing the data view', async () => { await expectSearches(type, 2, async () => { - await PageObjects.discover.selectIndexPattern('long-window-logstash-*'); + await discover.selectIndexPattern('long-window-logstash-*'); }); }); }); diff --git a/test/functional/apps/discover/group4/_adhoc_data_views.ts b/test/functional/apps/discover/group4/_adhoc_data_views.ts index 33dc3557fa2475..8175e1f1392935 100644 --- a/test/functional/apps/discover/group4/_adhoc_data_views.ts +++ b/test/functional/apps/discover/group4/_adhoc_data_views.ts @@ -22,25 +22,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); - const PageObjects = getPageObjects([ - 'common', - 'unifiedSearch', - 'discover', - 'timePicker', - 'settings', - 'header', - 'context', - 'dashboard', - 'unifiedFieldList', - ]); + const { common, discover, timePicker, header, context, dashboard, unifiedFieldList } = + getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'header', + 'context', + 'dashboard', + 'unifiedFieldList', + ]); const find = getService('find'); const security = getService('security'); const dataViews = getService('dataViews'); const addSearchToDashboard = async (name: string) => { await dashboardAddPanel.addSavedSearch(name); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }; describe('adhoc data views', function () { @@ -49,8 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async () => { @@ -64,26 +63,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const first = await PageObjects.discover.getCurrentDataViewId(); + await discover.waitUntilSearchingHasFinished(); + const first = await discover.getCurrentDataViewId(); - await PageObjects.discover.addRuntimeField( - '_bytes-runtimefield', - `emit(doc["bytes"].value.toString())` - ); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); + await discover.addRuntimeField('_bytes-runtimefield', `emit(doc["bytes"].value.toString())`); + await unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); - const second = await PageObjects.discover.getCurrentDataViewId(); + const second = await discover.getCurrentDataViewId(); expect(first).not.to.equal(second); // navigate to context view await dataGrid.clickRowToggle({ rowIndex: 0 }); const [, surrDocs] = await dataGrid.getRowActions({ rowIndex: 0 }); await surrDocs.click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); await testSubjects.click('~breadcrumb & ~first'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await dataViews.getSelectedName()).to.be('logstash*'); @@ -91,10 +87,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.clickRowToggle({ rowIndex: 0 }); const [singleView] = await dataGrid.getRowActions({ rowIndex: 0 }); await singleView.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('~breadcrumb & ~first'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await dataViews.getSelectedName()).to.be('logstash*'); }); @@ -107,36 +103,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); expect(await filterBar.hasFilter('nestedField.child', 'nestedValue')).to.be(true); await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be('1'); + expect(await discover.getHitCount()).to.be('1'); }); await filterBar.removeFilter('nestedField.child'); await queryBar.setQuery('test'); await queryBar.submitQuery(); - await retry.try(async () => expect(await PageObjects.discover.getHitCount()).to.be('22')); + await retry.try(async () => expect(await discover.getHitCount()).to.be('22')); await queryBar.clearQuery(); await queryBar.submitQuery(); }); it('should not update data view id when saving search first time', async () => { - const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const prevDataViewId = await discover.getCurrentDataViewId(); - await PageObjects.discover.saveSearch('logstash*-ss'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('logstash*-ss'); + await header.waitUntilLoadingHasFinished(); - const newDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const newDataViewId = await discover.getCurrentDataViewId(); expect(prevDataViewId).to.equal(newDataViewId); }); it('should update data view id when saving new search copy', async () => { - const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const prevDataViewId = await discover.getCurrentDataViewId(); - await PageObjects.discover.saveSearch('logstash*-ss-new', true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('logstash*-ss-new', true); + await header.waitUntilLoadingHasFinished(); - const newDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const newDataViewId = await discover.getCurrentDataViewId(); expect(prevDataViewId).not.to.equal(newDataViewId); }); @@ -147,44 +143,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); + await discover.waitUntilSearchingHasFinished(); + const prevDataViewId = await discover.getCurrentDataViewId(); // trigger data view id update - await PageObjects.discover.addRuntimeField( - '_bytes-runtimefield', - `emit(doc["bytes"].value.toString())` - ); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); - const newDataViewId = await PageObjects.discover.getCurrentDataViewId(); + await discover.addRuntimeField('_bytes-runtimefield', `emit(doc["bytes"].value.toString())`); + await unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); + const newDataViewId = await discover.getCurrentDataViewId(); expect(newDataViewId).not.to.equal(prevDataViewId); // save first search - await PageObjects.discover.saveSearch('logst*-ss-_bytes-runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('logst*-ss-_bytes-runtimefield'); + await header.waitUntilLoadingHasFinished(); // remove field and create with the same name, but different value - await PageObjects.unifiedFieldList.clickFieldListItemRemove('_bytes-runtimefield'); - await PageObjects.discover.removeField('_bytes-runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('_bytes-runtimefield'); + await discover.removeField('_bytes-runtimefield'); + await header.waitUntilLoadingHasFinished(); // trigger data view id update - await PageObjects.discover.addRuntimeField( + await discover.addRuntimeField( '_bytes-runtimefield', `emit((doc["bytes"].value * 2).toString())` ); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); + await unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); // save second search - await PageObjects.discover.saveSearch('logst*-ss-_bytes-runtimefield-updated', true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('logst*-ss-_bytes-runtimefield-updated', true); + await header.waitUntilLoadingHasFinished(); // open searches on dashboard - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await addSearchToDashboard('logst*-ss-_bytes-runtimefield'); await addSearchToDashboard('logst*-ss-_bytes-runtimefield-updated'); @@ -208,35 +201,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (await testSubjects.exists('confirmModalConfirmButton')) { await testSubjects.click('confirmModalConfirmButton'); } - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); // open saved search await testSubjects.click('~breadcrumb & ~first'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const savedSearch = await find.byCssSelector(`[data-test-subj="breadcrumb last"]`); const savedSearchName = await savedSearch.getVisibleText(); expect(savedSearchName).to.be.equal('logst*-ss-_bytes-runtimefield'); // test the header now - const header = await dataGrid.getHeaderFields(); - expect(header.join(' ')).to.have.string('_bytes-runtimefield'); + const headerFields = await dataGrid.getHeaderFields(); + expect(headerFields.join(' ')).to.have.string('_bytes-runtimefield'); }); it('should update id after data view field edit', async () => { - await PageObjects.discover.loadSavedSearch('logst*-ss-_bytes-runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.loadSavedSearch('logst*-ss-_bytes-runtimefield'); + await header.waitUntilLoadingHasFinished(); - const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const prevDataViewId = await discover.getCurrentDataViewId(); // trigger data view id update await dataGrid.clickEditField('_bytes-runtimefield'); await fieldEditor.setName('_bytes-runtimefield-edited', true); await fieldEditor.save(); await fieldEditor.confirmSave(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - const newDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const newDataViewId = await discover.getCurrentDataViewId(); expect(prevDataViewId).not.to.equal(newDataViewId); }); @@ -246,32 +239,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await filterBar.addFilter({ field: 'nestedField.child', operation: 'is', value: 'nestedValue', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'jpg' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - const first = await PageObjects.discover.getCurrentDataViewId(); + const first = await discover.getCurrentDataViewId(); // trigger data view id update - await PageObjects.discover.addRuntimeField( + await discover.addRuntimeField( '_bytes-runtimefield', `emit((doc["bytes"].value * 2).toString())` ); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - const second = await PageObjects.discover.getCurrentDataViewId(); + const second = await discover.getCurrentDataViewId(); expect(first).not.equal(second); await toasts.dismissAll(); await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const [firstToast, secondToast] = await toasts.getAll(); diff --git a/test/functional/apps/discover/group4/_chart_hidden.ts b/test/functional/apps/discover/group4/_chart_hidden.ts index 5a9c22501a1c6e..f0b7a151dd0846 100644 --- a/test/functional/apps/discover/group4/_chart_hidden.ts +++ b/test/functional/apps/discover/group4/_chart_hidden.ts @@ -15,7 +15,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker', 'dashboard']); + const { common, discover, header, timePicker, dashboard } = getPageObjects([ + 'common', + 'discover', + 'header', + 'timePicker', + 'dashboard', + ]); const defaultSettings = { defaultIndex: 'logstash-*', @@ -31,8 +37,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -40,35 +46,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('shows chart by default', async function () { - expect(await PageObjects.discover.isChartVisible()).to.be(true); + expect(await discover.isChartVisible()).to.be(true); }); it('hiding the chart persists the setting', async function () { - await PageObjects.discover.toggleChartVisibility(); - expect(await PageObjects.discover.isChartVisible()).to.be(false); + await discover.toggleChartVisibility(); + expect(await discover.isChartVisible()).to.be(false); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.isChartVisible()).to.be(false); + expect(await discover.isChartVisible()).to.be(false); }); it('persists hidden chart option on the saved search ', async function () { const savedSearchTitle = 'chart hidden'; - await PageObjects.discover.saveSearch(savedSearchTitle); + await discover.saveSearch(savedSearchTitle); - await PageObjects.discover.toggleChartVisibility(); - expect(await PageObjects.discover.isChartVisible()).to.be(true); + await discover.toggleChartVisibility(); + expect(await discover.isChartVisible()).to.be(true); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.isChartVisible()).to.be(true); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); + expect(await discover.isChartVisible()).to.be(true); - await PageObjects.discover.loadSavedSearch(savedSearchTitle); - expect(await PageObjects.discover.isChartVisible()).to.be(false); + await discover.loadSavedSearch(savedSearchTitle); + expect(await discover.isChartVisible()).to.be(false); }); }); } diff --git a/test/functional/apps/discover/group4/_context_encoded_url_params.ts b/test/functional/apps/discover/group4/_context_encoded_url_params.ts index 018ece69ed849c..052c96de30b6e5 100644 --- a/test/functional/apps/discover/group4/_context_encoded_url_params.ts +++ b/test/functional/apps/discover/group4/_context_encoded_url_params.ts @@ -16,14 +16,20 @@ const customDocIdParam = '1+1=2/&?#'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'settings', 'header']); + const { common, discover, timePicker, settings, header } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'settings', + 'header', + ]); const testSubjects = getService('testSubjects'); const es = getService('es'); describe('encoded URL params in context page', () => { before(async function () { await security.testUser.setRoles(['kibana_admin', 'context_encoded_param']); - await PageObjects.common.navigateToApp('settings'); + await common.navigateToApp('settings'); await es.transport.request({ path: `/_bulk`, method: 'PUT', @@ -32,20 +38,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { '@timestamp': '2015-09-21T09:30:23', name: 'Dmitry' }, ], }); - await PageObjects.settings.createIndexPattern( + await settings.createIndexPattern( 'context_encoded_param', '@timestamp', true, customDataViewIdParam ); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); it('should navigate correctly', async () => { - await PageObjects.discover.selectIndexPattern('context_encoded_param'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.selectIndexPattern('context_encoded_param'); + await header.waitUntilLoadingHasFinished(); + await discover.waitForDocTableLoadingComplete(); // navigate to the context view await dataGrid.clickRowToggle({ rowIndex: 0 }); @@ -54,7 +60,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { rowIndex: 0, }); await surroundingActionEl.click(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const headerElement = await testSubjects.find('contextDocumentSurroundingHeader'); diff --git a/test/functional/apps/discover/group4/_data_view_edit.ts b/test/functional/apps/discover/group4/_data_view_edit.ts index 0d2760e0a0048a..c0c5216010191d 100644 --- a/test/functional/apps/discover/group4/_data_view_edit.ts +++ b/test/functional/apps/discover/group4/_data_view_edit.ts @@ -18,12 +18,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', - 'unifiedSearch', 'discover', 'timePicker', - 'dashboard', 'unifiedFieldList', ]); @@ -33,9 +31,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await timePicker.setCommonlyUsedTime('This_week'); }); after(async () => { @@ -81,11 +79,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.discover.getHitCountInt()).to.be(2); - expect((await PageObjects.unifiedFieldList.getAllFieldNames()).length).to.be(3); + expect(await discover.getHitCountInt()).to.be(2); + expect((await unifiedFieldList.getAllFieldNames()).length).to.be(3); }); it('create saved data view', async function () { @@ -95,14 +93,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: false, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { - expect(await PageObjects.discover.getHitCountInt()).to.be(1); + expect(await discover.getHitCountInt()).to.be(1); }); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect((await PageObjects.unifiedFieldList.getAllFieldNames()).length).to.be(2); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect((await unifiedFieldList.getAllFieldNames()).length).to.be(2); }); it('update data view with a different time field', async function () { @@ -129,12 +127,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } await dataViews.editFromSearchBar({ newName: updatedPattern, newTimeField: 'timestamp' }); await retry.try(async () => { - expect(await PageObjects.discover.getHitCountInt()).to.be(3); + expect(await discover.getHitCountInt()).to.be(3); }); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect((await PageObjects.unifiedFieldList.getAllFieldNames()).length).to.be(3); - expect(await PageObjects.discover.isChartVisible()).to.be(true); - expect(await PageObjects.timePicker.timePickerExists()).to.be(true); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect((await unifiedFieldList.getAllFieldNames()).length).to.be(3); + expect(await discover.isChartVisible()).to.be(true); + expect(await timePicker.timePickerExists()).to.be(true); }); it('update data view with no time field', async function () { @@ -142,12 +140,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { newTimeField: "--- I don't want to use the time filter ---", }); await retry.try(async () => { - expect(await PageObjects.discover.getHitCountInt()).to.be(4); + expect(await discover.getHitCountInt()).to.be(4); }); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect((await PageObjects.unifiedFieldList.getAllFieldNames()).length).to.be(3); - expect(await PageObjects.discover.isChartVisible()).to.be(false); - expect(await PageObjects.timePicker.timePickerExists()).to.be(false); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect((await unifiedFieldList.getAllFieldNames()).length).to.be(3); + expect(await discover.isChartVisible()).to.be(false); + expect(await timePicker.timePickerExists()).to.be(false); }); }); } diff --git a/test/functional/apps/discover/group4/_date_nested.ts b/test/functional/apps/discover/group4/_date_nested.ts index b2ba884e48f1fd..215ad2b26af44d 100644 --- a/test/functional/apps/discover/group4/_date_nested.ts +++ b/test/functional/apps/discover/group4/_date_nested.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'timePicker', 'discover']); + const { common, discover } = getPageObjects(['common', 'discover']); const security = getService('security'); const kibanaServer = getService('kibanaServer'); @@ -22,7 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/kbn_archiver/date_nested.json' ); await security.testUser.setRoles(['kibana_admin', 'kibana_date_nested']); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async function unloadMakelogs() { @@ -32,9 +32,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show an error message', async function () { - await PageObjects.discover.selectIndexPattern('date-nested'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.showsErrorCallout(); + await discover.selectIndexPattern('date-nested'); + await discover.waitUntilSearchingHasFinished(); + await discover.showsErrorCallout(); }); }); } diff --git a/test/functional/apps/discover/group4/_discover_fields_api.ts b/test/functional/apps/discover/group4/_discover_fields_api.ts index 96c6cb4c174d04..dd10c4020a87d2 100644 --- a/test/functional/apps/discover/group4/_discover_fields_api.ts +++ b/test/functional/apps/discover/group4/_discover_fields_api.ts @@ -16,10 +16,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, settings, unifiedFieldList } = getPageObjects([ 'common', 'discover', - 'header', 'timePicker', 'settings', 'unifiedFieldList', @@ -37,8 +36,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -47,55 +46,55 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should correctly display documents', async function () { log.debug('check if Document title exists in the grid'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); - const rowData = await PageObjects.discover.getDocTableIndex(1); + expect(await discover.getDocHeader()).to.have.string('Document'); + const rowData = await discover.getDocTableIndex(1); log.debug('check the newest doc timestamp in UTC (check diff timezone in last test)'); expect(rowData.startsWith('Sep 22, 2015 @ 23:50:13.253')).to.be.ok(); const expectedHitCount = '14,004'; await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); }); it('adding a column removes a default column', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('_score'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('_score'); - expect(await PageObjects.discover.getDocHeader()).not.to.have.string('Document'); + await unifiedFieldList.clickFieldListItemAdd('_score'); + expect(await discover.getDocHeader()).to.have.string('_score'); + expect(await discover.getDocHeader()).not.to.have.string('Document'); }); it('removing a column adds a default column', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemRemove('_score'); - expect(await PageObjects.discover.getDocHeader()).not.to.have.string('_score'); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + await unifiedFieldList.clickFieldListItemRemove('_score'); + expect(await discover.getDocHeader()).not.to.have.string('_score'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); it('displays _source viewer in doc viewer', async function () { await dataGrid.clickRowToggle(); - await PageObjects.discover.isShowingDocViewer(); - await PageObjects.discover.clickDocViewerTab('doc_view_source'); - await PageObjects.discover.expectSourceViewerToExist(); + await discover.isShowingDocViewer(); + await discover.clickDocViewerTab('doc_view_source'); + await discover.expectSourceViewerToExist(); }); it('switches to _source column when fields API is no longer used', async function () { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); it('switches to Document column when fields API is used', async function () { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); }); } diff --git a/test/functional/apps/discover/group4/_document_comparison.ts b/test/functional/apps/discover/group4/_document_comparison.ts index 6298be89817b96..1138150bcdcd56 100644 --- a/test/functional/apps/discover/group4/_document_comparison.ts +++ b/test/functional/apps/discover/group4/_document_comparison.ts @@ -12,7 +12,12 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'unifiedFieldList']); + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'unifiedFieldList', + ]); const kibanaServer = getService('kibanaServer'); const security = getService('security'); const dataGrid = getService('dataGrid'); @@ -36,9 +41,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view mode', () => { before(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); }); runComparisonTests({ @@ -69,12 +74,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('ES|QL mode', () => { before(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.selectTextBaseLang(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | sort @timestamp desc | limit 10'); await testSubjects.click('querySubmitButton'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); runComparisonTests({ @@ -137,10 +142,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(fieldNames.slice(0, fullFieldNames.length)).to.eql(fullFieldNames); await dataGrid.openComparisonSettingsMenu(); expect(await dataGrid.showAllFieldsSwitchExists()).to.be(false); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('agent'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('@message'); + await unifiedFieldList.clickFieldListItemAdd('agent'); fieldNames = await dataGrid.getComparisonFieldNames(); expect(fieldNames).have.length(selectedFieldNames.length); expect(fieldNames).to.eql(selectedFieldNames); @@ -257,7 +262,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow exiting comparison mode', async () => { await dataGrid.exitComparisonMode(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDocTableLoadingComplete(); }); } } diff --git a/test/functional/apps/discover/group4/_field_list_new_fields.ts b/test/functional/apps/discover/group4/_field_list_new_fields.ts index 02274ecd25ecf7..391d31f91d877b 100644 --- a/test/functional/apps/discover/group4/_field_list_new_fields.ts +++ b/test/functional/apps/discover/group4/_field_list_new_fields.ts @@ -18,7 +18,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const queryBar = getService('queryBar'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'unifiedFieldList']); + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'unifiedFieldList', + ]); describe('Field list new fields in background handling', function () { before(async () => { @@ -26,8 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await common.navigateToApp('discover'); + await timePicker.setCommonlyUsedTime('This_week'); }); after(async () => { @@ -60,11 +65,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.discover.getHitCountInt()).to.be(1); - expect(await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ + expect(await discover.getHitCountInt()).to.be(1); + expect(await unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ '@timestamp', 'a', ]); @@ -80,11 +85,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('the new record was found', async () => { await queryBar.submitQuery(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - return (await PageObjects.discover.getHitCountInt()) === 2; + await unifiedFieldList.waitUntilSidebarHasLoaded(); + return (await discover.getHitCountInt()) === 2; }); - expect(await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ + expect(await unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ '@timestamp', 'a', 'b', @@ -108,11 +113,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hasTimeField: true, }); await dataViews.waitForSwitcherToBe(`${initialPattern}*`); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.discover.getHitCountInt()).to.be(1); - expect(await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ + expect(await discover.getHitCountInt()).to.be(1); + expect(await unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ '@timestamp', 'a', ]); @@ -141,11 +146,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('the new record was found', async () => { await queryBar.submitQuery(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - return (await PageObjects.discover.getHitCountInt()) === 2; + await unifiedFieldList.waitUntilSidebarHasLoaded(); + return (await discover.getHitCountInt()) === 2; }); - expect(await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ + expect(await unifiedFieldList.getSidebarSectionFieldNames('available')).to.eql([ '@timestamp', 'a', ]); diff --git a/test/functional/apps/discover/group5/_field_data.ts b/test/functional/apps/discover/group5/_field_data.ts index 72f0727d6876b3..c155e679ac5246 100644 --- a/test/functional/apps/discover/group5/_field_data.ts +++ b/test/functional/apps/discover/group5/_field_data.ts @@ -17,11 +17,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const queryBar = getService('queryBar'); const browser = getService('browser'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', - 'header', 'discover', - 'visualize', 'timePicker', 'unifiedFieldList', ]); @@ -36,8 +34,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', 'discover:searchFieldsFromSource': true, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); describe('field data', function () { it('search php should show the correct hit count', async function () { @@ -45,7 +43,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async function () { await queryBar.setQuery('php'); await queryBar.submitQuery(); - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); @@ -54,11 +52,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // marks is the style that highlights the text in yellow await queryBar.setQuery('php'); await queryBar.submitQuery(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - const marks = await PageObjects.discover.getMarks(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + const marks = await discover.getMarks(); expect(marks.length).to.be.greaterThan(0); expect(marks.indexOf('php')).to.be(0); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('extension'); + await unifiedFieldList.clickFieldListItemRemove('extension'); }); it('search type:apache should show the correct hit count', async function () { @@ -66,7 +64,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.setQuery('type:apache'); await queryBar.submitQuery(); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); @@ -77,8 +75,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'whitespace but "(" found.'; await queryBar.setQuery('xxx(yyy))'); await queryBar.submitQuery(); - await PageObjects.discover.showsErrorCallout(); - const message = await PageObjects.discover.getDiscoverErrorMessage(); + await discover.showsErrorCallout(); + const message = await discover.getDiscoverErrorMessage(); expect(message).to.contain(expectedError); }); @@ -87,19 +85,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.submitQuery(); const currentUrl = await browser.getCurrentUrl(); const [, hash] = currentUrl.split('#/'); - await PageObjects.common.navigateToUrl( + await common.navigateToUrl( 'discover', hash.replace('columns:!(_source)', 'columns:!(relatedContent)'), { useActualUrl: true } ); await retry.try(async function tryingForTime() { - expect(await PageObjects.discover.getDocHeader()).to.contain('relatedContent'); + expect(await discover.getDocHeader()).to.contain('relatedContent'); - const field = await PageObjects.discover.getDocTableIndex(1); + const field = await discover.getDocTableIndex(1); expect(field).to.contain('og:description'); }); - const marks = await PageObjects.discover.getMarks(); + const marks = await discover.getMarks(); expect(marks.length).to.be(0); }); }); diff --git a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts index 0fa97db9bfbecf..4b301c3d5e9460 100644 --- a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts +++ b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts @@ -17,11 +17,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const queryBar = getService('queryBar'); const browser = getService('browser'); - const PageObjects = getPageObjects([ + const { common, header, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'header', 'discover', - 'visualize', 'timePicker', 'unifiedFieldList', ]); @@ -36,8 +35,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', 'discover:searchFieldsFromSource': false, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); describe('field data', function () { it('search php should show the correct hit count', async function () { @@ -45,18 +44,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async function () { await queryBar.setQuery('php'); await queryBar.submitQuery(); - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); it('the search term should be highlighted in the field data', async function () { // marks is the style that highlights the text in yellow - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - const marks = await PageObjects.discover.getMarks(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + const marks = await discover.getMarks(); expect(marks.length).to.be.greaterThan(0); expect(marks.indexOf('php')).to.be(0); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('extension'); + await unifiedFieldList.clickFieldListItemRemove('extension'); }); it('search type:apache should show the correct hit count', async function () { @@ -64,13 +63,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.setQuery('type:apache'); await queryBar.submitQuery(); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); }); }); it('doc view should show @timestamp and Document columns', async function () { - const Docheader = await PageObjects.discover.getDocHeader(); + const Docheader = await discover.getDocHeader(); expect(Docheader).to.contain('@timestamp'); expect(Docheader).to.contain('Document'); }); @@ -81,8 +80,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'whitespace but "(" found.'; await queryBar.setQuery('xxx(yyy))'); await queryBar.submitQuery(); - await PageObjects.discover.showsErrorCallout(); - const message = await PageObjects.discover.getDiscoverErrorMessage(); + await discover.showsErrorCallout(); + const message = await discover.getDiscoverErrorMessage(); expect(message).to.contain(expectedError); }); @@ -91,21 +90,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.submitQuery(); const currentUrl = await browser.getCurrentUrl(); const [, hash] = currentUrl.split('#/'); - await PageObjects.common.navigateToUrl( + await common.navigateToUrl( 'discover', hash.replace('columns:!()', 'columns:!(relatedContent)'), { useActualUrl: true } ); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async function tryingForTime() { - expect(await PageObjects.discover.getDocHeader()).to.contain('relatedContent'); + expect(await discover.getDocHeader()).to.contain('relatedContent'); - const field = await PageObjects.discover.getDocTableIndex(1); + const field = await discover.getDocTableIndex(1); expect(field).to.contain('relatedContent.url'); }); - const marks = await PageObjects.discover.getMarks(); + const marks = await discover.getMarks(); expect(marks.length).to.be.above(0); expect(marks).to.contain('election'); }); diff --git a/test/functional/apps/discover/group5/_filter_editor.ts b/test/functional/apps/discover/group5/_filter_editor.ts index f23c3cdcaa6a24..e2f568b8eb21d1 100644 --- a/test/functional/apps/discover/group5/_filter_editor.ts +++ b/test/functional/apps/discover/group5/_filter_editor.ts @@ -20,7 +20,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const security = getService('security'); const browser = getService('browser'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'unifiedFieldList']); + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'unifiedFieldList', + ]); const defaultSettings = { defaultIndex: 'logstash-*', }; @@ -35,9 +40,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); log.debug('discover filter editor'); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); describe('filter editor', function () { @@ -66,7 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); expect(await filterBar.hasFilter('nestedField.child', 'nestedValue')).to.be(true); await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be('1'); + expect(await discover.getHitCount()).to.be('1'); }); }); @@ -111,8 +116,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await indexPatterns.create({ title: indexTitle }, { override: true }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern(indexTitle); + await common.navigateToApp('discover'); + await discover.selectIndexPattern(indexTitle); }); it('should support range filter on version fields', async () => { @@ -123,18 +128,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); expect(await filterBar.hasFilter('version', '2.0.0 to 3.0.0')).to.be(true); await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be('1'); + expect(await discover.getHitCount()).to.be('1'); }); }); }); const runFilterTest = async (pinned = false) => { await filterBar.removeAllFilters(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('extension'); await retry.try(async function () { const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be('jpg'); - expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + expect(await discover.getHitCount()).to.be('14,004'); }); await filterBar.addFilter({ field: 'extension.raw', @@ -148,12 +153,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await filterBar.hasFilter('extension.raw', 'css', true, pinned)).to.be(true); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be('css'); - expect(await PageObjects.discover.getHitCount()).to.be('2,159'); + expect(await discover.getHitCount()).to.be('2,159'); }); await browser.refresh(); await retry.try(async function () { expect(await filterBar.hasFilter('extension.raw', 'css', true, pinned)).to.be(true); - expect(await PageObjects.discover.getHitCount()).to.be('2,159'); + expect(await discover.getHitCount()).to.be('2,159'); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 1); expect(await cell.getVisibleText()).to.be('css'); }); @@ -170,7 +175,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); }); } diff --git a/test/functional/apps/discover/group5/_greeting_screen.ts b/test/functional/apps/discover/group5/_greeting_screen.ts index 76728f71fde629..d60e8bb9a32ce3 100644 --- a/test/functional/apps/discover/group5/_greeting_screen.ts +++ b/test/functional/apps/discover/group5/_greeting_screen.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const security = getService('security'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'header', 'discover', 'timePicker']); + const { common, header, discover } = getPageObjects(['common', 'header', 'discover']); const defaultSettings = { defaultIndex: 'logstash-*', }; @@ -37,16 +37,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should create a data view when there are no data views', async () => { await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('management'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('management'); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('dataViews'); await testSubjects.click('checkboxSelectAll'); await testSubjects.click('delete-data-views-button'); await testSubjects.click('confirmModalConfirmButton'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); await dataViews.createFromPrompt({ name: 'logs', hasTimeField: true }); expect(await dataViews.isAdHoc()).to.be(false); @@ -54,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataViews.createFromSearchBar({ name: 'log', adHoc: true, hasTimeField: true }); expect(await dataViews.isAdHoc()).to.be(true); - expect(await PageObjects.discover.getIndexPatterns()).to.eql(['log*\nTemporary', 'logs*']); + expect(await discover.getIndexPatterns()).to.eql(['log*\nTemporary', 'logs*']); }); }); } diff --git a/test/functional/apps/discover/group5/_inspector.ts b/test/functional/apps/discover/group5/_inspector.ts index 5c599778b9cc95..79a13dbe219a04 100644 --- a/test/functional/apps/discover/group5/_inspector.ts +++ b/test/functional/apps/discover/group5/_inspector.ts @@ -12,7 +12,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']); + const { common, timePicker } = getPageObjects(['common', 'timePicker']); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const inspector = getService('inspector'); @@ -40,8 +40,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); // delete .kibana index and update configDoc await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); afterEach(async () => { @@ -67,7 +67,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should display request stats with results', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await inspector.open(); await testSubjects.click('inspectorRequestChooser'); await testSubjects.click(`inspectorRequestChooserDocuments`); diff --git a/test/functional/apps/discover/group5/_large_string.ts b/test/functional/apps/discover/group5/_large_string.ts index 792d5a93504a9a..1c5d203d5c8bd4 100644 --- a/test/functional/apps/discover/group5/_large_string.ts +++ b/test/functional/apps/discover/group5/_large_string.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const queryBar = getService('queryBar'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover']); + const { common, discover } = getPageObjects(['common', 'discover']); describe('test large strings', function () { before(async function () { @@ -42,9 +42,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ' you’ll have to check the laws of the country where you are' + ' located before using this ebook.'; - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await retry.try(async function tryingForTime() { - const rowData = await PageObjects.discover.getDocTableIndex(1, true); + const rowData = await discover.getDocTableIndex(1, true); expect(rowData).to.contain(expectedText); }); }); @@ -55,7 +55,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.setQuery('Newsletter'); await queryBar.submitQuery(); await retry.try(async function tryingForTime() { - const hitCount = await PageObjects.discover.getHitCount(); + const hitCount = await discover.getHitCount(); expect(hitCount).to.be(expectedHitCount); log.debug('test Newsletter keyword is searched'); }); @@ -63,7 +63,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('the search term Newsletter should be highlighted in the field data', async function () { // marks is the style that highlights the text in yellow - const marks = await PageObjects.discover.getMarks(); + const marks = await discover.getMarks(); expect(marks.length).to.be(1); log.debug('Newsletter appears only once'); }); diff --git a/test/functional/apps/discover/group5/_no_data.ts b/test/functional/apps/discover/group5/_no_data.ts index da889b5646a967..6c65dbb2fd7350 100644 --- a/test/functional/apps/discover/group5/_no_data.ts +++ b/test/functional/apps/discover/group5/_no_data.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const dataGrid = getService('dataGrid'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const { common, discover, header } = getPageObjects(['common', 'discover', 'header']); describe('discover no data', () => { const kbnDirectory = 'test/functional/fixtures/kbn_archiver/discover'; @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); log.debug('load kibana with no data'); await kibanaServer.importExport.unload(kbnDirectory); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -36,17 +36,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('when no data opens integrations', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const addIntegrations = await testSubjects.find('kbnOverviewAddIntegrations'); await addIntegrations.click(); - await PageObjects.common.waitUntilUrlIncludes('integrations/browse'); + await common.waitUntilUrlIncludes('integrations/browse'); }); it('adds a new data view when no data views', async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); const dataViewToCreate = 'logstash'; await dataViews.createFromPrompt({ name: dataViewToCreate }); @@ -59,12 +59,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'timepicker:timeDefaults': '{ "from": "2015-09-18T19:37:13.000Z", "to": "now"}', }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await testSubjects.click('tryESQLLink'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('TextBasedLangEditor'); await testSubjects.existOrFail('unifiedHistogramChart'); const rows = await dataGrid.getDocTableRows(); diff --git a/test/functional/apps/discover/group5/_shared_links.ts b/test/functional/apps/discover/group5/_shared_links.ts index 84802a2dd0d4e7..56d4c922f7fc47 100644 --- a/test/functional/apps/discover/group5/_shared_links.ts +++ b/test/functional/apps/discover/group5/_shared_links.ts @@ -16,7 +16,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'share', 'timePicker']); + const { common, discover, share, timePicker } = getPageObjects([ + 'common', + 'discover', + 'share', + 'timePicker', + ]); const browser = getService('browser'); const toasts = getService('toasts'); const deployment = getService('deployment'); @@ -41,10 +46,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'state:storeInSessionStorage': storeStateInSessionStorage, defaultIndex: 'logstash-*', }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.share.clickShareTopNavButton(); + await common.navigateToApp('discover'); + await share.clickShareTopNavButton(); return async () => { await kibanaServer.uiSettings.unset('state:storeInSessionStorage'); @@ -65,7 +70,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow for copying the snapshot URL', async function () { const re = new RegExp(baseUrl + '/app/r.+$'); await retry.try(async () => { - const actualUrl = await PageObjects.share.getSharedUrl(); + const actualUrl = await share.getSharedUrl(); expect(actualUrl).match(re); }); }); @@ -80,7 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { "*',interval:auto,query:(language:kuery,query:'')" + ',sort:!())'; await browser.navigateTo(expectedUrl); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('url to contain default sorting', async () => { // url fallback default sort should have been pushed to URL const url = await browser.getCurrentUrl(); @@ -88,7 +93,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await retry.waitFor('document table to contain the right timestamp', async () => { - const firstRowText = await PageObjects.discover.getDocTableIndex(1); + const firstRowText = await discover.getDocTableIndex(1); return firstRowText.includes('Sep 22, 2015 @ 23:50:13.253'); }); }); @@ -109,18 +114,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const re = new RegExp(baseUrl + '/app/r.*$'); let actualUrl: string = ''; await retry.try(async () => { - actualUrl = await PageObjects.share.getSharedUrl(); + actualUrl = await share.getSharedUrl(); expect(actualUrl).match(re); }); - const actualTime = await PageObjects.timePicker.getTimeConfig(); + const actualTime = await timePicker.getTimeConfig(); await browser.clearSessionStorage(); await browser.get(actualUrl, false); await retry.try(async () => { const resolvedUrl = await browser.getCurrentUrl(); expect(resolvedUrl).to.match(/discover/); - const resolvedTime = await PageObjects.timePicker.getTimeConfig(); + const resolvedTime = await timePicker.getTimeConfig(); expect(resolvedTime.start).to.equal(actualTime.start); expect(resolvedTime.end).to.equal(actualTime.end); }); diff --git a/test/functional/apps/discover/group5/_source_filters.ts b/test/functional/apps/discover/group5/_source_filters.ts index 72163aa75e2f81..9c66cff8f0df3b 100644 --- a/test/functional/apps/discover/group5/_source_filters.ts +++ b/test/functional/apps/discover/group5/_source_filters.ts @@ -16,11 +16,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); - const PageObjects = getPageObjects([ + const { common, timePicker, discover, settings, unifiedFieldList } = getPageObjects([ 'common', 'timePicker', 'discover', - 'header', 'settings', 'unifiedFieldList', ]); @@ -35,19 +34,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); log.debug('management'); - await PageObjects.common.navigateToApp('settings'); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.addFieldFilter('referer'); - await PageObjects.settings.addFieldFilter('relatedContent*'); + await common.navigateToApp('settings'); + await settings.clickKibanaIndexPatterns(); + await settings.clickIndexPatternLogstash(); + await settings.addFieldFilter('referer'); + await settings.addFieldFilter('relatedContent*'); log.debug('discover'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async function () { - expect(await PageObjects.discover.getDocHeader()).to.have.string('Document'); + expect(await discover.getDocHeader()).to.have.string('Document'); }); }); @@ -59,7 +58,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not get the field referer', async function () { - const fieldNames = await PageObjects.unifiedFieldList.getAllFieldNames(); + const fieldNames = await unifiedFieldList.getAllFieldNames(); expect(fieldNames).to.not.contain('referer'); const relatedContentFields = fieldNames.filter( (fieldName) => fieldName.indexOf('relatedContent') === 0 diff --git a/test/functional/apps/discover/group5/_url_state.ts b/test/functional/apps/discover/group5/_url_state.ts index dc99c0ea1a61d0..f8abcc1101dad0 100644 --- a/test/functional/apps/discover/group5/_url_state.ts +++ b/test/functional/apps/discover/group5/_url_state.ts @@ -22,13 +22,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', 'timePicker', 'unifiedFieldList', - 'visualize', ]); const defaultSettings = { @@ -43,8 +42,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -52,14 +51,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a warning and fall back to the default data view when navigating to a URL with an invalid data view ID', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const dataViewId = await PageObjects.discover.getCurrentDataViewId(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); + const dataViewId = await discover.getCurrentDataViewId(); const originalUrl = await browser.getCurrentUrl(); const newUrl = originalUrl.replace(dataViewId, 'invalid-data-view-id'); await browser.get(newUrl); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { expect(await browser.getCurrentUrl()).to.be(originalUrl); expect(await testSubjects.exists('dscDataViewNotFoundShowDefaultWarning')).to.be(true); @@ -67,13 +66,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a warning and fall back to the current data view if the URL is updated to an invalid data view ID', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); const originalHash = await browser.execute<[], string>('return window.location.hash'); - const dataViewId = await PageObjects.discover.getCurrentDataViewId(); + const dataViewId = await discover.getCurrentDataViewId(); const newHash = originalHash.replace(dataViewId, 'invalid-data-view-id'); await browser.execute(`window.location.hash = "${newHash}"`); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { const currentHash = await browser.execute<[], string>('return window.location.hash'); expect(currentHash).to.be(originalHash); @@ -82,8 +81,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should sync Lens global state to Discover sidebar link and carry over the state when navigating to Discover', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.navigateToApp('lens'); + await common.navigateToApp('discover'); + await common.navigateToApp('lens'); await appsMenu.openCollapsibleNav(); let discoverLink = await appsMenu.getLink('Discover'); expect(discoverLink?.href).to.contain( @@ -91,14 +90,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { "&_a=(columns:!(),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!(),interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await appsMenu.closeCollapsibleNav(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await filterBar.addFilter({ field: 'extension.raw', operation: 'is one of', value: ['jpg', 'css'], }); await filterBar.toggleFilterPinned('extension.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await appsMenu.openCollapsibleNav(); discoverLink = await appsMenu.getLink('Discover'); expect(discoverLink?.href).to.contain( @@ -112,14 +111,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { "interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await appsMenu.clickLink('Discover', { category: 'kibana' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.hasFilter('extension.raw', '', undefined, true)).to.be(true); expect(await filterBar.isFilterPinned('extension.raw')).to.be(true); - expect(await PageObjects.timePicker.getTimeConfig()).to.eql({ + expect(await timePicker.getTimeConfig()).to.eql({ start: 'Sep 19, 2015 @ 06:31:44.000', end: 'Sep 23, 2015 @ 18:31:44.000', }); - expect(await PageObjects.discover.getHitCount()).to.be('11,268'); + expect(await discover.getHitCount()).to.be('11,268'); }); it('should merge custom global filters with saved search filters', async () => { @@ -127,40 +126,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'timepicker:timeDefaults': '{ "from": "Sep 18, 2015 @ 19:37:13.000", "to": "Sep 23, 2015 @ 02:30:09.000"}', }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await filterBar.addFilter({ field: 'bytes', operation: 'is between', value: { from: '1000', to: '2000' }, }); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const totalHitsForOneFilter = '737'; const totalHitsForTwoFilters = '137'; - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForOneFilter); + expect(await discover.getHitCount()).to.be(totalHitsForOneFilter); - await PageObjects.discover.saveSearch('testFilters'); + await discover.saveSearch('testFilters'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForOneFilter); + expect(await discover.getHitCount()).to.be(totalHitsForOneFilter); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForOneFilter); + expect(await discover.getHitCount()).to.be(totalHitsForOneFilter); const url = await browser.getCurrentUrl(); const savedSearchIdMatch = url.match(/view\/([^?]+)\?/); @@ -171,8 +170,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.openNewTab(); await browser.get(`${deployment.getHostPort()}/app/discover#/view/${savedSearchId}`); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect((await dataGrid.getRowsText()).slice(0, 6)).to.eql([ 'Sep 22, 2015 @ 20:44:05.521jpg1,808', @@ -183,7 +182,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Sep 22, 2015 @ 19:40:17.903jpg1,557', ]); - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForOneFilter); + expect(await discover.getHitCount()).to.be(totalHitsForOneFilter); await browser.openNewTab(); await browser.get( @@ -197,8 +196,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { "to:'2015-09-23T18:31:44.000Z'))" ); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); const filteredRows = [ 'Sep 22, 2015 @ 20:41:53.463png1,969', @@ -210,16 +209,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; expect((await dataGrid.getRowsText()).slice(0, 6)).to.eql(filteredRows); - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForTwoFilters); + expect(await discover.getHitCount()).to.be(totalHitsForTwoFilters); await testSubjects.existOrFail('unsavedChangesBadge'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect((await dataGrid.getRowsText()).slice(0, 6)).to.eql(filteredRows); - expect(await PageObjects.discover.getHitCount()).to.be(totalHitsForTwoFilters); + expect(await discover.getHitCount()).to.be(totalHitsForTwoFilters); await testSubjects.existOrFail('unsavedChangesBadge'); }); }); diff --git a/test/functional/apps/discover/group6/_field_stats_table.ts b/test/functional/apps/discover/group6/_field_stats_table.ts index a56f1f3fe9dae4..c8381976ffbabe 100644 --- a/test/functional/apps/discover/group6/_field_stats_table.ts +++ b/test/functional/apps/discover/group6/_field_stats_table.ts @@ -10,7 +10,12 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'header']); + const { common, discover, timePicker, header } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'header', + ]); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); @@ -35,14 +40,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { [true, false].forEach((shouldSearchFieldsFromSource) => { describe(`discover:searchFieldsFromSource: ${shouldSearchFieldsFromSource}`, function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ ...defaultSettings, 'discover:searchFieldsFromSource': shouldSearchFieldsFromSource, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); after(async () => { @@ -51,20 +56,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show Field Statistics data in data view mode', async () => { await testSubjects.click('dscViewModeFieldStatsButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('dataVisualizerTableContainer'); await testSubjects.click('dscViewModeDocumentButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('discoverDocTable'); }); it('should show Field Statistics data in ES|QL mode', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.click('dscViewModeFieldStatsButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('dataVisualizerTableContainer'); }); }); diff --git a/test/functional/apps/discover/group6/_sidebar.ts b/test/functional/apps/discover/group6/_sidebar.ts index 9193f0d582c13f..3e746a3726bcc8 100644 --- a/test/functional/apps/discover/group6/_sidebar.ts +++ b/test/functional/apps/discover/group6/_sidebar.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header, unifiedSearch, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -42,30 +42,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*', }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); afterEach(async () => { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.savedObjects.cleanStandardList(); await kibanaServer.uiSettings.replace({}); - await PageObjects.unifiedFieldList.cleanSidebarLocalStorage(); + await unifiedFieldList.cleanSidebarLocalStorage(); }); describe('field filtering', function () { it('should reveal and hide the filter form when the toggle is clicked', async function () { - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); - await PageObjects.unifiedFieldList.closeSidebarFieldFilter(); + await unifiedFieldList.openSidebarFieldFilter(); + await unifiedFieldList.closeSidebarFieldFilter(); }); it('should filter by field type', async function () { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.openSidebarFieldFilter(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); @@ -73,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('first updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '6 available fields. 1 empty field. 3 meta fields.' ); }); @@ -82,7 +82,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('second updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '10 available fields. 3 empty fields. 4 meta fields.' ); }); @@ -91,56 +91,50 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('reset', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - INITIAL_FIELD_LIST_SUMMARY + (await unifiedFieldList.getSidebarAriaDescription()) === INITIAL_FIELD_LIST_SUMMARY ); }); }); it('should show filters by type in ES|QL view', async function () { - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.openSidebarFieldFilter(); let options = await find.allByCssSelector('[data-test-subj*="typeFilter"]'); expect(options).to.have.length(6); - await PageObjects.unifiedFieldList.closeSidebarFieldFilter(); + await unifiedFieldList.closeSidebarFieldFilter(); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10000`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.openSidebarFieldFilter(); options = await find.allByCssSelector('[data-test-subj*="typeFilter"]'); expect(options).to.have.length(6); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '82 available fields.' - ); + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be('82 available fields.'); await testSubjects.click('typeFilter-number'); await retry.waitFor('updates', async () => { - return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - '6 available fields.' - ); + return (await unifiedFieldList.getSidebarAriaDescription()) === '6 available fields.'; }); }); it('should show empty fields in ES|QL view', async function () { - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.discover.selectTextBaseLang(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 10 | keep machine.ram_range, bytes `; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.openSidebarFieldFilter(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.openSidebarFieldFilter(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '2 selected fields. 1 available field. 1 empty field.' ); }); @@ -148,10 +142,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('search', function () { beforeEach(async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); }); @@ -162,94 +156,89 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitFor('reset', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === - INITIAL_FIELD_LIST_SUMMARY + (await unifiedFieldList.getSidebarAriaDescription()) === INITIAL_FIELD_LIST_SUMMARY ); }); }); it('should be able to search by string', async function () { - await PageObjects.unifiedFieldList.findFieldByName('i'); + await unifiedFieldList.findFieldByName('i'); await retry.waitFor('first updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '28 available fields. 2 empty fields. 3 meta fields.' ); }); - await PageObjects.unifiedFieldList.findFieldByName('p'); + await unifiedFieldList.findFieldByName('p'); await retry.waitFor('second updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '4 available fields. 0 meta fields.' ); }); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ') - ).to.be('clientip, ip, relatedContent.og:description, relatedContent.twitter:description'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ')).to.be( + 'clientip, ip, relatedContent.og:description, relatedContent.twitter:description' + ); }); it('should be able to search by wildcard', async function () { - await PageObjects.unifiedFieldList.findFieldByName('relatedContent*image'); + await unifiedFieldList.findFieldByName('relatedContent*image'); await retry.waitFor('updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '2 available fields. 0 meta fields.' ); }); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ') - ).to.be('relatedContent.og:image, relatedContent.twitter:image'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ')).to.be( + 'relatedContent.og:image, relatedContent.twitter:image' + ); }); it('should be able to search with spaces as wildcard', async function () { - await PageObjects.unifiedFieldList.findFieldByName('relatedContent image'); + await unifiedFieldList.findFieldByName('relatedContent image'); await retry.waitFor('updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '4 available fields. 0 meta fields.' ); }); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ') - ).to.be( + expect((await unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ')).to.be( 'relatedContent.og:image, relatedContent.og:image:height, relatedContent.og:image:width, relatedContent.twitter:image' ); }); it('should be able to search with fuzzy search (1 typo)', async function () { - await PageObjects.unifiedFieldList.findFieldByName('rel4tedContent.art'); + await unifiedFieldList.findFieldByName('rel4tedContent.art'); await retry.waitFor('updates', async () => { return ( - (await PageObjects.unifiedFieldList.getSidebarAriaDescription()) === + (await unifiedFieldList.getSidebarAriaDescription()) === '4 available fields. 0 meta fields.' ); }); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ') - ).to.be( + expect((await unifiedFieldList.getSidebarSectionFieldNames('available')).join(', ')).to.be( 'relatedContent.article:modified_time, relatedContent.article:published_time, relatedContent.article:section, relatedContent.article:tag' ); }); it('should ignore empty search', async function () { - await PageObjects.unifiedFieldList.findFieldByName(' '); // only spaces + await unifiedFieldList.findFieldByName(' '); // only spaces await retry.waitFor('the clear button', async () => { return await testSubjects.exists('clearSearchButton'); }); // expect no changes in the list - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); }); @@ -257,47 +246,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('field stats', function () { it('should work for regular and pinned filters', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const allTermsResult = 'jpg\n65.0%\ncss\n15.4%\npng\n9.8%\ngif\n6.6%\nphp\n3.2%'; - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be(allTermsResult); await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'jpg' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const onlyJpgResult = 'jpg\n100%'; - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be(onlyJpgResult); await filterBar.toggleFilterNegated('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const jpgExcludedResult = 'css\n44.1%\npng\n28.0%\ngif\n18.8%\nphp\n9.1%'; - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be( jpgExcludedResult ); await filterBar.toggleFilterPinned('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be( jpgExcludedResult ); await browser.refresh(); - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be( jpgExcludedResult ); await filterBar.toggleFilterEnabled('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be(allTermsResult); }); }); @@ -309,13 +298,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should collapse when clicked', async function () { - await PageObjects.discover.closeSidebar(); + await discover.closeSidebar(); await testSubjects.existOrFail('dscShowSidebarButton'); await testSubjects.missingOrFail('fieldList'); }); it('should expand when clicked', async function () { - await PageObjects.discover.openSidebar(); + await discover.openSidebar(); await testSubjects.existOrFail('discover-sidebar'); await testSubjects.existOrFail('fieldList'); }); @@ -323,40 +312,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('renders field groups', function () { it('should show field list groups excluding subfields', async function () { - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); // Initial Available fields const expectedInitialAvailableFields = '@message, @tags, @timestamp, agent, bytes, clientip, extension, geo.coordinates, geo.dest, geo.src, geo.srcdest, headings, host, index, ip, links, machine.os, machine.ram, machine.ram_range, memory, nestedField.child, phpmemory, referer, relatedContent.article:modified_time, relatedContent.article:published_time, relatedContent.article:section, relatedContent.article:tag, relatedContent.og:description, relatedContent.og:image, relatedContent.og:image:height, relatedContent.og:image:width, relatedContent.og:site_name, relatedContent.og:title, relatedContent.og:type, relatedContent.og:url, relatedContent.twitter:card, relatedContent.twitter:description, relatedContent.twitter:image, relatedContent.twitter:site, relatedContent.twitter:title, relatedContent.url, request, response, spaces, type, url, utc_time, xss'; - let availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'available' - ); + let availableFields = await unifiedFieldList.getSidebarSectionFieldNames('available'); expect(availableFields.length).to.be(48); expect(availableFields.join(', ')).to.be(expectedInitialAvailableFields); // Available fields after scrolling down const metaSectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) + unifiedFieldList.getSidebarSectionSelector('meta', true) ); await metaSectionButton.scrollIntoViewIfNecessary(); await retry.waitFor('list to update after scrolling', async () => { - availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'available' - ); + availableFields = await unifiedFieldList.getSidebarSectionFieldNames('available'); return availableFields.length === 48; }); expect(availableFields.join(', ')).to.be(`${expectedInitialAvailableFields}`); // Expand Meta section - await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ') - ).to.be('_id, _ignored, _index, _score'); + await unifiedFieldList.toggleSidebarSection('meta'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ')).to.be( + '_id, _ignored, _index, _score' + ); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); }); @@ -365,13 +350,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'discover:searchFieldsFromSource': true }); await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); // Initial Available fields - const availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'available' - ); + const availableFields = await unifiedFieldList.getSidebarSectionFieldNames('available'); expect(availableFields.length).to.be(48); expect( availableFields @@ -383,124 +366,115 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Available fields after scrolling down const metaSectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) + unifiedFieldList.getSidebarSectionSelector('meta', true) ); await metaSectionButton.scrollIntoViewIfNecessary(); // Expand Meta section - await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ') - ).to.be('_id, _ignored, _index, _score'); + await unifiedFieldList.toggleSidebarSection('meta'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ')).to.be( + '_id, _ignored, _index, _score' + ); // Expand Unmapped section - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('unmapped')).join(', ') - ).to.be('relatedContent'); + await unifiedFieldList.toggleSidebarSection('unmapped'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('unmapped')).join(', ')).to.be( + 'relatedContent' + ); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 1 unmapped field. 5 empty fields. 4 meta fields.' ); }); it('should show selected and popular fields', async function () { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ') - ).to.be('extension, @message'); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@message'); + await discover.waitUntilSearchingHasFinished(); - const availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'available' + expect((await unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ')).to.be( + 'extension, @message' ); + + const availableFields = await unifiedFieldList.getSidebarSectionFieldNames('available'); expect(availableFields.includes('extension')).to.be(true); expect(availableFields.includes('@message')).to.be(true); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '2 selected fields. 2 popular fields. 48 available fields. 5 empty fields. 4 meta fields.' ); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('@message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('@message'); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('_id'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@message'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('_id'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@message'); + await discover.waitUntilSearchingHasFinished(); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ') - ).to.be('extension, _id, @message'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ')).to.be( + 'extension, _id, @message' + ); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('popular')).join(', ') - ).to.be('@message, _id, extension'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('popular')).join(', ')).to.be( + '@message, _id, extension' + ); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '3 selected fields. 3 popular fields. 48 available fields. 5 empty fields. 4 meta fields.' ); // verify popular fields were persisted await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + await unifiedFieldList.waitUntilSidebarHasLoaded(); + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '3 selected fields. 3 popular fields. 48 available fields. 5 empty fields. 4 meta fields.' ); }); it('should show selected and available fields in ES|QL mode', async function () { - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10000'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '82 available fields.' - ); + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be('82 available fields.'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('extension'); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.clickFieldListItemRemove('extension'); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( - '82 available fields.' - ); + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be('82 available fields.'); const testQuery = `from logstash-* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '2 selected fields. 2 available fields.' ); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ') - ).to.be('countB, geo.dest'); + expect((await unifiedFieldList.getSidebarSectionFieldNames('selected')).join(', ')).to.be( + 'countB, geo.dest' + ); - await PageObjects.unifiedSearch.switchToDataViewMode(); + await unifiedSearch.switchToDataViewMode(); - await PageObjects.unifiedSearch.switchDataView( - 'discover-dataView-switch-link', - 'logstash-*' - ); + await unifiedSearch.switchDataView('discover-dataView-switch-link', 'logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '48 available fields. 5 empty fields. 4 meta fields.' ); }); @@ -511,35 +485,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/kbn_archiver/index_pattern_without_timefield' ); await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); await dataViews.switchToAndValidate('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '0 available fields. 0 meta fields.' ); await testSubjects.missingOrFail( - `${PageObjects.unifiedFieldList.getSidebarSectionSelector('available')}-fetchWarning` + `${unifiedFieldList.getSidebarSectionSelector('available')}-fetchWarning` ); await testSubjects.existOrFail( - `${PageObjects.unifiedFieldList.getSidebarSectionSelector( - 'available' - )}NoFieldsCallout-noFieldsExist` + `${unifiedFieldList.getSidebarSectionSelector('available')}NoFieldsCallout-noFieldsExist` ); await dataViews.switchToAndValidate('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); await kibanaServer.importExport.unload( @@ -556,41 +528,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); await dataViews.switchToAndValidate('without-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '6 available fields. 4 meta fields.' ); await dataViews.switchToAndValidate('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '0 available fields. 7 empty fields. 4 meta fields.' ); await testSubjects.existOrFail( - `${PageObjects.unifiedFieldList.getSidebarSectionSelector( - 'available' - )}NoFieldsCallout-noFieldsMatch` + `${unifiedFieldList.getSidebarSectionSelector('available')}NoFieldsCallout-noFieldsMatch` ); await dataViews.switchToAndValidate('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); @@ -604,27 +574,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should work when filters change', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be( 'jpg\n65.0%\ncss\n15.4%\npng\n9.8%\ngif\n6.6%\nphp\n3.2%' ); await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'jpg' }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); // check that the filter was passed down to the sidebar - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); expect(await testSubjects.getVisibleText('dscFieldStats-topValues')).to.be('jpg\n100%'); }); @@ -635,27 +605,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); await dataViews.switchToAndValidate('indices-stats*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '6873 available fields. 4 meta fields.' ); await dataViews.switchToAndValidate('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); @@ -671,14 +641,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); - await PageObjects.discover.addRuntimeField( + await discover.addRuntimeField( '_bytes-runtimefield', `emit((doc["bytes"].value * 2).toString())` ); @@ -687,17 +657,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return !(await testSubjects.exists('fieldEditor')); }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '49 available fields. 5 empty fields. 4 meta fields.' ); - let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + let allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_bytes-runtimefield')).to.be(true); - await PageObjects.discover.editField('_bytes-runtimefield'); + await discover.editField('_bytes-runtimefield'); await fieldEditor.enableCustomLabel(); await fieldEditor.setCustomLabel('_bytes-runtimefield2'); await fieldEditor.save(); @@ -706,64 +676,64 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return !(await testSubjects.exists('fieldEditor')); }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '49 available fields. 5 empty fields. 4 meta fields.' ); - allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_bytes-runtimefield2')).to.be(true); expect(allFields.includes('_bytes-runtimefield')).to.be(false); - await PageObjects.discover.removeField('_bytes-runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.removeField('_bytes-runtimefield'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); - allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_bytes-runtimefield2')).to.be(false); expect(allFields.includes('_bytes-runtimefield')).to.be(false); }); it('should render even when retrieving documents failed with an error', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); - await PageObjects.discover.addRuntimeField('_invalid-runtimefield', `emit(‘’);`); + await discover.addRuntimeField('_invalid-runtimefield', `emit(‘’);`); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // error in fetching documents because of the invalid runtime field - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); // check that the sidebar is rendered - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '49 available fields. 5 empty fields. 4 meta fields.' ); - let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + let allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_invalid-runtimefield')).to.be(true); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.showsErrorCallout(); // still has error + await header.waitUntilLoadingHasFinished(); + await discover.showsErrorCallout(); // still has error // check that the sidebar is rendered event after a refresh - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); + allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('_invalid-runtimefield')).to.be(true); - await PageObjects.discover.removeField('_invalid-runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.removeField('_invalid-runtimefield'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); it('should work correctly when time range is updated', async function () { @@ -775,35 +745,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( INITIAL_FIELD_LIST_SUMMARY ); await dataViews.switchToAndValidate('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '0 available fields. 7 empty fields. 4 meta fields.' ); await testSubjects.existOrFail( - `${PageObjects.unifiedFieldList.getSidebarSectionSelector( - 'available' - )}NoFieldsCallout-noFieldsMatch` + `${unifiedFieldList.getSidebarSectionSelector('available')}NoFieldsCallout-noFieldsMatch` ); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 21, 2019 @ 00:00:00.000', 'Sep 23, 2019 @ 00:00:00.000' ); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( + expect(await unifiedFieldList.getSidebarAriaDescription()).to.be( '7 available fields. 4 meta fields.' ); @@ -818,35 +786,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should remove the table column after a field was deleted', async () => { const newField = '_test_field_and_column_removal'; - await PageObjects.discover.addRuntimeField(newField, `emit("hi there")`); + await discover.addRuntimeField(newField, `emit("hi there")`); await retry.waitFor('form to close', async () => { return !(await testSubjects.exists('fieldEditor')); }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - let selectedFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'selected' - ); + let selectedFields = await unifiedFieldList.getSidebarSectionFieldNames('selected'); expect(selectedFields.includes(newField)).to.be(false); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(newField); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await unifiedFieldList.clickFieldListItemAdd(newField); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - selectedFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('selected'); + selectedFields = await unifiedFieldList.getSidebarSectionFieldNames('selected'); expect(selectedFields.includes(newField)).to.be(true); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', newField]); - await PageObjects.discover.removeField(newField); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await discover.removeField(newField); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await retry.waitFor('sidebar to update', async () => { - return !(await PageObjects.unifiedFieldList.getAllFieldNames()).includes(newField); + return !(await unifiedFieldList.getAllFieldNames()).includes(newField); }); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); diff --git a/test/functional/apps/discover/group6/_sidebar_field_stats.ts b/test/functional/apps/discover/group6/_sidebar_field_stats.ts index e2c890a8916a5a..3cfa2c1da20af1 100644 --- a/test/functional/apps/discover/group6/_sidebar_field_stats.ts +++ b/test/functional/apps/discover/group6/_sidebar_field_stats.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -42,26 +42,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('data view fields', function () { before(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - - await PageObjects.discover.addRuntimeField( - '_is_large', - 'emit(doc["bytes"].value > 1024)', - 'boolean' - ); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); + + await discover.addRuntimeField('_is_large', 'emit(doc["bytes"].value > 1024)', 'boolean'); await retry.waitFor('form to close', async () => { return !(await testSubjects.exists('fieldEditor')); }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); it('should show a top values popover for a boolean runtime field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('_is_large'); + await unifiedFieldList.clickFieldListItem('_is_large'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -71,11 +67,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '14,004 records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a histogram and top values popover for numeric field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.contain('Top values'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.contain('Distribution'); @@ -88,11 +84,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '14,004 records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for a keyword field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -102,11 +98,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '14,004 records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for an ip field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('clientip'); + await unifiedFieldList.clickFieldListItem('clientip'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -116,21 +112,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '14,004 records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a date histogram popover for a date field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); + await unifiedFieldList.clickFieldListItem('@timestamp'); await testSubjects.existOrFail('unifiedFieldStats-timeDistribution'); await testSubjects.missingOrFail('dscFieldStats-buttonGroup-topValuesButton'); expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '14,004 records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show examples for geo points field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('geo.coordinates'); + await unifiedFieldList.clickFieldListItem('geo.coordinates'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -140,27 +136,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '100 sample records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); }); describe('ES|QL columns', function () { beforeEach(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); }); it('should show top values popover for numeric field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -169,16 +165,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '42 sample values' ); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter('bytes', '0'); + await unifiedFieldList.clickFieldListPlusFilter('bytes', '0'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500\n| WHERE \`bytes\`==0` ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for a keyword field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('extension.raw'); + await unifiedFieldList.clickFieldListItem('extension.raw'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -189,17 +185,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '500 sample values' ); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter('extension.raw', 'css'); + await unifiedFieldList.clickFieldListPlusFilter('extension.raw', 'css'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500\n| WHERE \`extension.raw\`=="css"` ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for an ip field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('clientip'); + await unifiedFieldList.clickFieldListItem('clientip'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -210,17 +206,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '32 sample values' ); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter('clientip', '216.126.255.31'); + await unifiedFieldList.clickFieldListPlusFilter('clientip', '216.126.255.31'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500\n| WHERE \`clientip\`::string=="216.126.255.31"` ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for _index field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('_index'); + await unifiedFieldList.clickFieldListItem('_index'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -230,22 +226,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '500 sample values' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should not have stats for a date field yet but create an is not null filter', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); - await PageObjects.unifiedFieldList.clickFieldListExistsFilter('@timestamp'); + await unifiedFieldList.clickFieldListItem('@timestamp'); + await unifiedFieldList.clickFieldListExistsFilter('@timestamp'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500\n| WHERE \`@timestamp\` is not null` ); await testSubjects.missingOrFail('dscFieldStats-statsFooter'); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show examples for geo points field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('geo.coordinates'); + await unifiedFieldList.clickFieldListItem('geo.coordinates'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -255,11 +251,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '100 sample records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show examples for text field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await unifiedFieldList.clickFieldListItem('extension'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -270,17 +266,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '100 sample records' ); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter('extension', 'css'); + await unifiedFieldList.clickFieldListPlusFilter('extension', 'css'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500\n| WHERE \`extension\`=="css"` ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show examples for _id field', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('_id'); + await unifiedFieldList.clickFieldListItem('_id'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -290,17 +286,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '100 sample records' ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for a more complex query', async () => { const testQuery = `from logstash-* | sort @timestamp desc | limit 50 | stats avg(bytes) by geo.dest | limit 3`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.clickFieldListItem('avg(bytes)'); + await unifiedFieldList.clickFieldListItem('avg(bytes)'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); @@ -309,38 +305,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '3 sample values' ); - await PageObjects.unifiedFieldList.clickFieldListPlusFilter('avg(bytes)', '5453'); + await unifiedFieldList.clickFieldListPlusFilter('avg(bytes)', '5453'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql( `from logstash-* | sort @timestamp desc | limit 50 | stats avg(bytes) by geo.dest | limit 3\n| WHERE \`avg(bytes)\`==5453` ); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); it('should show a top values popover for a boolean field', async () => { const testQuery = `row enabled = true`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); - await PageObjects.unifiedFieldList.clickFieldListItem('enabled'); + await unifiedFieldList.clickFieldListItem('enabled'); await testSubjects.existOrFail('dscFieldStats-topValues'); expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); expect(topValuesRows.length).to.eql(1); - expect(await PageObjects.unifiedFieldList.getFieldStatsTopValueBucketsVisibleText()).to.be( + expect(await unifiedFieldList.getFieldStatsTopValueBucketsVisibleText()).to.be( 'true\n100%' ); expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( '1 sample value' ); - await PageObjects.unifiedFieldList.clickFieldListMinusFilter('enabled', 'true'); + await unifiedFieldList.clickFieldListMinusFilter('enabled', 'true'); const editorValue = await monacoEditor.getCodeEditorValue(); expect(editorValue).to.eql(`row enabled = true\n| WHERE \`enabled\`!=true`); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); }); }); }); diff --git a/test/functional/apps/discover/group6/_time_field_column.ts b/test/functional/apps/discover/group6/_time_field_column.ts index 4ad9ecbdde7156..f8279d532e6c4e 100644 --- a/test/functional/apps/discover/group6/_time_field_column.ts +++ b/test/functional/apps/discover/group6/_time_field_column.ts @@ -17,7 +17,7 @@ const SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP = 'searchWithSelectedColumnsAnd export default function ({ getService, getPageObjects }: FtrProviderContext) { const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, dashboard, unifiedFieldList, header } = getPageObjects([ 'common', 'discover', 'timePicker', @@ -69,13 +69,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getHeaderFields()).to.eql( hideTimeFieldColumnSetting || !hasTimeField ? ['Document'] : ['@timestamp', 'Document'] ); - await PageObjects.discover.saveSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); + await discover.waitUntilSearchingHasFinished(); const isTimestampUnavailableInSidebar = isEsqlMode && !hasTimeField; if (!isTimestampUnavailableInSidebar) { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( !hasTimeField @@ -86,13 +86,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - await PageObjects.discover.saveSearch( - `${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}`, - true - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}`, true); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('@timestamp'); + await unifiedFieldList.clickFieldListItemRemove('@timestamp'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( hideTimeFieldColumnSetting || !hasTimeField ? ['Document'] : ['@timestamp', 'Document'] @@ -101,12 +98,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } // check in Dashboard - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); await dashboardAddPanel.closeAddPanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( @@ -116,11 +113,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (!isTimestampUnavailableInSidebar) { await dashboardPanelActions.removePanelByTitle(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}`); await dashboardAddPanel.closeAddPanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( @@ -146,8 +143,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { isEsqlMode?: boolean; }) { // check in Discover - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('extension'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( @@ -157,19 +154,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - await PageObjects.discover.saveSearch(`${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}`); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(`${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}`); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('@timestamp'); + await unifiedFieldList.clickFieldListItemAdd('@timestamp'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql(['bytes', 'extension', '@timestamp']); }); - await PageObjects.discover.saveSearch( + await discover.saveSearch( `${SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP}${savedSearchSuffix}`, true ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await dataGrid.clickMoveColumnLeft('@timestamp'); await retry.try(async () => { @@ -181,7 +178,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes', 'extension']); }); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('@timestamp'); + await unifiedFieldList.clickFieldListItemRemove('@timestamp'); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( hideTimeFieldColumnSetting || !hasTimeField || isEsqlMode @@ -191,12 +188,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // check in Dashboard - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.clickNewDashboard(); + await common.navigateToApp('dashboard'); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch(`${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}`); await dashboardAddPanel.closeAddPanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql( @@ -209,13 +206,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.removePanelByTitle( `${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}` ); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch( `${SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP}${savedSearchSuffix}` ); await dashboardAddPanel.closeAddPanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { expect(await dataGrid.getHeaderFields()).to.eql(['bytes', 'extension', '@timestamp']); @@ -228,14 +225,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe(`should${hideTimeFieldColumnSetting ? ' not' : ''} add a time field column`, () => { beforeEach(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ ...defaultSettings, 'doc_table:legacy': false, 'doc_table:hideTimeColumn': hideTimeFieldColumnSetting, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); describe('data view mode', () => { @@ -264,7 +261,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should render initial columns correctly', async () => { @@ -287,7 +284,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('ESQL mode', () => { it('should render initial columns correctly', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await checkInitialColumns({ hasTimeField: true, @@ -298,10 +295,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render initial columns correctly when no time field', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10 | drop @timestamp'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await checkInitialColumns({ hasTimeField: false, @@ -312,7 +309,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render selected columns correctly', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await checkSelectedColumns({ hasTimeField: true, @@ -331,55 +328,45 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'doc_table:hideTimeColumn': hideTimeFieldColumnSetting, 'doc_table:legacy': true, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); it('should render initial columns correctly', async () => { // no columns - await PageObjects.discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['Document'] : ['@timestamp', 'Document'] ); - await PageObjects.discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}-`); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}-`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql(['Document']); - await PageObjects.discover.loadSavedSearch( - `${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQL` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQL`); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['Document'] : ['@timestamp', 'Document'] ); - await PageObjects.discover.loadSavedSearch( - `${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQLdrop` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_NO_COLUMNS}${savedSearchSuffix}ESQLdrop`); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['Document']); // only @timestamp is selected - await PageObjects.discover.loadSavedSearch( - `${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['@timestamp'] : ['@timestamp', '@timestamp'] ); - await PageObjects.discover.loadSavedSearch( - `${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}-` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}-`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql(['@timestamp']); - await PageObjects.discover.loadSavedSearch( - `${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}ESQL` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_WITH_ONLY_TIMESTAMP}${savedSearchSuffix}ESQL`); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['@timestamp'] : ['@timestamp', 'Document'] ); @@ -387,49 +374,45 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should render selected columns correctly', async () => { // with selected columns - await PageObjects.discover.loadSavedSearch( - `${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['bytes', 'extension'] : ['@timestamp', 'bytes', 'extension'] ); - await PageObjects.discover.loadSavedSearch( - `${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}-` - ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.loadSavedSearch(`${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}-`); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql(['bytes', 'extension']); - await PageObjects.discover.loadSavedSearch( + await discover.loadSavedSearch( `${SEARCH_WITH_SELECTED_COLUMNS}${savedSearchSuffix}ESQL` ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['bytes', 'extension']); // with selected columns and @timestamp - await PageObjects.discover.loadSavedSearch( + await discover.loadSavedSearch( `${SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP}${savedSearchSuffix}` ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql( hideTimeFieldColumnSetting ? ['bytes', 'extension', '@timestamp'] : ['@timestamp', 'bytes', 'extension', '@timestamp'] ); - await PageObjects.discover.loadSavedSearch( + await discover.loadSavedSearch( `${SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP}${savedSearchSuffix}-` ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await docTable.getHeaderFields()).to.eql(['bytes', 'extension', '@timestamp']); - await PageObjects.discover.loadSavedSearch( + await discover.loadSavedSearch( `${SEARCH_WITH_SELECTED_COLUMNS_AND_TIMESTAMP}${savedSearchSuffix}ESQL` ); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['bytes', 'extension', '@timestamp']); }); }); diff --git a/test/functional/apps/discover/group6/_unsaved_changes_badge.ts b/test/functional/apps/discover/group6/_unsaved_changes_badge.ts index aedbc7f99372e9..d1c6e42e34aa72 100644 --- a/test/functional/apps/discover/group6/_unsaved_changes_badge.ts +++ b/test/functional/apps/discover/group6/_unsaved_changes_badge.ts @@ -22,13 +22,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const monacoEditor = getService('monacoEditor'); const browser = getService('browser'); - const PageObjects = getPageObjects([ - 'settings', + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', 'timePicker', - 'dashboard', 'unifiedFieldList', ]); const security = getService('security'); @@ -51,65 +49,65 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); it('should not show the badge initially nor after changes to a draft saved search', async () => { await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + await unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); }); it('should show the badge only after changes to a persisted saved search', async () => { - await PageObjects.discover.saveSearch(SAVED_SEARCH_NAME); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_NAME); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.saveUnsavedChanges(); + await discover.saveUnsavedChanges(); await testSubjects.missingOrFail('unsavedChangesBadge'); }); it('should not show a badge after loading a saved search, only after changes', async () => { - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NAME); + await discover.loadSavedSearch(SAVED_SEARCH_NAME); await testSubjects.missingOrFail('unsavedChangesBadge'); - await PageObjects.discover.chooseBreakdownField('_index'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.chooseBreakdownField('_index'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); }); it('should allow to revert changes', async () => { - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NAME); + await discover.loadSavedSearch(SAVED_SEARCH_NAME); await testSubjects.missingOrFail('unsavedChangesBadge'); // test changes to columns expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes']); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes', 'extension']); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes']); await testSubjects.missingOrFail('unsavedChangesBadge'); @@ -118,13 +116,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataGrid.getCurrentSampleSizeValue()).to.be(500); await dataGrid.changeSampleSizeValue(250); await dataGrid.clickGridSettings(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(250); await dataGrid.clickGridSettings(); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); await testSubjects.missingOrFail('unsavedChangesBadge'); await dataGrid.clickGridSettings(); expect(await dataGrid.getCurrentSampleSizeValue()).to.be(500); @@ -133,95 +131,95 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // test changes to rows per page await dataGrid.checkCurrentRowsPerPageToBe(100); await dataGrid.changeRowsPerPageTo(25); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); await dataGrid.checkCurrentRowsPerPageToBe(25); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); await testSubjects.missingOrFail('unsavedChangesBadge'); await dataGrid.checkCurrentRowsPerPageToBe(100); }); it('should hide the badge once user manually reverts changes', async () => { - await PageObjects.discover.loadSavedSearch(SAVED_SEARCH_NAME); + await discover.loadSavedSearch(SAVED_SEARCH_NAME); await testSubjects.missingOrFail('unsavedChangesBadge'); // changes to columns expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes']); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes', 'extension']); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.unifiedFieldList.clickFieldListItemRemove('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('extension'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'bytes']); await testSubjects.missingOrFail('unsavedChangesBadge'); // test changes to breakdown field - await PageObjects.discover.chooseBreakdownField('_index'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.chooseBreakdownField('_index'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.clearBreakdownField(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.clearBreakdownField(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); }); it('should not show the badge after pinning the first filter but after disabling a filter', async () => { await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'png' }); await filterBar.addFilter({ field: 'bytes', operation: 'exists' }); - await PageObjects.discover.saveSearch(SAVED_SEARCH_WITH_FILTERS_NAME); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_WITH_FILTERS_NAME); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); await filterBar.toggleFilterPinned('extension'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await filterBar.isFilterPinned('extension')).to.be(true); await testSubjects.missingOrFail('unsavedChangesBadge'); await filterBar.toggleFilterNegated('bytes'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); expect(await filterBar.isFilterNegated('bytes')).to.be(true); await testSubjects.existOrFail('unsavedChangesBadge'); - await PageObjects.discover.revertUnsavedChanges(); + await discover.revertUnsavedChanges(); await testSubjects.missingOrFail('unsavedChangesBadge'); expect(await filterBar.getFilterCount()).to.be(2); expect(await filterBar.isFilterPinned('extension')).to.be(false); expect(await filterBar.isFilterNegated('bytes')).to.be(false); - expect(await PageObjects.discover.getHitCount()).to.be('1,373'); + expect(await discover.getHitCount()).to.be('1,373'); }); it('should not show a badge after loading an ES|QL saved search, only after changes', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.saveSearch(SAVED_SEARCH_ESQL); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.saveSearch(SAVED_SEARCH_ESQL); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.missingOrFail('unsavedChangesBadge'); await monacoEditor.setCodeEditorValue('from logstash-* | limit 100'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unsavedChangesBadge'); }); diff --git a/test/functional/apps/discover/group6/_view_mode_toggle.ts b/test/functional/apps/discover/group6/_view_mode_toggle.ts index 25a4a68ab8d6c8..21882a9dffc73b 100644 --- a/test/functional/apps/discover/group6/_view_mode_toggle.ts +++ b/test/functional/apps/discover/group6/_view_mode_toggle.ts @@ -11,11 +11,10 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList, header } = getPageObjects([ 'common', 'discover', 'timePicker', - 'dashboard', 'unifiedFieldList', 'header', ]); @@ -45,13 +44,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { [true, false].forEach((useLegacyTable) => { describe(`isLegacy: ${useLegacyTable}`, function () { before(async function () { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ ...defaultSettings, 'doc_table:legacy': useLegacyTable, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); }); after(async () => { @@ -78,13 +77,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show an error callout', async () => { await queryBar.setQuery('@message::'); // invalid await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); await queryBar.clearQuery(); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('discoverErrorCalloutTitle'); }); @@ -118,7 +117,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('dscViewModeToggle'); - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); await testSubjects.existOrFail('dscViewModeToggle'); @@ -129,8 +128,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show ES|QL columns callout', async () => { await testSubjects.missingOrFail('dscSelectedColumnsCallout'); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('extension'); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('dscSelectedColumnsCallout'); }); }); diff --git a/test/functional/apps/discover/group7/_huge_fields.ts b/test/functional/apps/discover/group7/_huge_fields.ts index 43b2c6466e057e..bf07991146d0a7 100644 --- a/test/functional/apps/discover/group7/_huge_fields.ts +++ b/test/functional/apps/discover/group7/_huge_fields.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover', 'timePicker']); + const { common, discover } = getPageObjects(['common', 'discover']); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); @@ -26,11 +26,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'timepicker:timeDefaults': `{ "from": "2016-10-05T00:00:00", "to": "2016-10-06T00:00:00"}`, }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); it('test_huge data should have expected number of fields', async function () { - await PageObjects.discover.selectIndexPattern('testhuge*'); + await discover.selectIndexPattern('testhuge*'); // initially this field should not be rendered const fieldExistsBeforeScrolling = await testSubjects.exists('field-myvar1050'); expect(fieldExistsBeforeScrolling).to.be(false); diff --git a/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts b/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts index f8ca905cca5a8e..7af4ec11f79973 100644 --- a/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts +++ b/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts @@ -15,7 +15,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const security = getService('security'); const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'timePicker', 'discover', 'unifiedFieldList']); + const { common, discover, unifiedFieldList } = getPageObjects([ + 'common', + 'discover', + 'unifiedFieldList', + ]); describe('index pattern with unmapped fields', () => { before(async () => { @@ -32,8 +36,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'timepicker:timeDefaults': `{ "from": "${fromTime}", "to": "${toTime}"}`, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('test-index-unmapped-fields'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('test-index-unmapped-fields'); }); after(async () => { @@ -47,42 +51,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('unmapped fields exist on a new saved search', async () => { const expectedHitCount = '4'; await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); - let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + let allFields = await unifiedFieldList.getAllFieldNames(); // message is a mapped field expect(allFields.includes('message')).to.be(true); // sender is not a mapped field expect(allFields.includes('sender')).to.be(false); - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); + await unifiedFieldList.toggleSidebarSection('unmapped'); - allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('sender')).to.be(true); // now visible under Unmapped section - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); + await unifiedFieldList.toggleSidebarSection('unmapped'); }); it('unmapped fields exist on an existing saved search', async () => { - await PageObjects.discover.loadSavedSearch('Existing Saved Search'); + await discover.loadSavedSearch('Existing Saved Search'); const expectedHitCount = '4'; await retry.try(async function () { - expect(await PageObjects.discover.getHitCount()).to.be(expectedHitCount); + expect(await discover.getHitCount()).to.be(expectedHitCount); }); - let allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + let allFields = await unifiedFieldList.getAllFieldNames(); expect(allFields.includes('message')).to.be(true); expect(allFields.includes('sender')).to.be(false); expect(allFields.includes('receiver')).to.be(false); - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); + await unifiedFieldList.toggleSidebarSection('unmapped'); - allFields = await PageObjects.unifiedFieldList.getAllFieldNames(); + allFields = await unifiedFieldList.getAllFieldNames(); // now visible under Unmapped section expect(allFields.includes('sender')).to.be(true); expect(allFields.includes('receiver')).to.be(true); - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); + await unifiedFieldList.toggleSidebarSection('unmapped'); }); }); } diff --git a/test/functional/apps/discover/group7/_indexpattern_without_timefield.ts b/test/functional/apps/discover/group7/_indexpattern_without_timefield.ts index adb96e28222da0..d8eb3319f077b1 100644 --- a/test/functional/apps/discover/group7/_indexpattern_without_timefield.ts +++ b/test/functional/apps/discover/group7/_indexpattern_without_timefield.ts @@ -17,7 +17,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const security = getService('security'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'timePicker', 'discover', 'header']); + const { common, timePicker, discover, header } = getPageObjects([ + 'common', + 'timePicker', + 'discover', + 'header', + ]); describe('indexpattern without timefield', () => { before(async () => { @@ -33,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'without-timefield', 'timepicker:timeDefaults': '{ "from": "2019-01-18T19:37:13.000Z", "to": "now"}', }); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -47,43 +52,43 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not display a timepicker', async () => { - if (await PageObjects.timePicker.timePickerExists()) { + if (await timePicker.timePickerExists()) { throw new Error('Expected timepicker not to exist'); } }); it('should adapt sidebar fields when switching', async () => { - await PageObjects.discover.selectIndexPattern('with-timefield'); + await discover.selectIndexPattern('with-timefield'); const timefieldExistsWithTimefield = await testSubjects.exists('field-@timestamp'); expect(timefieldExistsWithTimefield).to.be(true); - await PageObjects.discover.selectIndexPattern('without-timefield'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.selectIndexPattern('without-timefield'); + await discover.waitForDocTableLoadingComplete(); const timefieldExistsWithoutTimefield = await testSubjects.exists('field-@timestamp'); expect(timefieldExistsWithoutTimefield).to.be(false); }); it('should display a timepicker after switching to an index pattern with timefield', async () => { - await PageObjects.discover.selectIndexPattern('with-timefield'); - await PageObjects.discover.waitForDocTableLoadingComplete(); - if (!(await PageObjects.timePicker.timePickerExists())) { + await discover.selectIndexPattern('with-timefield'); + await discover.waitForDocTableLoadingComplete(); + if (!(await timePicker.timePickerExists())) { throw new Error('Expected timepicker to exist'); } }); it('should switch between with and without timefield using the browser back button', async () => { - await PageObjects.discover.selectIndexPattern('without-timefield'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.selectIndexPattern('without-timefield'); + await discover.waitForDocTableLoadingComplete(); await retry.waitForWithTimeout( 'The timepicker not to exist', 5000, - async () => !(await PageObjects.timePicker.timePickerExists()) + async () => !(await timePicker.timePickerExists()) ); - await PageObjects.discover.selectIndexPattern('with-timefield'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.selectIndexPattern('with-timefield'); + await discover.waitForDocTableLoadingComplete(); await retry.waitForWithTimeout( 'The timepicker to exist', 5000, - async () => await PageObjects.timePicker.timePickerExists() + async () => await timePicker.timePickerExists() ); await retry.waitForWithTimeout( 'index pattern to have been switched back to "without-timefield"', @@ -91,7 +96,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { async () => { // Navigating back await browser.goBack(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDocTableLoadingComplete(); return ( (await testSubjects.getVisibleText('discover-dataView-switch-link')) === 'without-timefield' @@ -102,49 +107,49 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.waitForWithTimeout( 'The timepicker not to exist', 5000, - async () => !(await PageObjects.timePicker.timePickerExists()) + async () => !(await timePicker.timePickerExists()) ); }); it('should disable the auto refresh interval when switching to a data view without a time field', async () => { const autoRefreshInterval = 5; - await PageObjects.discover.selectIndexPattern('with-timefield'); - await PageObjects.timePicker.startAutoRefresh(autoRefreshInterval); + await discover.selectIndexPattern('with-timefield'); + await timePicker.startAutoRefresh(autoRefreshInterval); let url = await browser.getCurrentUrl(); expect(url).to.contain(`refreshInterval:(pause:!f,value:${autoRefreshInterval * 1000})`); - await PageObjects.discover.selectIndexPattern('without-timefield'); + await discover.selectIndexPattern('without-timefield'); url = await browser.getCurrentUrl(); expect(url).to.contain(`refreshInterval:(pause:!t,value:${autoRefreshInterval * 1000})`); }); it('should allow switching from a saved search with a time field to a saved search without a time field', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.saveSearch('with-timefield'); - await PageObjects.discover.selectIndexPattern('without-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.saveSearch('without-timefield', true); - await PageObjects.discover.loadSavedSearch('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.loadSavedSearch('without-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.assertHitCount('1'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('with-timefield'); + await header.waitUntilLoadingHasFinished(); + await discover.saveSearch('with-timefield'); + await discover.selectIndexPattern('without-timefield'); + await header.waitUntilLoadingHasFinished(); + await discover.saveSearch('without-timefield', true); + await discover.loadSavedSearch('with-timefield'); + await header.waitUntilLoadingHasFinished(); + await discover.loadSavedSearch('without-timefield'); + await header.waitUntilLoadingHasFinished(); + await discover.assertHitCount('1'); }); it('should allow switching from data views with different timefields and sort correctly', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('with-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('with-timefield'); + await header.waitUntilLoadingHasFinished(); let url = await browser.getCurrentUrl(); expect(url).to.contain(`@timestamp`); - await PageObjects.discover.selectIndexPattern('with-different-timefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectIndexPattern('with-different-timefield'); + await header.waitUntilLoadingHasFinished(); url = await browser.getCurrentUrl(); expect(url).to.contain(`with-different-timefield`); await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); url = await browser.getCurrentUrl(); expect(url).to.contain(`@timestamp`); }); diff --git a/test/functional/apps/discover/group7/_new_search.ts b/test/functional/apps/discover/group7/_new_search.ts index 48ac6c239ecfa2..d983415399a32d 100644 --- a/test/functional/apps/discover/group7/_new_search.ts +++ b/test/functional/apps/discover/group7/_new_search.ts @@ -12,12 +12,11 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, header } = getPageObjects([ 'common', 'discover', 'timePicker', 'header', - 'unifiedSearch', ]); const kibanaServer = getService('kibanaServer'); const filterBar = getService('filterBar'); @@ -33,8 +32,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -46,18 +45,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should work correctly for data view mode', async function () { await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'png' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await queryBar.setQuery('bytes > 15000'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('353'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('353'); expect(await filterBar.hasFilter('extension', 'png')).to.be(true); expect(await queryBar.getQueryString()).to.be('bytes > 15000'); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + await discover.clickNewSearchButton(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('14,004'); expect(await filterBar.hasFilter('extension', 'png')).to.be(false); expect(await queryBar.getQueryString()).to.be(''); }); @@ -68,25 +67,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { adHoc: true, hasTimeField: true, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await filterBar.addFilter({ field: 'extension', operation: 'is', value: 'css' }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await queryBar.setQuery('bytes > 100'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('2,108'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('2,108'); expect(await filterBar.hasFilter('extension', 'css')).to.be(true); expect(await queryBar.getQueryString()).to.be('bytes > 100'); - await PageObjects.discover.saveSearch('adHoc'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('2,108'); + await discover.saveSearch('adHoc'); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('2,108'); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + await discover.clickNewSearchButton(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCount()).to.be('14,004'); expect(await filterBar.hasFilter('extension', 'css')).to.be(false); expect(await queryBar.getQueryString()).to.be(''); expect(await dataViews.getSelectedName()).to.be('logs**'); @@ -94,41 +93,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should work correctly for ESQL mode', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 100 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCountInt()).to.greaterThan(10); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('lensSuggestion'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCountInt()).to.greaterThan(10); + expect(await discover.getVisContextSuggestionType()).to.be('lensSuggestion'); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.clickNewSearchButton(); + await discover.waitUntilSearchingHasFinished(); expect(await monacoEditor.getCodeEditorValue()).to.be('FROM logstash-* | LIMIT 10'); - expect(await PageObjects.discover.getVisContextSuggestionType()).to.be('histogramForESQL'); - expect(await PageObjects.discover.getHitCount()).to.be('10'); + expect(await discover.getVisContextSuggestionType()).to.be('histogramForESQL'); + expect(await discover.getHitCount()).to.be('10'); }); it('should work correctly for a saved search in ESQL mode', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from logstash-* | limit 100 | stats countB = count(bytes) by geo.dest | sort countB`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCountInt()).to.greaterThan(10); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCountInt()).to.greaterThan(10); - await PageObjects.discover.saveSearch('esql'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - expect(await PageObjects.discover.getHitCountInt()).to.greaterThan(10); + await discover.saveSearch('esql'); + await discover.waitUntilSearchingHasFinished(); + expect(await discover.getHitCountInt()).to.greaterThan(10); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.clickNewSearchButton(); + await discover.waitUntilSearchingHasFinished(); expect(await monacoEditor.getCodeEditorValue()).to.be('FROM logstash-* | LIMIT 10'); - expect(await PageObjects.discover.getHitCount()).to.be('10'); + expect(await discover.getHitCount()).to.be('10'); }); }); } diff --git a/test/functional/apps/discover/group7/_request_cancellation.ts b/test/functional/apps/discover/group7/_request_cancellation.ts index d9f57091254d6f..55ab8f8bdd6383 100644 --- a/test/functional/apps/discover/group7/_request_cancellation.ts +++ b/test/functional/apps/discover/group7/_request_cancellation.ts @@ -17,30 +17,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'header']); + const { common, discover, timePicker, header } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'header', + ]); describe('Discover request cancellation', () => { before(async () => { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); it('should allow cancelling active requests', async () => { - await PageObjects.discover.selectIndexPattern('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.hasNoResults()).to.be(false); + await discover.selectIndexPattern('logstash-*'); + await header.waitUntilLoadingHasFinished(); + expect(await discover.hasNoResults()).to.be(false); await testSubjects.existOrFail('querySubmitButton'); await testSubjects.missingOrFail('queryCancelButton'); await filterBar.addDslFilter( @@ -63,7 +68,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await testSubjects.click('queryCancelButton'); await retry.try(async () => { - expect(await PageObjects.discover.hasNoResults()).to.be(true); + expect(await discover.hasNoResults()).to.be(true); await testSubjects.existOrFail('querySubmitButton'); await testSubjects.missingOrFail('queryCancelButton'); }); diff --git a/test/functional/apps/discover/group7/_runtime_fields_editor.ts b/test/functional/apps/discover/group7/_runtime_fields_editor.ts index 97da057d782370..ab8711c362b77c 100644 --- a/test/functional/apps/discover/group7/_runtime_fields_editor.ts +++ b/test/functional/apps/discover/group7/_runtime_fields_editor.ts @@ -19,7 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const security = getService('security'); const dataGrid = getService('dataGrid'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -38,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.typeScript("emit('abc')"); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }; describe('discover integration with runtime fields editor', function describeIndexTests() { @@ -47,8 +47,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async () => { @@ -59,50 +59,48 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('allows adding custom label to existing fields', async function () { const customLabel = 'megabytes'; - await PageObjects.discover.editField('bytes'); + await discover.editField('bytes'); await fieldEditor.enableCustomLabel(); await fieldEditor.setCustomLabel(customLabel); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect((await PageObjects.unifiedFieldList.getAllFieldNames()).includes(customLabel)).to.be( - true - ); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); - expect(await PageObjects.discover.getDocHeader()).to.have.string(customLabel); + await header.waitUntilLoadingHasFinished(); + expect((await unifiedFieldList.getAllFieldNames()).includes(customLabel)).to.be(true); + await unifiedFieldList.clickFieldListItemAdd('bytes'); + expect(await discover.getDocHeader()).to.have.string(customLabel); }); it('allows adding custom description to existing fields', async function () { const customDescription = 'custom agent description here'; const customDescription2 = `${customDescription} updated`; // set a custom description - await PageObjects.discover.editField('agent'); + await discover.editField('agent'); await fieldEditor.enableCustomDescription(); await fieldEditor.setCustomDescription(customDescription); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItem('agent'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItem('agent'); await retry.waitFor('field popover text', async () => { return (await testSubjects.getVisibleText('fieldDescription-agent')) === customDescription; }); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('agent'); + await unifiedFieldList.clickFieldListItemToggle('agent'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); // edit the custom description again - await PageObjects.discover.editField('agent'); + await discover.editField('agent'); await fieldEditor.enableCustomDescription(); await fieldEditor.setCustomDescription(customDescription2); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItem('agent'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItem('agent'); await retry.waitFor('field popover text', async () => { return (await testSubjects.getVisibleText('fieldDescription-agent')) === customDescription2; }); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('agent'); + await unifiedFieldList.clickFieldListItemToggle('agent'); // check it in the doc viewer too await dataGrid.clickRowToggle({ rowIndex: 0 }); @@ -115,13 +113,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('allows to replace ECS description with a custom field description', async function () { - await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); + await unifiedFieldList.clickFieldListItem('@timestamp'); await retry.waitFor('field popover text', async () => { return (await testSubjects.getVisibleText('fieldDescription-@timestamp')).startsWith( 'Date' ); }); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); // check it in the doc viewer too await dataGrid.clickRowToggle({ rowIndex: 0 }); await dataGrid.expandFieldNameCellInFlyout('@timestamp'); @@ -134,19 +132,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const customDescription = 'custom @timestamp description here'; // set a custom description - await PageObjects.discover.editField('@timestamp'); + await discover.editField('@timestamp'); await fieldEditor.enableCustomDescription(); await fieldEditor.setCustomDescription(customDescription); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItem('@timestamp'); await retry.waitFor('field popover text', async () => { return ( (await testSubjects.getVisibleText('fieldDescription-@timestamp')) === customDescription ); }); - await PageObjects.unifiedFieldList.closeFieldPopover(); + await unifiedFieldList.closeFieldPopover(); // check it in the doc viewer too await dataGrid.clickRowToggle({ rowIndex: 0 }); await dataGrid.expandFieldNameCellInFlyout('@timestamp'); @@ -162,7 +160,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show a validation error when adding a too long custom description to existing fields', async function () { const customDescription = 'custom bytes long description here'.repeat(10); // set a custom description - await PageObjects.discover.editField('bytes'); + await discover.editField('bytes'); await fieldEditor.enableCustomDescription(); await fieldEditor.setCustomDescription(customDescription); await fieldEditor.save(); @@ -176,12 +174,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const field = '_runtimefield'; await createRuntimeField(field); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitForDocTableLoadingComplete(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitForDocTableLoadingComplete(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await retry.waitFor('fieldNames to include runtimefield', async () => { - const fieldNames = await PageObjects.unifiedFieldList.getAllFieldNames(); + const fieldNames = await unifiedFieldList.getAllFieldNames(); return fieldNames.includes(field); }); }); @@ -190,17 +188,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const field = '_runtimefield-before-edit'; await createRuntimeField(field); const newFieldName = '_runtimefield-after-edit'; - await PageObjects.discover.editField(field); + await discover.editField(field); await fieldEditor.setName(newFieldName, true); await fieldEditor.save(); await fieldEditor.confirmSave(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitForDocTableLoadingComplete(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await discover.waitForDocTableLoadingComplete(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await retry.waitForWithTimeout('fieldNames to include edits', 5000, async () => { - const fieldNames = await PageObjects.unifiedFieldList.getAllFieldNames(); + const fieldNames = await unifiedFieldList.getAllFieldNames(); return fieldNames.includes(newFieldName); }); }); @@ -208,26 +206,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('allows creation of a new field and use it in a saved search', async function () { const fieldName = '_runtimefield-saved-search'; await createRuntimeField(fieldName); - await PageObjects.unifiedFieldList.clickFieldListItemAdd(fieldName); - expect(await PageObjects.discover.getDocHeader()).to.have.string(fieldName); - expect(await PageObjects.discover.saveSearch('Saved Search with runtimefield')); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd(fieldName); + expect(await discover.getDocHeader()).to.have.string(fieldName); + expect(await discover.saveSearch('Saved Search with runtimefield')); + await header.waitUntilLoadingHasFinished(); - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.clickNewSearchButton(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.discover.loadSavedSearch('Saved Search with runtimefield'); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.getDocHeader()).to.have.string(fieldName); + await discover.loadSavedSearch('Saved Search with runtimefield'); + await header.waitUntilLoadingHasFinished(); + expect(await discover.getDocHeader()).to.have.string(fieldName); }); it('deletes a runtime field', async function () { const fieldName = '_runtimefield-to-delete'; await createRuntimeField(fieldName); - await PageObjects.discover.removeField(fieldName); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.removeField(fieldName); + await header.waitUntilLoadingHasFinished(); await retry.waitForWithTimeout('fieldNames to include edits', 5000, async () => { - const fieldNames = await PageObjects.unifiedFieldList.getAllFieldNames(); + const fieldNames = await unifiedFieldList.getAllFieldNames(); return !fieldNames.includes(fieldName); }); }); @@ -236,8 +234,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // navigate to doc view const fieldName = '_runtimefield-doc-view'; await createRuntimeField(fieldName); - const table = await PageObjects.discover.getDocTable(); - const useLegacyTable = await PageObjects.discover.useLegacyTable(); + const table = await discover.getDocTable(); + const useLegacyTable = await discover.useLegacyTable(); await table.clickRowToggle(); // click the open action diff --git a/test/functional/apps/discover/group7/_search_on_page_load.ts b/test/functional/apps/discover/group7/_search_on_page_load.ts index 95fcba1fe84995..64784d1cc74a97 100644 --- a/test/functional/apps/discover/group7/_search_on_page_load.ts +++ b/test/functional/apps/discover/group7/_search_on_page_load.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const queryBar = getService('queryBar'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, discover, header, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', @@ -36,12 +36,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const initSearchOnPageLoad = async (searchOnPageLoad: boolean) => { await kibanaServer.uiSettings.replace({ 'discover:searchOnPageLoad': searchOnPageLoad }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.awaitKibanaChrome(); + await common.navigateToApp('discover'); + await header.awaitKibanaChrome(); }; const waitForFetches = (fetchesNumber: number) => async () => { - const nrOfFetches = await PageObjects.discover.getNrOfFetches(); + const nrOfFetches = await discover.getNrOfFetches(); log.debug('actual number of fetches', nrOfFetches); return nrOfFetches === fetchesNumber; }; @@ -61,7 +61,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -79,88 +79,88 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should not fetch data from ES initially', async function () { expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); }); it('should not fetch on indexPattern change', async function () { expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - await PageObjects.discover.selectIndexPattern('date-nested'); + await discover.selectIndexPattern('date-nested'); expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); }); it('should fetch data from ES after refreshDataButton click', async function () { expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); await testSubjects.click(refreshButtonSelector); await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); }); it('should fetch data from ES after submit query', async function () { expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); await queryBar.submitQuery(); await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); }); it('should fetch data from ES after choosing commonly used time range', async function () { - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); expect(await testSubjects.exists(refreshButtonSelector)).to.be(true); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); - await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await timePicker.setCommonlyUsedTime('This_week'); await testSubjects.missingOrFail(refreshButtonSelector); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); }); it('should fetch data when a search is saved', async function () { - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); - await PageObjects.discover.saveSearch(savedSearchName); + await discover.saveSearch(savedSearchName); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); }); it('should reset state after opening a saved search and pressing New', async function () { - await PageObjects.discover.loadSavedSearch(savedSearchName); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.loadSavedSearch(savedSearchName); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); await testSubjects.click('discoverNewButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('number of fetches to be 0', waitForFetches(0)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(false); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(false); }); }); it(`when it's true should fetch data from ES initially`, async function () { await initSearchOnPageLoad(true); await retry.waitFor('number of fetches to be 1', waitForFetches(1)); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); + expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); }); }); } diff --git a/test/functional/apps/discover/group8/_default_route.ts b/test/functional/apps/discover/group8/_default_route.ts index 6c32ce186f0e17..f1529fac1dfec0 100644 --- a/test/functional/apps/discover/group8/_default_route.ts +++ b/test/functional/apps/discover/group8/_default_route.ts @@ -12,14 +12,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects([ - 'common', - 'home', - 'settings', - 'discover', - 'timePicker', - 'header', - ]); + const { discover, timePicker, header } = getPageObjects(['discover', 'timePicker', 'header']); const kibanaServer = getService('kibanaServer'); const security = getService('security'); const retry = getService('retry'); @@ -34,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { @@ -49,11 +42,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultRoute: '/app/discover#/view/ab12e3c0-f231-11e6-9486-733b1ac9221a', }); await browser.navigateTo(deployment.getHostPort()); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { - expect(await PageObjects.discover.getCurrentQueryName()).to.be('A Saved Search'); - expect(await PageObjects.discover.getHitCount()).to.be('14,004'); + expect(await discover.getCurrentQueryName()).to.be('A Saved Search'); + expect(await discover.getHitCount()).to.be('14,004'); }); }); @@ -63,12 +56,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { "/app/discover#/?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:'2015-09-19T06:31:44.000Z',to:'2015-09-23T18:31:44.000Z'))&_a=(columns:!(extension,host),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,field:extension.raw,index:'logstash-*',key:extension.raw,negate:!f,params:(query:jpg),type:phrase),query:(match_phrase:(extension.raw:jpg)))),hideChart:!f,interval:auto,query:(language:lucene,query:media),sort:!(!('@timestamp',desc)))", }); await browser.navigateTo(deployment.getHostPort()); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.try(async () => { expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); expect(await queryBar.getQueryString()).to.be('media'); - expect(await PageObjects.discover.getHitCount()).to.be('9,109'); + expect(await discover.getHitCount()).to.be('9,109'); }); }); }); diff --git a/test/functional/apps/discover/group8/_hide_announcements.ts b/test/functional/apps/discover/group8/_hide_announcements.ts index 993d0ff74f1231..aa1943b687c3f2 100644 --- a/test/functional/apps/discover/group8/_hide_announcements.ts +++ b/test/functional/apps/discover/group8/_hide_announcements.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); @@ -24,8 +24,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); }); after(async () => { @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should display take tour button', async function () { - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); const tourButtonExists = await testSubjects.exists('discoverTakeTourButton'); expect(tourButtonExists).to.be(true); }); diff --git a/test/functional/apps/visualize/group1/_chart_types.ts b/test/functional/apps/visualize/group1/_chart_types.ts index 2ac025712f3fc0..5b38fb26173b07 100644 --- a/test/functional/apps/visualize/group1/_chart_types.ts +++ b/test/functional/apps/visualize/group1/_chart_types.ts @@ -13,27 +13,27 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); - const PageObjects = getPageObjects(['visualize']); + const { visualize } = getPageObjects(['visualize']); describe('chart types', function () { before(async function () { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); }); it('should show the promoted vis types for the first step', async function () { const expectedChartTypes = ['Custom visualization', 'Lens', 'Maps', 'TSVB']; // find all the chart types and make sure there all there - const chartTypes = (await PageObjects.visualize.getPromotedVisTypes()).sort(); + const chartTypes = (await visualize.getPromotedVisTypes()).sort(); log.debug('returned chart types = ' + chartTypes); log.debug('expected chart types = ' + expectedChartTypes); expect(chartTypes).to.eql(expectedChartTypes); }); it('should show the correct agg based chart types', async function () { - await PageObjects.visualize.clickAggBasedVisualizations(); + await visualize.clickAggBasedVisualizations(); const expectedChartTypes = [ 'Area', 'Data table', @@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; // find all the chart types and make sure there all there - const chartTypes = (await PageObjects.visualize.getChartTypes()).sort(); + const chartTypes = (await visualize.getChartTypes()).sort(); log.debug('returned chart types = ' + chartTypes); log.debug('expected chart types = ' + expectedChartTypes); expect(chartTypes).to.eql(expectedChartTypes); diff --git a/test/functional/apps/visualize/group1/_data_table.ts b/test/functional/apps/visualize/group1/_data_table.ts index debe6a368579c6..9bff7e68f8dec4 100644 --- a/test/functional/apps/visualize/group1/_data_table.ts +++ b/test/functional/apps/visualize/group1/_data_table.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects([ + const { visualize, timePicker, visEditor, visChart, common } = getPageObjects([ 'visualize', 'timePicker', 'visEditor', @@ -29,48 +29,48 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const vizName1 = 'Visualization DataTable'; before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickDataTable'); - await PageObjects.visualize.clickDataTable(); + await visualize.clickDataTable(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickNewSearch(); log.debug('Bucket = Split rows'); - await PageObjects.visEditor.clickBucket('Split rows'); + await visEditor.clickBucket('Split rows'); log.debug('Aggregation = Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Field = bytes'); - await PageObjects.visEditor.selectField('bytes'); + await visEditor.selectField('bytes'); log.debug('Interval = 2000'); - await PageObjects.visEditor.setInterval('2000', { type: 'numeric' }); - await PageObjects.visEditor.clickGo(); + await visEditor.setInterval('2000', { type: 'numeric' }); + await visEditor.clickGo(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should allow applying changed params', async () => { - await PageObjects.visEditor.setInterval('1', { type: 'numeric', append: true }); - const interval = await PageObjects.visEditor.getNumericInterval(); + await visEditor.setInterval('1', { type: 'numeric', append: true }); + const interval = await visEditor.getNumericInterval(); expect(interval).to.be('20001'); - const isApplyButtonEnabled = await PageObjects.visEditor.isApplyEnabled(); + const isApplyButtonEnabled = await visEditor.isApplyEnabled(); expect(isApplyButtonEnabled).to.be(true); }); it('should allow reseting changed params', async () => { - await PageObjects.visEditor.clickReset(); - const interval = await PageObjects.visEditor.getNumericInterval(); + await visEditor.clickReset(); + const interval = await visEditor.getNumericInterval(); expect(interval).to.be('2000'); }); it('should be able to save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -111,21 +111,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ['15.625KB', '161'], ['17.578KB', '137'], ]; - await PageObjects.visEditor.clickOptionsTab(); - await PageObjects.visEditor.checkSwitch('showPartialRows'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickOptionsTab(); + await visEditor.checkSwitch('showPartialRows'); + await visEditor.clickGo(); return retry.try(async function () { await inspector.open(); await inspector.expectTableData(expectedChartData); await inspector.close(); - await PageObjects.visEditor.uncheckSwitch('showPartialRows'); + await visEditor.uncheckSwitch('showPartialRows'); }); }); it('should show percentage columns', async () => { async function expectValidTableData() { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['≥ 0B and < 1,000B', '1,351', '64.703%'], ['≥ 1,000B and < 1.953KB', '737', '35.297%'], @@ -133,41 +133,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } // load a plain table - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Range'); - await PageObjects.visEditor.selectField('bytes'); - await PageObjects.visEditor.clickGo(); - await PageObjects.visEditor.clickOptionsTab(); - await PageObjects.visEditor.setSelectByOptionText( - 'datatableVisualizationPercentageCol', - 'Count' - ); - await PageObjects.visEditor.clickGo(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Range'); + await visEditor.selectField('bytes'); + await visEditor.clickGo(); + await visEditor.clickOptionsTab(); + await visEditor.setSelectByOptionText('datatableVisualizationPercentageCol', 'Count'); + await visEditor.clickGo(); await expectValidTableData(); // check that it works after a save and reload const SAVE_NAME = 'viz w/ percents'; - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(SAVE_NAME); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(SAVE_NAME); - await PageObjects.visualize.loadSavedVisualization(SAVE_NAME); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(SAVE_NAME); + await visChart.waitForVisualization(); await expectValidTableData(); // check that it works after selecting a column that's deleted - await PageObjects.visEditor.clickDataTab(); - await PageObjects.visEditor.clickBucket('Metric', 'metrics'); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.removeDimension(1); - await PageObjects.visEditor.clickGo(); - await PageObjects.visEditor.clickOptionsTab(); - - const data = await PageObjects.visChart.getTableVisContent(); + await visEditor.clickDataTab(); + await visEditor.clickBucket('Metric', 'metrics'); + await visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.removeDimension(1); + await visEditor.clickGo(); + await visEditor.clickOptionsTab(); + + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['≥ 0B and < 1,000B', '344.094B'], ['≥ 1,000B and < 1.953KB', '1.697KB'], @@ -175,28 +172,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct data when using average pipeline aggregation', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Metric', 'metrics'); - await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics'); - await PageObjects.visEditor.selectAggregation('Terms', 'metrics', true); - await PageObjects.visEditor.selectField('geo.src', 'metrics', true); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Metric', 'metrics'); + await visEditor.selectAggregation('Average Bucket', 'metrics'); + await visEditor.selectAggregation('Terms', 'metrics', true); + await visEditor.selectField('geo.src', 'metrics', true); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['14,004', '1,412.6']]); }); it('should show correct data for a data table with date histogram', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.setInterval('Day'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('@timestamp'); + await visEditor.setInterval('Day'); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['2015-09-20', '4,757'], ['2015-09-21', '4,614'], @@ -205,21 +202,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct data when selecting a field by its custom name', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('UTC time'); - await PageObjects.visEditor.setInterval('Day'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('UTC time'); + await visEditor.setInterval('Day'); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['2015-09-20', '4,757'], ['2015-09-21', '4,614'], ['2015-09-22', '4,633'], ]); - const header = await PageObjects.visChart.getTableVisHeader(); + const header = await visChart.getTableVisHeader(); expect(header).to.contain('UTC time'); }); @@ -229,40 +226,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { operation: 'is between', value: { from: '2015-09-19', to: '2015-09-21' }, }); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const data = await PageObjects.visChart.getTableVisContent(); + await visChart.waitForVisualizationRenderingStabilized(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['2015-09-20', '4,757']]); }); it('should correctly filter for pinned filters', async () => { await filterBar.toggleFilterPinned('@timestamp'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const data = await PageObjects.visChart.getTableVisContent(); + await visChart.waitForVisualizationRenderingStabilized(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['2015-09-20', '4,757']]); }); it('should show correct data for a data table with top hits', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickMetricEditor(); - await PageObjects.visEditor.selectAggregation('Top Hit', 'metrics'); - await PageObjects.visEditor.selectField('agent.raw', 'metrics'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickMetricEditor(); + await visEditor.selectAggregation('Top Hit', 'metrics'); + await visEditor.selectField('agent.raw', 'metrics'); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); log.debug(data); expect(data.length).to.be.greaterThan(0); }); it('should show correct data for a data table with range agg', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Range'); - await PageObjects.visEditor.selectField('bytes'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Range'); + await visEditor.selectField('bytes'); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['≥ 0B and < 1,000B', '1,351'], ['≥ 1,000B and < 1.953KB', '737'], @@ -271,22 +268,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('otherBucket', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('extension.raw'); - await PageObjects.visEditor.setSize(2); - await PageObjects.visEditor.clickGo(); - - await PageObjects.visEditor.toggleOtherBucket(); - await PageObjects.visEditor.toggleMissingBucket(); - await PageObjects.visEditor.clickGo(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('extension.raw'); + await visEditor.setSize(2); + await visEditor.clickGo(); + + await visEditor.toggleOtherBucket(); + await visEditor.toggleMissingBucket(); + await visEditor.clickGo(); }); it('should show correct data', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['jpg', '9,109'], ['css', '2,159'], @@ -295,9 +292,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should apply correct filter', async () => { - await PageObjects.visChart.filterOnTableCell(0, 2); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const data = await PageObjects.visChart.getTableVisContent(); + await visChart.filterOnTableCell(0, 2); + await visChart.waitForVisualizationRenderingStabilized(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['png', '1,373'], ['gif', '918'], @@ -308,23 +305,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('metricsOnAllLevels', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('extension.raw'); - await PageObjects.visEditor.setSize(2); - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('geo.dest'); - await PageObjects.visEditor.toggleOpenEditor(3, 'false'); - await PageObjects.visEditor.clickGo(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('extension.raw'); + await visEditor.setSize(2); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('geo.dest'); + await visEditor.toggleOpenEditor(3, 'false'); + await visEditor.clickGo(); }); it('should show correct data without showMetricsAtAllLevels', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['jpg', 'CN', '1,718'], ['jpg', 'IN', '1,511'], @@ -340,10 +337,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct data without showMetricsAtAllLevels even if showPartialRows is selected', async () => { - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickOptionsTab(); await testSubjects.setCheckbox('showPartialRows', 'check'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['jpg', 'CN', '1,718'], ['jpg', 'IN', '1,511'], @@ -359,10 +356,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show metrics on each level', async () => { - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickOptionsTab(); await testSubjects.setCheckbox('showMetricsAtAllLevels', 'check'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['jpg', '9,109', 'CN', '1,718'], ['jpg', '9,109', 'IN', '1,511'], @@ -378,12 +375,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show metrics other than count on each level', async () => { - await PageObjects.visEditor.clickDataTab(); - await PageObjects.visEditor.clickBucket('Metric', 'metrics'); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visEditor.clickDataTab(); + await visEditor.clickBucket('Metric', 'metrics'); + await visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['jpg', '9,109', '5.469KB', 'CN', '1,718', '5.477KB'], ['jpg', '9,109', '5.469KB', 'IN', '1,511', '5.456KB'], @@ -401,31 +398,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('split tables', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('Split table'); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('Split table'); // split by column to make all tables rows visible - await PageObjects.visEditor.clickSplitDirection('Columns'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('extension.raw'); - await PageObjects.visEditor.setSize(2); - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('geo.dest'); - await PageObjects.visEditor.setSize(3, 3); - await PageObjects.visEditor.toggleOpenEditor(3, 'false'); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('geo.src'); - await PageObjects.visEditor.setSize(3, 4); - await PageObjects.visEditor.toggleOpenEditor(4, 'false'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickSplitDirection('Columns'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('extension.raw'); + await visEditor.setSize(2); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('geo.dest'); + await visEditor.setSize(3, 3); + await visEditor.toggleOpenEditor(3, 'false'); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('geo.src'); + await visEditor.setSize(3, 4); + await visEditor.toggleOpenEditor(4, 'false'); + await visEditor.clickGo(); }); it('should have a splitted table', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ [ ['CN', 'CN', '330'], @@ -453,10 +450,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show metrics for split bucket when using showMetricsAtAllLevels', async () => { - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickOptionsTab(); await testSubjects.setCheckbox('showMetricsAtAllLevels', 'check'); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ [ ['CN', '1,718', 'CN', '330'], diff --git a/test/functional/apps/visualize/group1/_data_table_nontimeindex.ts b/test/functional/apps/visualize/group1/_data_table_nontimeindex.ts index 8edb60d74846fd..c03219f3d22180 100644 --- a/test/functional/apps/visualize/group1/_data_table_nontimeindex.ts +++ b/test/functional/apps/visualize/group1/_data_table_nontimeindex.ts @@ -17,51 +17,54 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const filterBar = getService('filterBar'); const renderable = getService('renderable'); - const PageObjects = getPageObjects(['visualize', 'visEditor', 'header', 'visChart']); + const { visualize, visEditor, header, visChart } = getPageObjects([ + 'visualize', + 'visEditor', + 'header', + 'visChart', + ]); describe('data table with index without time filter', function indexPatternCreation() { const vizName1 = 'Visualization DataTable without time filter'; before(async function () { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickDataTable'); - await PageObjects.visualize.clickDataTable(); + await visualize.clickDataTable(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch( - PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED - ); + await visualize.clickNewSearch(visualize.index.LOGSTASH_NON_TIME_BASED); log.debug('Bucket = Split Rows'); - await PageObjects.visEditor.clickBucket('Split rows'); + await visEditor.clickBucket('Split rows'); log.debug('Aggregation = Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Field = bytes'); - await PageObjects.visEditor.selectField('bytes'); + await visEditor.selectField('bytes'); log.debug('Interval = 2000'); - await PageObjects.visEditor.setInterval('2000', { type: 'numeric' }); - await PageObjects.visEditor.clickGo(); + await visEditor.setInterval('2000', { type: 'numeric' }); + await visEditor.clickGo(); }); it('should allow applying changed params', async () => { - await PageObjects.visEditor.setInterval('1', { type: 'numeric', append: true }); - const interval = await PageObjects.visEditor.getNumericInterval(); + await visEditor.setInterval('1', { type: 'numeric', append: true }); + const interval = await visEditor.getNumericInterval(); expect(interval).to.be('20001'); - const isApplyButtonEnabled = await PageObjects.visEditor.isApplyEnabled(); + const isApplyButtonEnabled = await visEditor.isApplyEnabled(); expect(isApplyButtonEnabled).to.be(true); }); it('should allow reseting changed params', async () => { - await PageObjects.visEditor.clickReset(); - const interval = await PageObjects.visEditor.getNumericInterval(); + await visEditor.clickReset(); + const interval = await visEditor.getNumericInterval(); expect(interval).to.be('2000'); }); it('should be able to save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -90,36 +93,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct data when using average pipeline aggregation', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch( - PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED - ); - await PageObjects.visEditor.clickBucket('Metric', 'metrics'); - await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics'); - await PageObjects.visEditor.selectAggregation('Terms', 'metrics', true); - await PageObjects.visEditor.selectField('geo.src', 'metrics', true); - await PageObjects.visEditor.clickGo(); - const data = await PageObjects.visChart.getTableVisContent(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(visualize.index.LOGSTASH_NON_TIME_BASED); + await visEditor.clickBucket('Metric', 'metrics'); + await visEditor.selectAggregation('Average Bucket', 'metrics'); + await visEditor.selectAggregation('Terms', 'metrics', true); + await visEditor.selectField('geo.src', 'metrics', true); + await visEditor.clickGo(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['14,004', '1,412.6']]); }); describe('data table with date histogram', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch( - PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED - ); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.setInterval('Day'); - await PageObjects.visEditor.clickGo(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(visualize.index.LOGSTASH_NON_TIME_BASED); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('@timestamp'); + await visEditor.setInterval('Day'); + await visEditor.clickGo(); }); it('should show correct data', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['2015-09-20', '4,757'], ['2015-09-21', '4,614'], @@ -133,17 +132,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { operation: 'is between', value: { from: '2015-09-19', to: '2015-09-21' }, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['2015-09-20', '4,757']]); }); it('should correctly filter for pinned filters', async () => { await filterBar.toggleFilterPinned('@timestamp'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([['2015-09-20', '4,757']]); }); }); diff --git a/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts b/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts index 5d4c642da39a47..92fc6986dc9f8c 100644 --- a/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts +++ b/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts @@ -17,8 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const renderable = getService('renderable'); const retry = getService('retry'); const dashboardAddPanel = getService('dashboardAddPanel'); - const PageObjects = getPageObjects([ - 'common', + const { visualize, header, dashboard, timePicker, visEditor, visChart } = getPageObjects([ 'visualize', 'header', 'dashboard', @@ -31,49 +30,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const vizName1 = 'Visualization DataTable w/o time filter'; before(async function () { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickDataTable'); - await PageObjects.visualize.clickDataTable(); + await visualize.clickDataTable(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch( - PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED - ); + await visualize.clickNewSearch(visualize.index.LOGSTASH_NON_TIME_BASED); log.debug('Bucket = Split Rows'); - await PageObjects.visEditor.clickBucket('Split rows'); + await visEditor.clickBucket('Split rows'); log.debug('Aggregation = Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Field = bytes'); - await PageObjects.visEditor.selectField('bytes'); + await visEditor.selectField('bytes'); log.debug('Interval = 2000'); - await PageObjects.visEditor.setInterval('2000', { type: 'numeric' }); - await PageObjects.visEditor.clickGo(); + await visEditor.setInterval('2000', { type: 'numeric' }); + await visEditor.clickGo(); }); it('should be able to save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('timefilter should be disabled', async () => { - const isOff = await PageObjects.timePicker.isOff(); + const isOff = await timePicker.isOff(); expect(isOff).to.be(true); }); // test to cover bug #54548 - add this visualization to a dashboard and filter it('should add to dashboard and allow filtering', async function () { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization(vizName1); await retry.try(async () => { // hover and click on cell to filter - await PageObjects.visChart.filterOnTableCell(0, 1); + await visChart.filterOnTableCell(0, 1); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.be(1); diff --git a/test/functional/apps/visualize/group1/_embedding_chart.ts b/test/functional/apps/visualize/group1/_embedding_chart.ts index 76f111a8007b00..8d804a22cc5e51 100644 --- a/test/functional/apps/visualize/group1/_embedding_chart.ts +++ b/test/functional/apps/visualize/group1/_embedding_chart.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const renderable = getService('renderable'); const embedding = getService('embedding'); const retry = getService('retry'); - const PageObjects = getPageObjects([ + const { visualize, visEditor, visChart, header, timePicker } = getPageObjects([ 'visualize', 'visEditor', 'visChart', @@ -27,27 +27,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('embedding', () => { describe('a data table', () => { before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split rows'); - await PageObjects.visEditor.selectAggregation('Histogram'); - await PageObjects.visEditor.selectField('bytes'); - await PageObjects.visEditor.setInterval('2000', { type: 'numeric', aggNth: 3 }); - await PageObjects.visEditor.clickGo(); + await visualize.initTests(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('@timestamp'); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split rows'); + await visEditor.selectAggregation('Histogram'); + await visEditor.selectField('bytes'); + await visEditor.setInterval('2000', { type: 'numeric', aggNth: 3 }); + await visEditor.clickGo(); }); it('should allow opening table vis in embedded mode', async () => { await embedding.openInEmbeddedMode(); await renderable.waitForRender(); - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['2015-09-20 00:00', '0B', '5'], ['2015-09-20 00:00', '1.953KB', '5'], @@ -68,10 +68,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { operation: 'is between', value: { from: '2015-09-21', to: '2015-09-23' }, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['2015-09-21 00:00', '0B', '7'], ['2015-09-21 00:00', '1.953KB', '9'], @@ -88,11 +88,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow to change timerange from the visualization in embedded mode', async () => { await retry.try(async () => { - await PageObjects.visChart.filterOnTableCell(0, 6); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visChart.filterOnTableCell(0, 6); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data).to.be.eql([ ['03:00', '0B', '1'], ['03:00', '1.953KB', '1'], diff --git a/test/functional/apps/visualize/group1/_no_data.ts b/test/functional/apps/visualize/group1/_no_data.ts index 7d6ed2caa59b4e..b260cf1c82581c 100644 --- a/test/functional/apps/visualize/group1/_no_data.ts +++ b/test/functional/apps/visualize/group1/_no_data.ts @@ -13,7 +13,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['visualize', 'header', 'common']); + const { header, common } = getPageObjects(['header', 'common']); const esArchiver = getService('esArchiver'); const dataViews = getService('dataViews'); const kibanaServer = getService('kibanaServer'); @@ -23,20 +23,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.unload('test/functional/fixtures/es_archiver/long_window_logstash'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('visualize'); + await header.waitUntilLoadingHasFinished(); const addIntegrations = await testSubjects.find('kbnOverviewAddIntegrations'); await addIntegrations.click(); - await PageObjects.common.waitUntilUrlIncludes('integrations/browse'); + await common.waitUntilUrlIncludes('integrations/browse'); }); it('should show the no dataview component if no dataviews exist', async function () { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/long_window_logstash'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('visualize'); + await header.waitUntilLoadingHasFinished(); const dataViewToCreate = 'logstash'; await dataViews.createFromPrompt({ name: dataViewToCreate }); diff --git a/test/functional/apps/visualize/group2/_experimental_vis.ts b/test/functional/apps/visualize/group2/_experimental_vis.ts index 89a0a66b7c2be4..8f49fba2ac7392 100644 --- a/test/functional/apps/visualize/group2/_experimental_vis.ts +++ b/test/functional/apps/visualize/group2/_experimental_vis.ts @@ -13,23 +13,23 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); - const PageObjects = getPageObjects(['visualize']); + const { visualize } = getPageObjects(['visualize']); describe('experimental visualizations in visualize app ', function () { before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); }); describe('experimental visualizations', () => { beforeEach(async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.waitForVisualizationSelectPage(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.waitForVisualizationSelectPage(); }); it('should show an notification when creating beta visualizations', async () => { // Try to find a beta visualization. - const betaTypes = await PageObjects.visualize.getBetaTypeLinks(); + const betaTypes = await visualize.getBetaTypeLinks(); if (betaTypes.length === 0) { log.info('No beta visualization found. Skipping this test.'); return; @@ -38,15 +38,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Create a new visualization await betaTypes[0].click(); // Select a index-pattern/search if this vis requires it - await PageObjects.visualize.selectVisSourceIfRequired(); + await visualize.selectVisSourceIfRequired(); // Check that the beta banner is there and state that this is beta - const info = await PageObjects.visualize.getExperimentalInfo(); + const info = await visualize.getExperimentalInfo(); expect(await info.getVisibleText()).to.contain('beta'); }); it('should show an notification when creating experimental visualizations', async () => { // Try to find a experimental visualization. - const experimentalTypes = await PageObjects.visualize.getExperimentalTypeLinks(); + const experimentalTypes = await visualize.getExperimentalTypeLinks(); if (experimentalTypes.length === 0) { log.info('No experimental visualization found. Skipping this test.'); return; @@ -55,17 +55,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Create a new visualization await experimentalTypes[0].click(); // Select a index-pattern/search if this vis requires it - await PageObjects.visualize.selectVisSourceIfRequired(); + await visualize.selectVisSourceIfRequired(); // Check that the experimental banner is there and state that this is experimental - const info = await PageObjects.visualize.getExperimentalInfo(); + const info = await visualize.getExperimentalInfo(); expect(await info.getVisibleText()).to.contain('experimental'); }); it('should not show that notification for stable visualizations', async () => { - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); - expect(await PageObjects.visualize.isBetaInfoShown()).to.be(false); - expect(await PageObjects.visualize.isExperimentalInfoShown()).to.be(false); + await visualize.clickAreaChart(); + await visualize.clickNewSearch(); + expect(await visualize.isBetaInfoShown()).to.be(false); + expect(await visualize.isExperimentalInfoShown()).to.be(false); }); }); }); diff --git a/test/functional/apps/visualize/group2/_gauge_chart.ts b/test/functional/apps/visualize/group2/_gauge_chart.ts index 08d63de1e97462..8ff6d31229081c 100644 --- a/test/functional/apps/visualize/group2/_gauge_chart.ts +++ b/test/functional/apps/visualize/group2/_gauge_chart.ts @@ -17,20 +17,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const inspector = getService('inspector'); const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']); + const { visualize, visEditor, visChart, timePicker } = getPageObjects([ + 'visualize', + 'visEditor', + 'visChart', + 'timePicker', + ]); async function initGaugeVis() { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickGauge'); - await PageObjects.visualize.clickGauge(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await visualize.clickGauge(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); } describe('gauge chart', function indexPatternCreation() { before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); await initGaugeVis(); }); @@ -43,25 +48,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // initial metric of "Count" is selected by default return retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getGaugeValue(); + const metricValue = await visChart.getGaugeValue(); expect(expectedCount).to.eql(metricValue); }); }); it('should format the metric correctly in percentage mode', async function () { - await PageObjects.visEditor.clickMetricEditor(); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickMetricEditor(); + await visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.clickOptionsTab(); await testSubjects.setValue('gaugeColorRange2__to', '10000'); await testSubjects.click('gaugePercentageMode'); await testSubjects.setValue('gaugePercentageModeFormatPattern', '0.0%'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(false); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(false); await retry.try(async function tryingForTime() { const expectedTexts = ['57.3%', 'Average bytes']; - const metricValue = await PageObjects.visChart.getGaugeValue(); + const metricValue = await visChart.getGaugeValue(); expect(expectedTexts).to.eql(metricValue); }); }); @@ -70,19 +75,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await initGaugeVis(); log.debug('Bucket = Split Group'); - await PageObjects.visEditor.clickBucket('Split group'); + await visEditor.clickBucket('Split group'); log.debug('Aggregation = Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Field = machine.os.raw'); - await PageObjects.visEditor.selectField('machine.os.raw'); + await visEditor.selectField('machine.os.raw'); log.debug('Size = 4'); - await PageObjects.visEditor.setSize(4); - await PageObjects.visEditor.clickGo(false); + await visEditor.setSize(4); + await visEditor.clickGo(false); }); it('should show Split Gauges', async () => { await retry.try(async () => { - expect(await PageObjects.visChart.getGaugeValue()).to.eql([ + expect(await visChart.getGaugeValue()).to.eql([ '2,904', 'win 8', '2,858', @@ -96,8 +101,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add machine.os.raw:win 8 filter by click on the first Gauge', async () => { - await PageObjects.visChart.clickOnGaugeByLabel('win 8'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visChart.clickOnGaugeByLabel('win 8'); + await visChart.waitForVisualizationRenderingStabilized(); const hasFilter = await filterBar.hasFilter('machine.os.raw', 'win 8'); expect(hasFilter).to.eql(true); @@ -107,16 +112,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await filterBar.removeAllFilters(); const expectedTexts = ['2,904', 'win 8: Count', '0B', 'win 8: Min bytes']; - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.setSize(1); - await PageObjects.visEditor.clickBucket('Metric', 'metrics'); - await PageObjects.visEditor.selectAggregation('Min', 'metrics'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.clickGo(false); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os.raw'); + await visEditor.setSize(1); + await visEditor.clickBucket('Metric', 'metrics'); + await visEditor.selectAggregation('Min', 'metrics'); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.clickGo(false); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getGaugeValue(); + const metricValue = await visChart.getGaugeValue(); expect(expectedTexts).to.eql(metricValue); }); }); diff --git a/test/functional/apps/visualize/group2/_heatmap_chart.ts b/test/functional/apps/visualize/group2/_heatmap_chart.ts index a414ea689f799a..a8944f1131d06a 100644 --- a/test/functional/apps/visualize/group2/_heatmap_chart.ts +++ b/test/functional/apps/visualize/group2/_heatmap_chart.ts @@ -14,38 +14,43 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const inspector = getService('inspector'); - const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']); + const { visualize, visEditor, visChart, timePicker } = getPageObjects([ + 'visualize', + 'visEditor', + 'visChart', + 'timePicker', + ]); describe('heatmap chart', function indexPatternCreation() { const vizName1 = 'Visualization HeatmapChart'; let isNewChartsLibraryEnabled = false; before(async function () { - isNewChartsLibraryEnabled = await PageObjects.visChart.isNewChartsLibraryEnabled( + isNewChartsLibraryEnabled = await visChart.isNewChartsLibraryEnabled( 'visualization:visualize:legacyHeatmapChartsLibrary' ); - await PageObjects.visualize.initTests(isNewChartsLibraryEnabled); + await visualize.initTests(isNewChartsLibraryEnabled); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickHeatmapChart'); - await PageObjects.visualize.clickHeatmapChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await visualize.clickHeatmapChart(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); log.debug('Bucket = X-Axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp'); + await visEditor.selectField('@timestamp'); // leaving Interval set to Auto - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickGo(isNewChartsLibraryEnabled); }); it('should save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -83,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show 4 color ranges as default colorNumbers param', async function () { - const legends = await PageObjects.visChart.getLegendEntries(); + const legends = await visChart.getLegendEntries(); let expectedLegends = []; if (isNewChartsLibraryEnabled) { // the bands are different because we always scale to data bounds in the implementation @@ -95,12 +100,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show 6 color ranges if changed on options', async function () { - await PageObjects.visEditor.clickOptionsTab(); - await PageObjects.visEditor.changeHeatmapColorNumbers(6); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickOptionsTab(); + await visEditor.changeHeatmapColorNumbers(6); + await visEditor.clickGo(isNewChartsLibraryEnabled); + await visChart.waitForVisualizationRenderingStabilized(); - const legends = await PageObjects.visChart.getLegendEntries(); + const legends = await visChart.getLegendEntries(); let expectedLegends = []; if (isNewChartsLibraryEnabled) { // the bands are different because we always scale to data bounds in the implementation @@ -125,23 +130,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(legends).to.eql(expectedLegends); }); it('should show 6 custom color ranges', async function () { - await PageObjects.visEditor.clickOptionsTab(); - await PageObjects.visEditor.clickEnableCustomRanges(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); - await PageObjects.visEditor.clickAddRange(); + await visEditor.clickOptionsTab(); + await visEditor.clickEnableCustomRanges(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); + await visEditor.clickAddRange(); log.debug('customize 2 last ranges'); - await PageObjects.visEditor.setCustomRangeByIndex(6, '650', '720'); - await PageObjects.visEditor.setCustomRangeByIndex(7, '800', '905'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.setCustomRangeByIndex(6, '650', '720'); + await visEditor.setCustomRangeByIndex(7, '800', '905'); + await visEditor.clickGo(isNewChartsLibraryEnabled); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const legends = await PageObjects.visChart.getLegendEntries(); + await visChart.waitForVisualizationRenderingStabilized(); + const legends = await visChart.getLegendEntries(); let expectedLegends = []; if (isNewChartsLibraryEnabled) { expectedLegends = [ diff --git a/test/functional/apps/visualize/group2/_histogram_request_start.ts b/test/functional/apps/visualize/group2/_histogram_request_start.ts index cb51240c9be41d..8dc3a09854993a 100644 --- a/test/functional/apps/visualize/group2/_histogram_request_start.ts +++ b/test/functional/apps/visualize/group2/_histogram_request_start.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects([ + const { common, visualize, visEditor, visChart, timePicker } = getPageObjects([ 'common', 'visualize', 'visEditor', @@ -32,30 +32,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/long_window_logstash'); - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickDataTable'); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await visualize.clickDataTable(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); log.debug('Bucket = Split Rows'); - await PageObjects.visEditor.clickBucket('Split rows'); + await visEditor.clickBucket('Split rows'); log.debug('Aggregation = Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Field = machine.ram'); - await PageObjects.visEditor.selectField('machine.ram'); + await visEditor.selectField('machine.ram'); }); describe('interval parameter uses autoBounds', function () { it('should use provided value when number of generated buckets is less than histogram:maxBars', async function () { const providedInterval = '2400000000'; log.debug(`Interval = ${providedInterval}`); - await PageObjects.visEditor.setInterval(providedInterval, { type: 'numeric' }); - await PageObjects.visEditor.clickGo(); + await visEditor.setInterval(providedInterval, { type: 'numeric' }); + await visEditor.clickGo(); await retry.try(async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data.length).to.eql(10); const bucketStart = parseInt((data[0][0] as string).replace(/,/g, ''), 10); const bucketEnd = parseInt((data[1][0] as string).replace(/,/g, ''), 10); @@ -67,11 +67,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should scale value to round number when number of generated buckets is greater than histogram:maxBars', async function () { const providedInterval = '100'; log.debug(`Interval = ${providedInterval}`); - await PageObjects.visEditor.setInterval(providedInterval, { type: 'numeric' }); - await PageObjects.visEditor.clickGo(); - await PageObjects.common.sleep(1000); // fix this + await visEditor.setInterval(providedInterval, { type: 'numeric' }); + await visEditor.clickGo(); + await common.sleep(1000); // fix this await retry.try(async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); expect(data.length).to.eql(10); const bucketStart = parseInt((data[0][0] as string).replace(/,/g, ''), 10); const bucketEnd = parseInt((data[1][0] as string).replace(/,/g, ''), 10); @@ -84,11 +84,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('autoBounds are not set for number_range data', function () { it('should use provided value when number of generated buckets is less than histogram:maxBars', async function () { log.debug('Field = machine.ram_range'); - await PageObjects.visEditor.selectField('machine.ram_range'); + await visEditor.selectField('machine.ram_range'); await retry.waitFor('interval to be set', async () => { - return Boolean(await PageObjects.visEditor.getNumericInterval()); + return Boolean(await visEditor.getNumericInterval()); }); - expect(await PageObjects.visEditor.getNumericInterval()).to.eql(100); + expect(await visEditor.getNumericInterval()).to.eql(100); }); }); }); diff --git a/test/functional/apps/visualize/group2/_inspector.ts b/test/functional/apps/visualize/group2/_inspector.ts index 3baa0c7992b191..f1b2f119a79545 100644 --- a/test/functional/apps/visualize/group2/_inspector.ts +++ b/test/functional/apps/visualize/group2/_inspector.ts @@ -15,29 +15,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const inspector = getService('inspector'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']); + const { visualize, visEditor, visChart, timePicker } = getPageObjects([ + 'visualize', + 'visEditor', + 'visChart', + 'timePicker', + ]); describe('inspector', function describeIndexTests() { before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.initTests(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); }); describe('advanced input JSON', () => { it('should have "missing" property with value 10', async () => { log.debug('Add Max Metric on memory field'); - await PageObjects.visEditor.clickBucket('Y-axis', 'metrics'); - await PageObjects.visEditor.selectAggregation('Max', 'metrics'); - await PageObjects.visEditor.selectField('memory', 'metrics'); + await visEditor.clickBucket('Y-axis', 'metrics'); + await visEditor.selectAggregation('Max', 'metrics'); + await visEditor.selectField('memory', 'metrics'); log.debug('Add value to advanced JSON input'); - await PageObjects.visEditor.toggleAdvancedParams('2'); - await PageObjects.visEditor.inputValueInCodeEditor('{ "missing": 10 }'); - await PageObjects.visEditor.clickGo(); + await visEditor.toggleAdvancedParams('2'); + await visEditor.inputValueInCodeEditor('{ "missing": 10 }'); + await visEditor.clickGo(); await inspector.open(); await inspector.openInspectorRequestsView(); @@ -47,8 +52,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await inspector.close(); - await PageObjects.visEditor.removeDimension(2); - await PageObjects.visEditor.clickGo(); + await visEditor.removeDimension(2); + await visEditor.clickGo(); }); }); @@ -59,10 +64,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await inspector.close(); log.debug('Add Average Metric on machine.ram field'); - await PageObjects.visEditor.clickBucket('Y-axis', 'metrics'); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); - await PageObjects.visEditor.selectField('machine.ram', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.clickBucket('Y-axis', 'metrics'); + await visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectField('machine.ram', 'metrics'); + await visEditor.clickGo(); await inspector.open(); await inspector.expectTableHeaders(['Count', 'Average machine.ram', 'All docs']); await inspector.close(); @@ -71,23 +76,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('filtering on inspector table values', function () { before(async function () { log.debug('Add X-axis terms agg on machine.os.raw'); - await PageObjects.visEditor.clickBucket('X-axis'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.setSize(2); - await PageObjects.visEditor.toggleOtherBucket(3); - await PageObjects.visEditor.clickGo(); + await visEditor.clickBucket('X-axis'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os.raw'); + await visEditor.setSize(2); + await visEditor.toggleOtherBucket(3); + await visEditor.clickGo(); }); beforeEach(async function () { await inspector.open(); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visChart.waitForVisualizationRenderingStabilized(); }); afterEach(async function () { await inspector.close(); await filterBar.removeFilter('machine.os.raw'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visChart.waitForVisualizationRenderingStabilized(); }); it('should allow filtering for values', async function () { @@ -98,13 +103,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); await inspector.filterForTableCell({ column: 1, row: 1, filter: 'in' }); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); await inspector.expectTableData([['win 8', '2,904', '13,031,579,645.108']]); }); it('should allow filtering out values', async function () { await inspector.filterForTableCell({ column: 1, row: 1, filter: 'out' }); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); await inspector.expectTableData([ ['win xp', '2,858', '13,073,190,186.423'], ['win 7', '2,814', '13,186,695,551.251'], @@ -114,7 +119,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow filtering for other values', async function () { await inspector.filterForTableCell({ column: 1, row: 3, filter: 'in' }); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); await inspector.expectTableData([ ['win 7', '2,814', '13,186,695,551.251'], ['ios', '2,784', '13,009,497,206.823'], @@ -124,7 +129,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow filtering out other values', async function () { await inspector.filterForTableCell({ column: 1, row: 3, filter: 'out' }); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); await inspector.expectTableData([ ['win 8', '2,904', '13,031,579,645.108'], ['win xp', '2,858', '13,073,190,186.423'], diff --git a/test/functional/apps/visualize/group2/_metric_chart.ts b/test/functional/apps/visualize/group2/_metric_chart.ts index 19bd4accf271e0..3f97b940c5d297 100644 --- a/test/functional/apps/visualize/group2/_metric_chart.ts +++ b/test/functional/apps/visualize/group2/_metric_chart.ts @@ -16,17 +16,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const filterBar = getService('filterBar'); const inspector = getService('inspector'); - const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']); + const { visualize, visEditor, visChart, timePicker } = getPageObjects([ + 'visualize', + 'visEditor', + 'visChart', + 'timePicker', + ]); describe('metric chart', function () { before(async function () { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickMetric'); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); }); it('should have inspector enabled', async function () { @@ -38,21 +43,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // initial metric of "Count" is selected by default await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(expectedCount).to.eql(metricValue); }); }); it('should show Average', async function () { const avgMachineRam = ['13,104,036,080.615', 'Average machine.ram']; - await PageObjects.visEditor.clickMetricEditor(); + await visEditor.clickMetricEditor(); log.debug('Aggregation = Average'); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectAggregation('Average', 'metrics'); log.debug('Field = machine.ram'); - await PageObjects.visEditor.selectField('machine.ram', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('machine.ram', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(avgMachineRam).to.eql(metricValue); }); }); @@ -60,12 +65,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show Sum', async function () { const sumPhpMemory = ['85,865,880', 'Sum of phpmemory']; log.debug('Aggregation = Sum'); - await PageObjects.visEditor.selectAggregation('Sum', 'metrics'); + await visEditor.selectAggregation('Sum', 'metrics'); log.debug('Field = phpmemory'); - await PageObjects.visEditor.selectField('phpmemory', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('phpmemory', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(sumPhpMemory).to.eql(metricValue); }); }); @@ -74,12 +79,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const medianBytes = ['5,565.263', 'Median bytes']; // For now, only comparing the text label part of the metric log.debug('Aggregation = Median'); - await PageObjects.visEditor.selectAggregation('Median', 'metrics'); + await visEditor.selectAggregation('Median', 'metrics'); log.debug('Field = bytes'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); // only comparing the text label! expect(medianBytes[1]).to.eql(metricValue[1]); }); @@ -88,12 +93,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show Min', async function () { const minTimestamp = ['Sep 20, 2015 @ 00:00:00.000', 'Min @timestamp']; log.debug('Aggregation = Min'); - await PageObjects.visEditor.selectAggregation('Min', 'metrics'); + await visEditor.selectAggregation('Min', 'metrics'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('@timestamp', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(minTimestamp).to.eql(metricValue); }); }); @@ -104,12 +109,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Max relatedContent.article:modified_time', ]; log.debug('Aggregation = Max'); - await PageObjects.visEditor.selectAggregation('Max', 'metrics'); + await visEditor.selectAggregation('Max', 'metrics'); log.debug('Field = relatedContent.article:modified_time'); - await PageObjects.visEditor.selectField('relatedContent.article:modified_time', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('relatedContent.article:modified_time', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(maxRelatedContentArticleModifiedTime).to.eql(metricValue); }); }); @@ -117,12 +122,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show Unique Count', async function () { const uniqueCountClientip = ['1,000', 'Unique count of clientip']; log.debug('Aggregation = Unique Count'); - await PageObjects.visEditor.selectAggregation('Unique Count', 'metrics'); + await visEditor.selectAggregation('Unique Count', 'metrics'); log.debug('Field = clientip'); - await PageObjects.visEditor.selectField('clientip', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('clientip', 'metrics'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(uniqueCountClientip).to.eql(metricValue); }); }); @@ -146,14 +151,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; log.debug('Aggregation = Percentiles'); - await PageObjects.visEditor.selectAggregation('Percentiles', 'metrics'); + await visEditor.selectAggregation('Percentiles', 'metrics'); log.debug('Field = machine.ram'); - await PageObjects.visEditor.selectField('machine.ram', 'metrics'); - await PageObjects.visEditor.toggleAdvancedParams('1'); - await PageObjects.visEditor.inputValueInCodeEditor('{ "tdigest": { "compression": 1000 } }'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('machine.ram', 'metrics'); + await visEditor.toggleAdvancedParams('1'); + await visEditor.inputValueInCodeEditor('{ "tdigest": { "compression": 1000 } }'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(percentileMachineRam).to.eql(metricValue); }); }); @@ -161,14 +166,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show Percentile Ranks', async function () { const percentileRankBytes = ['2.036%', 'Percentile rank 99 of "memory"']; log.debug('Aggregation = Percentile Ranks'); - await PageObjects.visEditor.selectAggregation('Percentile Ranks', 'metrics'); + await visEditor.selectAggregation('Percentile Ranks', 'metrics'); log.debug('Field = bytes'); - await PageObjects.visEditor.selectField('memory', 'metrics'); + await visEditor.selectField('memory', 'metrics'); log.debug('Values = 99'); - await PageObjects.visEditor.setValue('99'); - await PageObjects.visEditor.clickGo(); + await visEditor.setValue('99'); + await visEditor.clickGo(); await retry.try(async function tryingForTime() { - const metricValue = await PageObjects.visChart.getMetric(); + const metricValue = await visChart.getMetric(); expect(percentileRankBytes).to.eql(metricValue); }); }); @@ -176,18 +181,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('with filters', function () { it('should allow filtering with buckets', async function () { log.debug('Bucket = Split Group'); - await PageObjects.visEditor.clickBucket('Split group'); + await visEditor.clickBucket('Split group'); log.debug('Aggregation = Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Field = machine.os.raw'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectField('machine.os.raw'); + await visEditor.clickGo(); let filterCount = 0; await retry.try(async function tryingForTime() { // click first metric bucket - await PageObjects.visEditor.clickMetricByIndex(0); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickMetricByIndex(0); + await visChart.waitForVisualizationRenderingStabilized(); filterCount = await filterBar.getFilterCount(); }); await filterBar.removeAllFilters(); diff --git a/test/functional/apps/visualize/group3/_add_to_dashboard.ts b/test/functional/apps/visualize/group3/_add_to_dashboard.ts index abfcbdec4b0a18..77125bc372934f 100644 --- a/test/functional/apps/visualize/group3/_add_to_dashboard.ts +++ b/test/functional/apps/visualize/group3/_add_to_dashboard.ts @@ -12,85 +12,79 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardExpect = getService('dashboardExpect'); + const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); const listingTable = getService('listingTable'); - const PageObjects = getPageObjects([ + const { common, dashboard, visualize, timePicker, timeToVisualize } = getPageObjects([ 'common', 'dashboard', - 'header', 'visualize', - 'visEditor', - 'discover', 'timePicker', 'timeToVisualize', ]); describe('Add to Dashboard', function describeIndexTests() { before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('adding a new metric to a new dashboard by value', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My New Vis 1', { + await timeToVisualize.saveFromModal('My New Vis 1', { addToDashboard: 'new', saveToLibrary: false, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists('My New Vis 1'); - expect(isLinked).to.be(false); + await dashboardPanelActions.expectNotLinkedToLibrary('My New Vis 1'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('adding a new metric to a new dashboard by reference', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My Saved New Vis 1', { + await timeToVisualize.saveFromModal('My Saved New Vis 1', { addToDashboard: 'new', saveToLibrary: true, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My Saved New Vis 1' - ); - expect(isLinked).to.be(true); + await dashboardPanelActions.expectLinkedToLibrary('My Saved New Vis 1'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('adding a existing metric to a new dashboard by value', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); // Save this new viz to library - await PageObjects.timeToVisualize.saveFromModal('My New Vis 1', { + await timeToVisualize.saveFromModal('My New Vis 1', { addToDashboard: null, saveToLibrary: true, }); @@ -98,37 +92,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('visualizeSaveButton'); // All the options should be disabled - await PageObjects.timeToVisualize.ensureDashboardOptionsAreDisabled(); + await timeToVisualize.ensureDashboardOptionsAreDisabled(); // Save a new copy of this viz to a new dashboard - await PageObjects.timeToVisualize.saveFromModal('My New Vis 1 Copy', { + await timeToVisualize.saveFromModal('My New Vis 1 Copy', { addToDashboard: 'new', saveAsNew: true, saveToLibrary: false, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My New Vis 1 Copy' - ); - expect(isLinked).to.be(false); + await dashboardPanelActions.expectNotLinkedToLibrary('My New Vis 1 Copy'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('adding a existing metric to a new dashboard by reference', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); // Save this new viz to library - await PageObjects.timeToVisualize.saveFromModal('Another New Vis 1', { + await timeToVisualize.saveFromModal('Another New Vis 1', { addToDashboard: null, saveToLibrary: true, }); @@ -136,107 +127,100 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('visualizeSaveButton'); // All the options should be disabled - await PageObjects.timeToVisualize.ensureDashboardOptionsAreDisabled(); + await timeToVisualize.ensureDashboardOptionsAreDisabled(); // Save a new copy of this viz to a new dashboard - await PageObjects.timeToVisualize.saveFromModal('Another New Vis 1 Copy', { + await timeToVisualize.saveFromModal('Another New Vis 1 Copy', { addToDashboard: 'new', saveAsNew: true, saveToLibrary: true, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Another New Vis 1 Copy' - ); - expect(isLinked).to.be(true); + await dashboardPanelActions.expectLinkedToLibrary('Another New Vis 1 Copy'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('adding a new metric to an existing dashboard by value', async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); - await PageObjects.dashboard.saveDashboard('My Excellent Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations(['Visualization AreaChart']); + await dashboard.saveDashboard('My Excellent Dashboard'); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', 'My Excellent Dashboard', 1); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My New Vis 2', { + await timeToVisualize.saveFromModal('My New Vis 2', { addToDashboard: 'existing', dashboardId: 'My Excellent Dashboard', saveToLibrary: false, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists('My New Vis 2'); - expect(isLinked).to.be(false); + await dashboardPanelActions.expectNotLinkedToLibrary('My New Vis 2'); }); it('adding a new metric to an existing dashboard by reference', async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); - await PageObjects.dashboard.saveDashboard('My Wonderful Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations(['Visualization AreaChart']); + await dashboard.saveDashboard('My Wonderful Dashboard'); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', 'My Wonderful Dashboard', 1); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My Saved New Vis 2', { + await timeToVisualize.saveFromModal('My Saved New Vis 2', { addToDashboard: 'existing', dashboardId: 'My Wonderful Dashboard', saveToLibrary: true, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My Saved New Vis 2' - ); - expect(isLinked).to.be(true); + await dashboardPanelActions.expectLinkedToLibrary('My Saved New Vis 2', false); }); it('adding a existing metric to an existing dashboard by value', async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); - await PageObjects.dashboard.saveDashboard('My Very Cool Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations(['Visualization AreaChart']); + await dashboard.saveDashboard('My Very Cool Dashboard'); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', 'My Very Cool Dashboard', 1); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); // Save this new viz to library - await PageObjects.timeToVisualize.saveFromModal('My New Vis 2', { + await timeToVisualize.saveFromModal('My New Vis 2', { addToDashboard: null, saveToLibrary: true, }); @@ -244,44 +228,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('visualizeSaveButton'); // All the options should be disabled - await PageObjects.timeToVisualize.ensureDashboardOptionsAreDisabled(); + await timeToVisualize.ensureDashboardOptionsAreDisabled(); // Save a new copy of this viz to an existing dashboard - await PageObjects.timeToVisualize.saveFromModal('My New Vis 2 Copy', { + await timeToVisualize.saveFromModal('My New Vis 2 Copy', { addToDashboard: 'existing', dashboardId: 'My Very Cool Dashboard', saveAsNew: true, saveToLibrary: false, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My New Vis 2 Copy' - ); - expect(isLinked).to.be(false); + await dashboardPanelActions.expectNotLinkedToLibrary('My New Vis 2 Copy'); }); it('adding a existing metric to an existing dashboard by reference', async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); - await PageObjects.dashboard.saveDashboard('My Very Neat Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await dashboard.addVisualizations(['Visualization AreaChart']); + await dashboard.saveDashboard('My Very Neat Dashboard'); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', 'My Very Neat Dashboard', 1); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); await testSubjects.click('visualizeSaveButton'); // Save this new viz to library - await PageObjects.timeToVisualize.saveFromModal('Neat Saved Vis 2', { + await timeToVisualize.saveFromModal('Neat Saved Vis 2', { addToDashboard: null, saveToLibrary: true, }); @@ -289,25 +270,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('visualizeSaveButton'); // All the options should be disabled - await PageObjects.timeToVisualize.ensureDashboardOptionsAreDisabled(); + await timeToVisualize.ensureDashboardOptionsAreDisabled(); // Save a new copy of this viz to an existing dashboard - await PageObjects.timeToVisualize.saveFromModal('Neat Saved Vis 2 Copy', { + await timeToVisualize.saveFromModal('Neat Saved Vis 2 Copy', { addToDashboard: 'existing', dashboardId: 'My Very Neat Dashboard', saveAsNew: true, saveToLibrary: true, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,004']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Neat Saved Vis 2 Copy' - ); - expect(isLinked).to.be(true); + await dashboardPanelActions.expectLinkedToLibrary('Neat Saved Vis 2 Copy'); }); }); } diff --git a/test/functional/apps/visualize/group3/_annotation_listing.ts b/test/functional/apps/visualize/group3/_annotation_listing.ts index 18c819932d5121..a6a17434300921 100644 --- a/test/functional/apps/visualize/group3/_annotation_listing.ts +++ b/test/functional/apps/visualize/group3/_annotation_listing.ts @@ -11,7 +11,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'annotationEditor']); + const { visualize, annotationEditor } = getPageObjects(['visualize', 'annotationEditor']); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); @@ -32,8 +32,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { path: `/api/data_views/data_view/data-view-to-delete`, }); - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.selectAnnotationsTab(); + await visualize.gotoVisualizationLandingPage(); + await visualize.selectAnnotationsTab(); await listingTable.waitUntilTableIsLoaded(); }); @@ -111,11 +111,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('edit', function () { it('edits group metadata', async function () { await listingTable.clickItemLink('eventAnnotation', 'group 3'); - await PageObjects.annotationEditor.editGroupMetadata({ + await annotationEditor.editGroupMetadata({ title: 'edited title', description: 'edited description', }); - await PageObjects.annotationEditor.saveGroup(); + await annotationEditor.saveGroup(); await listingTable.searchForItemWithName('edited title'); await listingTable.expectItemsCount('eventAnnotation', 1); @@ -127,10 +127,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('individual annotations', () => { it('edits an existing annotation', async function () { await listingTable.clickItemLink('eventAnnotation', 'edited title'); - expect(await PageObjects.annotationEditor.getAnnotationCount()).to.be(1); + expect(await annotationEditor.getAnnotationCount()).to.be(1); - await PageObjects.annotationEditor.openAnnotation(); - await PageObjects.annotationEditor.configureAnnotation({ + await annotationEditor.openAnnotation(); + await annotationEditor.configureAnnotation({ query: 'my query', lineThickness: 5, color: '#FF0000', @@ -138,25 +138,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('adds a new annotation', async function () { - await PageObjects.annotationEditor.addAnnotation({ + await annotationEditor.addAnnotation({ query: 'other query', lineThickness: 3, color: '#00FF00', }); await retry.try(async () => { - expect(await PageObjects.annotationEditor.getAnnotationCount()).to.be(2); + expect(await annotationEditor.getAnnotationCount()).to.be(2); }); }); it('removes an annotation', async function () { - await PageObjects.annotationEditor.removeAnnotation(); + await annotationEditor.removeAnnotation(); await retry.try(async () => { - expect(await PageObjects.annotationEditor.getAnnotationCount()).to.be(1); + expect(await annotationEditor.getAnnotationCount()).to.be(1); }); - await PageObjects.annotationEditor.saveGroup(); + await annotationEditor.saveGroup(); }); }); @@ -169,18 +169,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.clickItemLink('eventAnnotation', 'missing data view'); await retry.try(async () => { - expect(await PageObjects.annotationEditor.showingMissingDataViewPrompt()).to.be(true); + expect(await annotationEditor.showingMissingDataViewPrompt()).to.be(true); }); await retry.try(async () => { - await PageObjects.annotationEditor.editGroupMetadata({ + await annotationEditor.editGroupMetadata({ dataView: 'logs*', }); - expect(await PageObjects.annotationEditor.showingMissingDataViewPrompt()).to.be(false); + expect(await annotationEditor.showingMissingDataViewPrompt()).to.be(false); expect(await find.byCssSelector('canvas')).to.be.ok(); }); - await PageObjects.annotationEditor.saveGroup(); + await annotationEditor.saveGroup(); }); it('recovers from missing field in data view', async () => { @@ -198,7 +198,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await assertShowingMissingFieldError(false); await retry.try(async () => { - await PageObjects.annotationEditor.editGroupMetadata({ + await annotationEditor.editGroupMetadata({ dataView: 'Data view without fields', }); @@ -206,7 +206,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await retry.try(async () => { - await PageObjects.annotationEditor.editGroupMetadata({ + await annotationEditor.editGroupMetadata({ dataView: 'logs*', }); diff --git a/test/functional/apps/visualize/group3/_linked_saved_searches.ts b/test/functional/apps/visualize/group3/_linked_saved_searches.ts index 0277aaa8ad1906..d2d1195e78c618 100644 --- a/test/functional/apps/visualize/group3/_linked_saved_searches.ts +++ b/test/functional/apps/visualize/group3/_linked_saved_searches.ts @@ -16,7 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, discover, visualize, header, timePicker, visChart } = getPageObjects([ 'common', 'discover', 'visualize', @@ -31,25 +31,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let discoverSavedSearchUrlPath: string; before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); await filterBar.addFilter({ field: 'extension.raw', operation: 'is', value: 'jpg' }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.saveSearch(savedSearchName); + await header.waitUntilLoadingHasFinished(); + await discover.saveSearch(savedSearchName); discoverSavedSearchUrlPath = (await browser.getCurrentUrl()).split('?')[0]; }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should create a visualization from a saved search', async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickSavedSearch(savedSearchName); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickSavedSearch(savedSearchName); await retry.waitFor('wait for count to equal 9,109', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); return data[0][0] === '9,109'; }); }); @@ -57,10 +57,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should have a valid link to the saved search from the visualization', async () => { await testSubjects.click('showUnlinkSavedSearchPopover'); await testSubjects.click('viewSavedSearch'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('wait discover load its breadcrumbs', async () => { - const discoverBreadcrumb = await PageObjects.discover.getCurrentQueryName(); + const discoverBreadcrumb = await discover.getCurrentQueryName(); return discoverBreadcrumb === savedSearchName; }); @@ -69,16 +69,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // go back to visualize await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); it('should respect the time filter when linked to a saved search', async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 19, 2015 @ 06:31:44.000', 'Sep 21, 2015 @ 10:00:00.000' ); await retry.waitFor('wait for count to equal 3,950', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); return data[0][0] === '3,950'; }); }); @@ -89,17 +89,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { operation: 'is between', value: { from: '100', to: '3000' }, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('wait for count to equal 707', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); return data[0][0] === '707'; }); }); it('should allow unlinking from a linked search', async () => { - await PageObjects.visualize.clickUnlinkSavedSearch(); + await visualize.clickUnlinkSavedSearch(); await retry.waitFor('wait for count to equal 707', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); return data[0][0] === '707'; }); // The filter on the saved search should now be in the editor @@ -108,18 +108,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Disabling this filter should now result in different values, since // the visualization should not be linked anymore with the saved search. await filterBar.toggleFilterEnabled('extension.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('wait for count to equal 1,293', async () => { - const unfilteredData = await PageObjects.visChart.getTableVisContent(); + const unfilteredData = await visChart.getTableVisContent(); return unfilteredData[0][0] === '1,293'; }); }); it('should not break when saving after unlinking', async () => { - await PageObjects.visualize.saveVisualizationExpectSuccess('Unlinked before saved'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visualize.saveVisualizationExpectSuccess('Unlinked before saved'); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('wait for count to equal 1,293', async () => { - const data = await PageObjects.visChart.getTableVisContent(); + const data = await visChart.getTableVisContent(); return data[0][0] === '1,293'; }); }); diff --git a/test/functional/apps/visualize/group3/_pie_chart.ts b/test/functional/apps/visualize/group3/_pie_chart.ts index 33eee96ba9cd27..d42d6e72f232f3 100644 --- a/test/functional/apps/visualize/group3/_pie_chart.ts +++ b/test/functional/apps/visualize/group3/_pie_chart.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const pieChart = getService('pieChart'); const inspector = getService('inspector'); - const PageObjects = getPageObjects([ + const { common, visualize, visEditor, visChart, header, timePicker } = getPageObjects([ 'common', 'visualize', 'visEditor', @@ -31,38 +31,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let isNewChartsLibraryEnabled = false; const vizName1 = 'Visualization PieChart'; before(async function () { - isNewChartsLibraryEnabled = await PageObjects.visChart.isNewChartsLibraryEnabled(); - await PageObjects.visualize.initTests(isNewChartsLibraryEnabled); + isNewChartsLibraryEnabled = await visChart.isNewChartsLibraryEnabled(); + await visualize.initTests(isNewChartsLibraryEnabled); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.navigateToNewAggBasedVisualization(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); log.debug('clickPieChart'); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Click field memory'); - await PageObjects.visEditor.selectField('memory'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.sleep(1003); + await visEditor.selectField('memory'); + await header.waitUntilLoadingHasFinished(); + await common.sleep(1003); log.debug('setNumericInterval 4000'); - await PageObjects.visEditor.setInterval('40000', { type: 'numeric' }); + await visEditor.setInterval('40000', { type: 'numeric' }); log.debug('clickGo'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickGo(isNewChartsLibraryEnabled); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -96,20 +96,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show other and missing bucket', async function () { const expectedTableData = ['Missing', 'Other', 'ios', 'win 7', 'win 8', 'win xp']; - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickPieChart'); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Click field machine.os.raw'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.toggleOtherBucket(2); - await PageObjects.visEditor.toggleMissingBucket(2); + await visEditor.selectField('machine.os.raw'); + await visEditor.toggleOtherBucket(2); + await visEditor.toggleMissingBucket(2); log.debug('clickGo'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickGo(isNewChartsLibraryEnabled); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); }); @@ -117,20 +117,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedTableData = ['Missing', 'osx']; await pieChart.filterOnPieSlice('Other'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); await filterBar.removeFilter('machine.os.raw'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); }); it('should apply correct filter on other bucket by clicking on a legend', async () => { const expectedTableData = ['Missing', 'osx']; - await PageObjects.visChart.filterLegend('Other'); - await PageObjects.visChart.waitForVisualization(); + await visChart.filterLegend('Other'); + await visChart.waitForVisualization(); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); await filterBar.removeFilter('machine.os.raw'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); }); it('should show two levels of other buckets', async () => { @@ -179,50 +179,50 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Other', ].sort(); - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split slices'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split slices'); + await visEditor.selectAggregation('Terms'); log.debug('Click field geo.src'); - await PageObjects.visEditor.selectField('geo.src'); - await PageObjects.visEditor.toggleOtherBucket(3); - await PageObjects.visEditor.toggleMissingBucket(3); + await visEditor.selectField('geo.src'); + await visEditor.toggleOtherBucket(3); + await visEditor.toggleMissingBucket(3); log.debug('clickGo'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickGo(isNewChartsLibraryEnabled); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); }); }); describe('disabled aggs', () => { before(async () => { - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForRenderingCount(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForRenderingCount(); }); it('should show correct result with one agg disabled', async () => { const expectedTableData = ['ios', 'osx', 'win 7', 'win 8', 'win xp']; - await PageObjects.visEditor.clickBucket('Split slices'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.toggleDisabledAgg(2); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickBucket('Split slices'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os.raw'); + await visEditor.toggleDisabledAgg(2); + await visEditor.clickGo(isNewChartsLibraryEnabled); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); }); it('should correctly save disabled agg', async () => { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForRenderingCount(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForRenderingCount(); const expectedTableData = ['ios', 'osx', 'win 7', 'win 8', 'win xp']; await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); }); it('should show correct result when agg is re-enabled', async () => { - await PageObjects.visEditor.toggleDisabledAgg(2); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.toggleDisabledAgg(2); + await visEditor.clickGo(isNewChartsLibraryEnabled); const expectedTableData = [ '0', @@ -293,55 +293,55 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('empty time window', () => { it('should show no data message when no data on selected timerange', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickPieChart'); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Filters'); - await PageObjects.visEditor.selectAggregation('Filters'); + await visEditor.selectAggregation('Filters'); log.debug('Set the 1st filter value'); - await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"US"'); + await visEditor.setFilterAggregationValue('geo.dest:"US"'); log.debug('Add new filter'); - await PageObjects.visEditor.addNewFilterAggregation(); + await visEditor.addNewFilterAggregation(); log.debug('Set the 2nd filter value'); - await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"CN"', 1); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.setFilterAggregationValue('geo.dest:"CN"', 1); + await visEditor.clickGo(isNewChartsLibraryEnabled); const emptyFromTime = 'Sep 19, 2016 @ 06:31:44.000'; const emptyToTime = 'Sep 23, 2016 @ 18:31:44.000'; log.debug( 'Switch to a different time range from "' + emptyFromTime + '" to "' + emptyToTime + '"' ); - await PageObjects.timePicker.setAbsoluteRange(emptyFromTime, emptyToTime); - await PageObjects.visChart.waitForVisualization(); - await PageObjects.visChart.expectError(); + await timePicker.setAbsoluteRange(emptyFromTime, emptyToTime); + await visChart.waitForVisualization(); + await visChart.expectError(); }); }); describe('multi series slice', () => { before(async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickPieChart'); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Histogram'); - await PageObjects.visEditor.selectAggregation('Histogram'); + await visEditor.selectAggregation('Histogram'); log.debug('Click field memory'); - await PageObjects.visEditor.selectField('memory'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.sleep(1003); + await visEditor.selectField('memory'); + await header.waitUntilLoadingHasFinished(); + await common.sleep(1003); log.debug('setNumericInterval 4000'); - await PageObjects.visEditor.setInterval('40000', { type: 'numeric' }); + await visEditor.setInterval('40000', { type: 'numeric' }); log.debug('Toggle previous editor'); - await PageObjects.visEditor.toggleAggregationEditor(2); + await visEditor.toggleAggregationEditor(2); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('geo.dest'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickBucket('Split slices'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('geo.dest'); + await visEditor.clickGo(isNewChartsLibraryEnabled); }); it('should show correct chart', async () => { @@ -431,17 +431,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'CN', ].sort(); if (isNewChartsLibraryEnabled) { - await PageObjects.visEditor.clickOptionsTab(); - await PageObjects.visEditor.togglePieLegend(); - await PageObjects.visEditor.togglePieNestedLegend(); - await PageObjects.visEditor.clickDataTab(); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickOptionsTab(); + await visEditor.togglePieLegend(); + await visEditor.togglePieNestedLegend(); + await visEditor.clickDataTab(); + await visEditor.clickGo(isNewChartsLibraryEnabled); } - await PageObjects.visChart.filterLegend('CN'); - await PageObjects.visChart.waitForVisualization(); + await visChart.filterLegend('CN'); + await visChart.waitForVisualization(); await pieChart.expectPieChartLabels(expectedTableData, isNewChartsLibraryEnabled); await filterBar.removeFilter('geo.dest'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); }); it('should still showing pie chart when a subseries have zero data', async function () { @@ -450,26 +450,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return; } - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickPieChart'); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Filters'); - await PageObjects.visEditor.selectAggregation('Filters'); + await visEditor.selectAggregation('Filters'); log.debug('Set the 1st filter value'); - await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"US"'); + await visEditor.setFilterAggregationValue('geo.dest:"US"'); log.debug('Toggle previous editor'); - await PageObjects.visEditor.toggleAggregationEditor(2); + await visEditor.toggleAggregationEditor(2); log.debug('Add a new series, select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); + await visEditor.clickBucket('Split slices'); log.debug('Click aggregation Filters'); - await PageObjects.visEditor.selectAggregation('Filters'); + await visEditor.selectAggregation('Filters'); log.debug('Set the 1st filter value of the aggregation id 3'); - await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"UX"', 0, 3); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); - const legends = await PageObjects.visChart.getLegendEntries(); + await visEditor.setFilterAggregationValue('geo.dest:"UX"', 0, 3); + await visEditor.clickGo(isNewChartsLibraryEnabled); + const legends = await visChart.getLegendEntries(); const expectedLegends = ['geo.dest:"US"', 'geo.dest:"UX"']; expect(legends).to.eql(expectedLegends); }); @@ -477,19 +477,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('split chart', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickPieChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickPieChart(); + await visualize.clickNewSearch(); log.debug('select bucket Split chart'); - await PageObjects.visEditor.clickBucket('Split chart'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os.raw'); - await PageObjects.visEditor.toggleAggregationEditor(2); + await visEditor.clickBucket('Split chart'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os.raw'); + await visEditor.toggleAggregationEditor(2); log.debug('Add a new series, select bucket Split slices'); - await PageObjects.visEditor.clickBucket('Split slices'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('geo.src'); - await PageObjects.visEditor.clickGo(isNewChartsLibraryEnabled); + await visEditor.clickBucket('Split slices'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('geo.src'); + await visEditor.clickGo(isNewChartsLibraryEnabled); }); it('shows correct split chart', async () => { @@ -540,8 +540,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // the count of records is not shown for every split level in the new charting library isNewChartsLibraryEnabled ? [row[0], ...row.slice(2)] : row ); - await PageObjects.visChart.filterLegend('CN'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visChart.filterLegend('CN'); + await header.waitUntilLoadingHasFinished(); await inspector.open(); await inspector.setTablePageSize(50); await inspector.expectTableData(expectedTableData); diff --git a/test/functional/apps/visualize/group3/_shared_item.ts b/test/functional/apps/visualize/group3/_shared_item.ts index 9e2e420317b7c8..399fcac84d5515 100644 --- a/test/functional/apps/visualize/group3/_shared_item.ts +++ b/test/functional/apps/visualize/group3/_shared_item.ts @@ -14,13 +14,13 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'visualize']); + const { common, visualize } = getPageObjects(['common', 'visualize']); describe('data-shared-item', function indexPatternCreation() { before(async function () { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.common.navigateToApp('visualize'); + await common.navigateToApp('visualize'); }); it('should have the correct data-shared-item title and description, and sharedItemContainer should exist', async function () { @@ -29,12 +29,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { description: 'AreaChart', }; - await PageObjects.visualize.openSavedVisualization('Shared-Item Visualization AreaChart'); + await visualize.openSavedVisualization('Shared-Item Visualization AreaChart'); await retry.try(async function () { - const { title, description } = await PageObjects.common.getSharedItemTitleAndDescription(); + const { title, description } = await common.getSharedItemTitleAndDescription(); expect(title).to.eql(expected.title); expect(description).to.eql(expected.description); - const sharedItemContainers = await PageObjects.common.getSharedItemContainers(); + const sharedItemContainers = await common.getSharedItemContainers(); expect(sharedItemContainers.length).to.be(1); }); }); diff --git a/test/functional/apps/visualize/group3/_visualize_listing.ts b/test/functional/apps/visualize/group3/_visualize_listing.ts index 94ac569ab3420e..7cb1b7b4b51be0 100644 --- a/test/functional/apps/visualize/group3/_visualize_listing.ts +++ b/test/functional/apps/visualize/group3/_visualize_listing.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'visEditor']); + const { visualize, visEditor } = getPageObjects(['visualize', 'visEditor']); const listingTable = getService('listingTable'); describe('visualize listing page', function describeIndexTests() { @@ -18,28 +18,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('create and delete', function () { before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.deleteAllVisualizations(); + await visualize.initTests(); + await visualize.gotoVisualizationLandingPage(); + await visualize.deleteAllVisualizations(); }); it('create new viz', async function () { // type markdown is used for simplicity - await PageObjects.visualize.createSimpleMarkdownViz(vizName); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.createSimpleMarkdownViz(vizName); + await visualize.gotoVisualizationLandingPage(); await listingTable.expectItemsCount('visualize', 1); }); it('delete all viz', async function () { - await PageObjects.visualize.createSimpleMarkdownViz(vizName + '1'); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.createSimpleMarkdownViz(vizName + '1'); + await visualize.gotoVisualizationLandingPage(); await listingTable.expectItemsCount('visualize', 2); - await PageObjects.visualize.createSimpleMarkdownViz(vizName + '2'); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.createSimpleMarkdownViz(vizName + '2'); + await visualize.gotoVisualizationLandingPage(); await listingTable.expectItemsCount('visualize', 3); - await PageObjects.visualize.deleteAllVisualizations(); + await visualize.deleteAllVisualizations(); await listingTable.expectItemsCount('visualize', 0); }); }); @@ -47,12 +47,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('search', function () { before(async function () { // create one new viz - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickMarkdownWidget(); - await PageObjects.visEditor.setMarkdownTxt('HELLO'); - await PageObjects.visEditor.clickGo(); - await PageObjects.visualize.saveVisualization('Hello World'); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.navigateToNewVisualization(); + await visualize.clickMarkdownWidget(); + await visEditor.setMarkdownTxt('HELLO'); + await visEditor.clickGo(); + await visualize.saveVisualization('Hello World'); + await visualize.gotoVisualizationLandingPage(); }); it('matches on the first word', async function () { @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Edit', () => { before(async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); }); it('should edit the title and description of a visualization', async () => { diff --git a/test/functional/apps/visualize/group6/_tag_cloud.ts b/test/functional/apps/visualize/group6/_tag_cloud.ts index 7eeb304cfd1082..b88647451cac12 100644 --- a/test/functional/apps/visualize/group6/_tag_cloud.ts +++ b/test/functional/apps/visualize/group6/_tag_cloud.ts @@ -19,43 +19,44 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const retry = getService('retry'); const find = getService('find'); - const PageObjects = getPageObjects([ - 'common', - 'visualize', - 'visEditor', - 'visChart', - 'header', - 'settings', - 'timePicker', - 'tagCloud', - ]); + const { common, visualize, visEditor, visChart, header, settings, timePicker, tagCloud } = + getPageObjects([ + 'common', + 'visualize', + 'visEditor', + 'visChart', + 'header', + 'settings', + 'timePicker', + 'tagCloud', + ]); describe('tag cloud chart', function () { const vizName1 = 'Visualization tagCloud'; const termsField = 'machine.ram'; before(async function () { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickTagCloud'); - await PageObjects.visualize.clickTagCloud(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickTagCloud(); + await visualize.clickNewSearch(); log.debug('select Tags'); - await PageObjects.visEditor.clickBucket('Tags'); + await visEditor.clickBucket('Tags'); log.debug('Click aggregation Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Click field machine.ram'); await retry.try(async function tryingForTime() { - await PageObjects.visEditor.selectField(termsField); + await visEditor.selectField(termsField); }); - await PageObjects.visEditor.selectOrderByMetric(2, '_key'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectOrderByMetric(2, '_key'); + await visEditor.clickGo(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should have inspector enabled', async function () { @@ -63,8 +64,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show correct tag cloud data', async function () { - await PageObjects.visChart.waitForVisualization(); - const data = await PageObjects.tagCloud.getTextTag(); + await visChart.waitForVisualization(); + const data = await tagCloud.getTextTag(); log.debug(data); expect(data).to.eql([ '32,212,254,720', @@ -77,23 +78,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should collapse the sidebar', async function () { const editorSidebar = await find.byCssSelector('.visEditorSidebar'); - await PageObjects.visEditor.clickEditorSidebarCollapse(); + await visEditor.clickEditorSidebarCollapse(); // Give d3 tag cloud some time to rearrange tags - await PageObjects.common.sleep(1000); + await common.sleep(1000); const isDisplayed = await editorSidebar.isDisplayed(); expect(isDisplayed).to.be(false); - await PageObjects.visEditor.clickEditorSidebarCollapse(); + await visEditor.clickEditorSidebarCollapse(); }); it('should still show all tags after sidebar has been collapsed', async function () { - await PageObjects.visEditor.clickEditorSidebarCollapse(); + await visEditor.clickEditorSidebarCollapse(); // Give d3 tag cloud some time to rearrange tags - await PageObjects.common.sleep(1000); - await PageObjects.visEditor.clickEditorSidebarCollapse(); + await common.sleep(1000); + await visEditor.clickEditorSidebarCollapse(); // Give d3 tag cloud some time to rearrange tags - await PageObjects.common.sleep(1000); - await PageObjects.visChart.waitForVisualization(); - const data = await PageObjects.tagCloud.getTextTag(); + await common.sleep(1000); + await visChart.waitForVisualization(); + const data = await tagCloud.getTextTag(); log.debug(data); expect(data).to.eql([ '32,212,254,720', @@ -106,11 +107,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should still show all tags after browser was resized very small', async function () { await browser.setWindowSize(200, 200); - await PageObjects.common.sleep(1000); + await common.sleep(1000); await browser.setWindowSize(1200, 800); - await PageObjects.common.sleep(1000); - await PageObjects.visChart.waitForVisualization(); - const data = await PageObjects.tagCloud.getTextTag(); + await common.sleep(1000); + await visChart.waitForVisualization(); + const data = await tagCloud.getTextTag(); expect(data).to.eql([ '32,212,254,720', '21,474,836,480', @@ -121,14 +122,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should show the tags and relative size', function () { - return PageObjects.tagCloud.getTextSizes().then(function (results) { + return tagCloud.getTextSizes().then(function (results) { log.debug('results here ' + results); expect(results).to.eql(['72px', '63px', '32px', '25px', '18px']); }); @@ -150,47 +151,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('formatted field', function () { before(async function () { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.openControlsByName(termsField); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); + await settings.clickIndexPatternLogstash(); + await settings.openControlsByName(termsField); await ( await ( await testSubjects.find('formatRow') ).findAllByCssSelector('[data-test-subj="toggle"]') )[0].click(); - await PageObjects.settings.setFieldFormat('bytes'); - await PageObjects.settings.controlChangeSave(); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization(vizName1, { + await settings.setFieldFormat('bytes'); + await settings.controlChangeSave(); + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization(vizName1, { navigateToVisualize: false, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visChart.waitForVisualization(); + await header.waitUntilLoadingHasFinished(); + await visChart.waitForVisualization(); }); after(async function () { await filterBar.removeFilter(termsField); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.openControlsByName(termsField); - await PageObjects.settings.setFieldFormat(''); - await PageObjects.settings.controlChangeSave(); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); + await settings.clickIndexPatternLogstash(); + await settings.openControlsByName(termsField); + await settings.setFieldFormat(''); + await settings.controlChangeSave(); }); it('should format tags with field formatter', async function () { - await PageObjects.visChart.waitForVisualization(); - const data = await PageObjects.tagCloud.getTextTag(); + await visChart.waitForVisualization(); + const data = await tagCloud.getTextTag(); log.debug(data); expect(data).to.eql(['30GB', '20GB', '18GB', '19GB', '17GB']); }); it('should apply filter with unformatted value', async function () { - await PageObjects.tagCloud.selectTagCloudTag('30GB'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visChart.waitForVisualization(); - const data = await PageObjects.tagCloud.getTextTag(); + await tagCloud.selectTagCloudTag('30GB'); + await header.waitUntilLoadingHasFinished(); + await visChart.waitForVisualization(); + const data = await tagCloud.getTextTag(); expect(data).to.eql(['30GB']); }); }); diff --git a/test/functional/apps/visualize/group6/_vega_chart.ts b/test/functional/apps/visualize/group6/_vega_chart.ts index 6e5a1c9dc83efd..e833bf233ca9f4 100644 --- a/test/functional/apps/visualize/group6/_vega_chart.ts +++ b/test/functional/apps/visualize/group6/_vega_chart.ts @@ -28,7 +28,7 @@ signals: [ { }]}`; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { timePicker, visualize, visChart, visEditor, vegaChart } = getPageObjects([ 'timePicker', 'visualize', 'visChart', @@ -44,25 +44,25 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('vega chart in visualize app', () => { before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); log.debug('clickVega'); - await PageObjects.visualize.clickVega(); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visualize.clickVega(); + await visChart.waitForVisualizationRenderingStabilized(); }); describe('vega chart', () => { describe('initial render', () => { it('should have some initial vega spec text', async function () { - const vegaSpec = await PageObjects.vegaChart.getSpec(); + const vegaSpec = await vegaChart.getSpec(); expect(vegaSpec).to.contain('{'); expect(vegaSpec).to.contain('data'); expect(vegaSpec.length).to.be.above(500); }); it('should have view and control containers', async function () { - const view = await PageObjects.vegaChart.getViewContainer(); + const view = await vegaChart.getViewContainer(); expect(view).to.be.ok(); const size = await view.getSize(); expect(size).to.have.property('width'); @@ -70,7 +70,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(size.width).to.be.above(0); expect(size.height).to.be.above(0); - const controls = await PageObjects.vegaChart.getControlContainer(); + const controls = await vegaChart.getControlContainer(); expect(controls).to.be.ok(); }); }); @@ -78,7 +78,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('with filters', () => { before(async () => { log.debug('setAbsoluteRange'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); }); afterEach(async () => { @@ -86,15 +86,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should render different data in response to filter change', async function () { - await PageObjects.vegaChart.typeInSpec('"config": { "kibana": {"renderer": "svg"} },'); - await PageObjects.visEditor.clickGo(); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const fullDataLabels = await PageObjects.vegaChart.getYAxisLabels(); + await vegaChart.typeInSpec('"config": { "kibana": {"renderer": "svg"} },'); + await visEditor.clickGo(); + await visChart.waitForVisualizationRenderingStabilized(); + const fullDataLabels = await vegaChart.getYAxisLabels(); expect(fullDataLabels[0]).to.eql('0'); expect(fullDataLabels[fullDataLabels.length - 1]).to.eql('1,600'); await filterBar.addFilter({ field: '@tags.raw', operation: 'is', value: 'error' }); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - const filteredDataLabels = await PageObjects.vegaChart.getYAxisLabels(); + await visChart.waitForVisualizationRenderingStabilized(); + const filteredDataLabels = await vegaChart.getYAxisLabels(); expect(filteredDataLabels[0]).to.eql('0'); expect(filteredDataLabels[filteredDataLabels.length - 1]).to.eql('90'); }); @@ -225,14 +225,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { if (filtersCount > 0) { await filterBar.removeAllFilters(); } - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visChart.waitForVisualizationRenderingStabilized(); }); const fillSpecAndGo = async (newSpec: string) => { - await PageObjects.vegaChart.fillSpec(newSpec); - await PageObjects.visEditor.clickGo(); + await vegaChart.fillSpec(newSpec); + await visEditor.clickGo(); - const viewContainer = await PageObjects.vegaChart.getViewContainer(); + const viewContainer = await vegaChart.getViewContainer(); const textElement = await viewContainer.findByTagName('text'); await textElement.click(); @@ -241,7 +241,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should update global time range by calling "kibanaSetTimeFilter" expression', async () => { await fillSpecAndGo(getTestSpec('kibanaSetTimeFilter("2019", "2020")')); - const currentTimeRange = await PageObjects.timePicker.getTimeConfig(); + const currentTimeRange = await timePicker.getTimeConfig(); expect(currentTimeRange.start).to.be('Jan 1, 2019 @ 00:00:00.000'); expect(currentTimeRange.end).to.be('Jan 1, 2020 @ 00:00:00.000'); diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_area_chart.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_area_chart.ts index 7cb1f020209b02..cbbdd8f9ffdca8 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_area_chart.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_area_chart.ts @@ -19,7 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const security = getService('security'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, visualize, visEditor, visChart, header, timePicker } = getPageObjects([ 'common', 'visualize', 'visEditor', @@ -33,60 +33,56 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const initAreaChart = async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickAreaChart'); - await PageObjects.visualize.clickAreaChart(); + await visualize.clickAreaChart(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickNewSearch(); log.debug('Click X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Click Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); log.debug('Check field value'); - const fieldValues = await PageObjects.visEditor.getField(); + const fieldValues = await visEditor.getField(); log.debug('fieldValue = ' + fieldValues); expect(fieldValues[0]).to.be('@timestamp'); - const intervalValue = await PageObjects.visEditor.getInterval(); + const intervalValue = await visEditor.getInterval(); log.debug('intervalValue = ' + intervalValue); expect(intervalValue[0]).to.be('Auto'); - await PageObjects.visEditor.clickGo(true); + await visEditor.clickGo(true); }; describe('area charts', function indexPatternCreation() { before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); await security.testUser.setRoles([ 'kibana_admin', 'long_window_logstash', 'test_logstash_reader', ]); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await initAreaChart(); }); after(async function () { await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should save and load with special characters', async function () { const vizNamewithSpecialChars = vizName + '/?&=%'; - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb( - vizNamewithSpecialChars - ); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizNamewithSpecialChars); }); it('should save and load with non-ascii characters', async function () { const vizNamewithSpecialChars = `${vizName} with Umlaut ä`; - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb( - vizNamewithSpecialChars - ); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizNamewithSpecialChars); }); it('should save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); - await PageObjects.visualize.loadSavedVisualization(vizName); - await PageObjects.visChart.waitForVisualization(); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); + await visualize.loadSavedVisualization(vizName); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -107,14 +103,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; await retry.try(async function tryingForTime() { - const labels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + const labels = await visChart.getXAxisLabels(xyChartSelector); log.debug('X-Axis labels = ' + labels); expect(labels).to.eql(xAxisLabels); }); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug('Y-Axis labels = ' + labels); expect(labels).to.eql(yAxisLabels); - const paths = await PageObjects.visChart.getAreaChartData('Count', xyChartSelector); + const paths = await visChart.getAreaChartData('Count', xyChartSelector); log.debug('expectedAreaChartData = ' + expectedAreaChartData); log.debug('actual chart data = ' + paths); expect(paths).to.eql(expectedAreaChartData); @@ -179,9 +175,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ['2015-09-20 19:00', '55'], ]; - await PageObjects.visEditor.toggleOpenEditor(2); - await PageObjects.visEditor.setInterval('Second'); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(2); + await visEditor.setInterval('Second'); + await visEditor.clickGo(true); await inspector.open(); await inspector.expectTableData(expectedTableData); await inspector.close(); @@ -211,9 +207,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ['2015-09-20 19:00', '0.015'], ]; - await PageObjects.visEditor.toggleAdvancedParams('2'); - await PageObjects.visEditor.toggleScaleMetrics(); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleAdvancedParams('2'); + await visEditor.toggleScaleMetrics(); + await visEditor.clickGo(true); await inspector.open(); await inspector.expectTableData(expectedTableData); await inspector.close(); @@ -243,11 +239,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ['2015-09-20 19:00', '55', '2.053KB'], ]; - await PageObjects.visEditor.clickBucket('Y-axis', 'metrics'); - await PageObjects.visEditor.selectAggregation('Top Hit', 'metrics'); - await PageObjects.visEditor.selectField('bytes', 'metrics'); - await PageObjects.visEditor.selectAggregateWith('average'); - await PageObjects.visEditor.clickGo(true); + await visEditor.clickBucket('Y-axis', 'metrics'); + await visEditor.selectAggregation('Top Hit', 'metrics'); + await visEditor.selectField('bytes', 'metrics'); + await visEditor.selectAggregateWith('average'); + await visEditor.clickGo(true); await inspector.open(); await inspector.expectTableData(expectedTableData); await inspector.close(); @@ -258,9 +254,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should hide side editor if embed is set to true in url', async () => { const url = await browser.getCurrentUrl(); const embedUrl = url.split('/visualize#').pop() + '&embed=true'; - await PageObjects.common.navigateToUrl('visualize', embedUrl, { useActualUrl: true }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const sideEditorExists = await PageObjects.visualize.getSideEditorExists(); + await common.navigateToUrl('visualize', embedUrl, { useActualUrl: true }); + await header.waitUntilLoadingHasFinished(); + const sideEditorExists = await visualize.getSideEditorExists(); expect(sideEditorExists).to.be(false); }); @@ -268,7 +264,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const url = (await browser.getCurrentUrl()) ?? ''; const lastValue = url.split('/visualize#').pop() ?? ''; const embedUrl = lastValue.replace('embed=true', ''); - await PageObjects.common.navigateToUrl('visualize', embedUrl, { useActualUrl: true }); + await common.navigateToUrl('visualize', embedUrl, { useActualUrl: true }); }); }); @@ -277,12 +273,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const axisId = 'ValueAxis-1'; it('should show ticks on selecting log scale', async () => { - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisScaleType(axisId, 'log'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -292,9 +288,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filtered ticks on selecting log scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -304,36 +300,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show ticks on selecting square root scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'square root'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting square root scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show ticks on selecting linear scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'linear'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug(labels); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting linear scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); @@ -345,47 +341,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should render a yearly area with 12 svg paths', async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickAreaChart'); - await PageObjects.visualize.clickAreaChart(); + await visualize.clickAreaChart(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch('long-window-logstash-*'); - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await visualize.clickNewSearch('long-window-logstash-*'); + await timePicker.setAbsoluteRange(fromTime, toTime); log.debug('Click X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Click Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.setInterval('Year'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('@timestamp'); + await visEditor.setInterval('Year'); + await visEditor.clickGo(true); // This svg area is composed by 7 years (2013 - 2019). // 7 points are used to draw the upper line (usually called y1) // 7 points compose the lower line (usually called y0) - const paths = await PageObjects.visChart.getAreaChartPaths('Count', xyChartSelector); + const paths = await visChart.getAreaChartPaths('Count', xyChartSelector); log.debug('actual chart data = ' + paths); const numberOfSegments = 7 * 2; expect(paths.length).to.eql(numberOfSegments); }); it('should render monthly areas with 168 svg paths', async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickAreaChart'); - await PageObjects.visualize.clickAreaChart(); + await visualize.clickAreaChart(); log.debug('clickNewSearch'); - await PageObjects.visualize.clickNewSearch('long-window-logstash-*'); - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await visualize.clickNewSearch('long-window-logstash-*'); + await timePicker.setAbsoluteRange(fromTime, toTime); log.debug('Click X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Click Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.setInterval('Month'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.selectField('@timestamp'); + await visEditor.setInterval('Month'); + await visEditor.clickGo(true); // This svg area is composed by 67 months 3 (2013) + 5 * 12 + 4 (2019) // 67 points are used to draw the upper line (usually called y1) // 67 points compose the lower line (usually called y0) const numberOfSegments = 67 * 2; - const paths = await PageObjects.visChart.getAreaChartPaths('Count', xyChartSelector); + const paths = await visChart.getAreaChartPaths('Count', xyChartSelector); log.debug('actual chart data = ' + paths); expect(paths.length).to.eql(numberOfSegments); }); @@ -393,13 +389,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('date histogram when no date field', () => { before(async () => { - await PageObjects.visualize.loadSavedVisualization('AreaChart [no date field]'); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization('AreaChart [no date field]'); + await visChart.waitForVisualization(); log.debug('Click X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Click Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); }); it('should show error message for field', async () => { @@ -415,17 +411,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('date histogram when no time filter', () => { before(async () => { - await PageObjects.visualize.loadSavedVisualization('AreaChart [no time filter]'); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization('AreaChart [no time filter]'); + await visChart.waitForVisualization(); log.debug('Click X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Click Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); }); it('should not show error message on init when the field is not selected', async () => { - const fieldValues = await PageObjects.visEditor.getField(); + const fieldValues = await visEditor.getField(); expect(fieldValues[0]).to.be(undefined); const isFieldErrorMessageExists = await find.existsByCssSelector( '[data-test-subj="visDefaultEditorField"] + .euiFormErrorText' @@ -442,13 +438,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not fail during changing interval when the field is not selected', async () => { - await PageObjects.visEditor.setInterval('m'); - const intervalValues = await PageObjects.visEditor.getInterval(); + await visEditor.setInterval('m'); + const intervalValues = await visEditor.getInterval(); expect(intervalValues[0]).to.be('Millisecond'); }); it('should not fail during changing custom interval when the field is not selected', async () => { - await PageObjects.visEditor.setInterval('4d', { type: 'custom' }); + await visEditor.setInterval('4d', { type: 'custom' }); const isInvalidIntervalExists = await find.existsByCssSelector( '.euiComboBox-isInvalid[data-test-subj="visEditorInterval"]' ); @@ -456,7 +452,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show error when interval invalid', async () => { - await PageObjects.visEditor.setInterval('xx', { type: 'custom' }); + await visEditor.setInterval('xx', { type: 'custom' }); const isIntervalErrorMessageExists = await find.existsByCssSelector( '[data-test-subj="visEditorInterval"] + .euiFormErrorText' ); @@ -464,14 +460,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show error when calendar interval invalid', async () => { - await PageObjects.visEditor.setInterval('2w', { type: 'custom' }); + await visEditor.setInterval('2w', { type: 'custom' }); const intervalErrorMessage = await find.byCssSelector( '[data-test-subj="visEditorInterval"] + .euiFormErrorText' ); let errorMessage = await intervalErrorMessage.getVisibleText(); expect(errorMessage).to.be('Invalid calendar interval: 2w, value must be 1'); - await PageObjects.visEditor.setInterval('3w', { type: 'custom' }); + await visEditor.setInterval('3w', { type: 'custom' }); errorMessage = await intervalErrorMessage.getVisibleText(); expect(errorMessage).to.be('Invalid calendar interval: 3w, value must be 1'); }); @@ -480,14 +476,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('date histogram interval', () => { before(async () => { - await PageObjects.visualize.loadSavedVisualization('Visualization AreaChart'); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization('Visualization AreaChart'); + await visChart.waitForVisualization(); }); beforeEach(async () => { const fromTime = 'Sep 20, 2015 @ 00:00:00.000'; const toTime = 'Sep 20, 2015 @ 23:30:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); }); it('should update collapsed accordion label when time range is changed', async () => { @@ -498,26 +494,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(accordionLabelText).to.include.string('per 30 minutes'); const fromTime = 'Sep 20, 2015 @ 08:30:00.000'; const toTime = 'Sep 20, 2015 @ 23:30:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); accordionLabelText = await accordionLabel.getVisibleText(); expect(accordionLabelText).to.include.string('per 10 minutes'); }); describe('expanded accordion', () => { - before(async () => await PageObjects.visEditor.toggleAccordion('visEditorAggAccordion2')); + before(async () => await visEditor.toggleAccordion('visEditorAggAccordion2')); it('should update label inside the opened accordion when scaled to milliseconds', async () => { const isHelperScaledLabelExists = await find.existsByCssSelector( '[data-test-subj="currentlyScaledText"]' ); expect(isHelperScaledLabelExists).to.be(false); - await PageObjects.visEditor.setInterval('Millisecond'); + await visEditor.setInterval('Millisecond'); const helperScaledLabelText = await testSubjects.getVisibleText('currentlyScaledText'); expect(helperScaledLabelText).to.include.string('to 10 minutes'); }); it('should display updated scaled label text after time range is changed', async () => { - await PageObjects.visEditor.setInterval('Millisecond'); + await visEditor.setInterval('Millisecond'); // Apply interval await testSubjects.clickWhenNotDisabledWithoutRetry('visualizeEditorRenderButton'); @@ -530,13 +526,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(helperScaledLabelText).to.include.string('to 10 minutes'); const fromTime = 'Sep 20, 2015 @ 22:30:00.000'; const toTime = 'Sep 20, 2015 @ 23:30:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); helperScaledLabelText = await testSubjects.getVisibleText('currentlyScaledText'); expect(helperScaledLabelText).to.include.string('to 30 seconds'); }); it('should update scaled label text after custom interval is set and time range is changed', async () => { - await PageObjects.visEditor.setInterval('10s', { type: 'custom' }); + await visEditor.setInterval('10s', { type: 'custom' }); await testSubjects.clickWhenNotDisabledWithoutRetry('visualizeEditorRenderButton'); const isHelperScaledLabelExists = await find.existsByCssSelector( '[data-test-subj="currentlyScaledText"]' @@ -546,7 +542,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(helperScaledLabelText).to.include.string('to 10 minutes'); const fromTime = 'Sep 20, 2015 @ 21:30:00.000'; const toTime = 'Sep 20, 2015 @ 23:30:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); helperScaledLabelText = await testSubjects.getVisibleText('currentlyScaledText'); expect(helperScaledLabelText).to.include.string('to minute'); }); diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_chart.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_chart.ts index cc316f72c47c9b..a4a74e499c31d8 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_chart.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_chart.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const inspector = getService('inspector'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, visualize, visEditor, visChart, timePicker } = getPageObjects([ 'common', 'visualize', 'visEditor', @@ -29,29 +29,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('line charts - split chart', function () { const initLineChart = async function () { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickLineChart'); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); log.debug('Bucket = Split chart'); - await PageObjects.visEditor.clickBucket('Split chart'); + await visEditor.clickBucket('Split chart'); log.debug('Aggregation = Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Field = extension'); - await PageObjects.visEditor.selectField('extension.raw'); + await visEditor.selectField('extension.raw'); log.debug('switch from Rows to Columns'); - await PageObjects.visEditor.clickSplitDirection('Columns'); - await PageObjects.visEditor.clickGo(true); + await visEditor.clickSplitDirection('Columns'); + await visEditor.clickGo(true); }; before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await initLineChart(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); afterEach(async () => { @@ -64,8 +64,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedChartData = ['jpg 9,109', 'css 2,159', 'png 1,373', 'gif 918', 'php 445']; // sleep a bit before trying to get the chart data - await PageObjects.common.sleep(3000); - const data = await PageObjects.visChart.getLineChartData(xyChartSelector); + await common.sleep(3000); + const data = await visChart.getLineChartData(xyChartSelector); log.debug('data=' + data); const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1% for (let x = 0; x < data.length; x++) { @@ -95,10 +95,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedChartData = ['png 1,373', 'php 445', 'jpg 9,109', 'gif 918', 'css 2,159']; log.debug('Order By = Term'); - await PageObjects.visEditor.selectOrderByMetric(2, '_key'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectOrderByMetric(2, '_key'); + await visEditor.clickGo(true); await retry.try(async function () { - const data = await PageObjects.visChart.getLineChartData(xyChartSelector); + const data = await visChart.getLineChartData(xyChartSelector); log.debug('data=' + data); const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1% for (let x = 0; x < data.length; x++) { @@ -134,7 +134,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should request new data when autofresh is enabled', async () => { const intervalS = 3; - await PageObjects.timePicker.startAutoRefresh(intervalS); + await timePicker.startAutoRefresh(intervalS); // check inspector panel request stats for timestamp await inspector.open(); @@ -145,7 +145,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { )[0][1]; // pause to allow time for autorefresh to fire another request - await PageObjects.common.sleep(intervalS * 1000 * 1.5); + await common.sleep(intervalS * 1000 * 1.5); // get the latest timestamp from request stats const requestStatsAfter = await inspector.getTableData(); @@ -158,7 +158,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // cleanup await inspector.close(); - await PageObjects.timePicker.pauseAutoRefresh(); + await timePicker.pauseAutoRefresh(); // if autorefresh is working, timestamps should be different expect(requestTimestampBefore).not.to.equal(requestTimestampAfter); @@ -166,10 +166,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to save and load', async function () { const vizName = 'Visualization Line split chart - chart library'; - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); - await PageObjects.visualize.loadSavedVisualization(vizName); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName); + await visChart.waitForVisualization(); }); describe('switch between Y axis scale types', () => { @@ -177,12 +177,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const axisId = 'ValueAxis-1'; it('should show ticks on selecting log scale', async () => { - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisScaleType(axisId, 'log'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 7000; const numberOfLabels = 10; @@ -192,9 +192,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filtered ticks on selecting log scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 7000; const numberOfLabels = 10; @@ -204,37 +204,37 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show ticks on selecting square root scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'square root'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting square root scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show ticks on selecting linear scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'linear'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug(labels); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting linear scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); @@ -243,35 +243,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('pipeline aggregations', () => { before(async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickLineChart'); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); }); describe('parent pipeline', () => { it('should have an error if bucket is not selected', async () => { - await PageObjects.visEditor.clickMetricEditor(); + await visEditor.clickMetricEditor(); log.debug('Metrics agg = Serial diff'); - await PageObjects.visEditor.selectAggregation('Serial diff', 'metrics'); + await visEditor.selectAggregation('Serial diff', 'metrics'); await testSubjects.existOrFail('bucketsError'); }); it('should apply with selected bucket', async () => { log.debug('Bucket = X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Serial Diff of Count'); }); it('should change y-axis label to custom', async () => { log.debug('set custom label of y-axis to "Custom"'); - await PageObjects.visEditor.setCustomLabel('Custom', 1); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Custom', 1); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Custom'); }); @@ -284,25 +284,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('sibling pipeline', () => { it('should apply with selected bucket', async () => { log.debug('Metrics agg = Average Bucket'); - await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.selectAggregation('Average Bucket', 'metrics'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Overall Average of Count'); }); it('should change sub metric custom label and calculate y-axis title', async () => { log.debug('set custom label of sub metric to "Cats"'); - await PageObjects.visEditor.setCustomLabel('Cats', '1-metric'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Cats', '1-metric'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Overall Average of Cats'); }); it('should outer custom label', async () => { log.debug('set custom label to "Custom"'); - await PageObjects.visEditor.setCustomLabel('Custom', 1); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Custom', 1); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Custom'); }); diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_series.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_series.ts index ecb28acd419f8e..3b0ea28b71e418 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_series.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_line_chart_split_series.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const inspector = getService('inspector'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, visualize, visEditor, visChart, timePicker } = getPageObjects([ 'common', 'visualize', 'visEditor', @@ -29,27 +29,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('line charts - split series', function () { const initLineChart = async function () { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickLineChart'); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); log.debug('Bucket = Split chart'); - await PageObjects.visEditor.clickBucket('Split series'); + await visEditor.clickBucket('Split series'); log.debug('Aggregation = Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Field = extension'); - await PageObjects.visEditor.selectField('extension.raw'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectField('extension.raw'); + await visEditor.clickGo(true); }; before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await initLineChart(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); afterEach(async () => { @@ -62,8 +62,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedChartData = ['jpg 9,109', 'css 2,159', 'png 1,373', 'gif 918', 'php 445']; // sleep a bit before trying to get the chart data - await PageObjects.common.sleep(3000); - const data = await PageObjects.visChart.getLineChartData(xyChartSelector); + await common.sleep(3000); + const data = await visChart.getLineChartData(xyChartSelector); log.debug('data=' + data); const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1% for (let x = 0; x < data.length; x++) { @@ -93,10 +93,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedChartData = ['png 1,373', 'php 445', 'jpg 9,109', 'gif 918', 'css 2,159']; log.debug('Order By = Term'); - await PageObjects.visEditor.selectOrderByMetric(2, '_key'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectOrderByMetric(2, '_key'); + await visEditor.clickGo(true); await retry.try(async function () { - const data = await PageObjects.visChart.getLineChartData(xyChartSelector); + const data = await visChart.getLineChartData(xyChartSelector); log.debug('data=' + data); const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1% for (let x = 0; x < data.length; x++) { @@ -132,7 +132,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should request new data when autofresh is enabled', async () => { const intervalS = 3; - await PageObjects.timePicker.startAutoRefresh(intervalS); + await timePicker.startAutoRefresh(intervalS); // check inspector panel request stats for timestamp await inspector.open(); @@ -143,7 +143,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { )[0][1]; // pause to allow time for autorefresh to fire another request - await PageObjects.common.sleep(intervalS * 1000 * 1.5); + await common.sleep(intervalS * 1000 * 1.5); // get the latest timestamp from request stats const requestStatsAfter = await inspector.getTableData(); @@ -156,7 +156,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // cleanup await inspector.close(); - await PageObjects.timePicker.pauseAutoRefresh(); + await timePicker.pauseAutoRefresh(); // if autorefresh is working, timestamps should be different expect(requestTimestampBefore).not.to.equal(requestTimestampAfter); @@ -165,10 +165,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to save and load', async function () { const vizName = 'Visualization Line split series'; - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName); - await PageObjects.visualize.loadSavedVisualization(vizName); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName); + await visChart.waitForVisualization(); }); describe('switch between Y axis scale types', () => { @@ -176,12 +176,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const axisId = 'ValueAxis-1'; it('should show ticks on selecting log scale', async () => { - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisScaleType(axisId, 'log'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -191,9 +191,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filtered ticks on selecting log scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -203,36 +203,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show ticks on selecting square root scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'square root'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting square root scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show ticks on selecting linear scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'linear'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug(labels); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting linear scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000']; expect(labels).to.eql(expectedLabels); }); @@ -241,35 +241,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('pipeline aggregations', () => { before(async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickLineChart'); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); }); describe('parent pipeline', () => { it('should have an error if bucket is not selected', async () => { - await PageObjects.visEditor.clickMetricEditor(); + await visEditor.clickMetricEditor(); log.debug('Metrics agg = Serial diff'); - await PageObjects.visEditor.selectAggregation('Serial diff', 'metrics'); + await visEditor.selectAggregation('Serial diff', 'metrics'); await testSubjects.existOrFail('bucketsError'); }); it('should apply with selected bucket', async () => { log.debug('Bucket = X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Serial Diff of Count'); }); it('should change y-axis label to custom', async () => { log.debug('set custom label of y-axis to "Custom"'); - await PageObjects.visEditor.setCustomLabel('Custom', 1); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Custom', 1); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Custom'); }); @@ -282,25 +282,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('sibling pipeline', () => { it('should apply with selected bucket', async () => { log.debug('Metrics agg = Average Bucket'); - await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.selectAggregation('Average Bucket', 'metrics'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Overall Average of Count'); }); it('should change sub metric custom label and calculate y-axis title', async () => { log.debug('set custom label of sub metric to "Cats"'); - await PageObjects.visEditor.setCustomLabel('Cats', '1-metric'); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Cats', '1-metric'); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Overall Average of Cats'); }); it('should outer custom label', async () => { log.debug('set custom label to "Custom"'); - await PageObjects.visEditor.setCustomLabel('Custom', 1); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setCustomLabel('Custom', 1); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be('Custom'); }); diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_point_series_options.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_point_series_options.ts index 23b249c8abc132..8f55f2f9285fbb 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_point_series_options.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_point_series_options.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const browser = getService('browser'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { visualize, header, timePicker, visEditor, visChart, common } = getPageObjects([ 'visualize', 'header', 'timePicker', @@ -30,46 +30,46 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { async function initChart() { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickLineChart'); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); log.debug('Bucket = X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp'); + await visEditor.selectField('@timestamp'); // add another metrics log.debug('Metric = Value Axis'); - await PageObjects.visEditor.clickBucket('Y-axis', 'metrics'); + await visEditor.clickBucket('Y-axis', 'metrics'); log.debug('Aggregation = Average'); - await PageObjects.visEditor.selectAggregation('Average', 'metrics'); + await visEditor.selectAggregation('Average', 'metrics'); log.debug('Field = memory'); - await PageObjects.visEditor.selectField('machine.ram', 'metrics'); + await visEditor.selectField('machine.ram', 'metrics'); // go to options page log.debug('Going to axis options'); - await PageObjects.visEditor.clickMetricsAndAxes(); + await visEditor.clickMetricsAndAxes(); // add another value axis log.debug('adding axis'); - await PageObjects.visEditor.clickAddAxis(); + await visEditor.clickAddAxis(); // set average count to use second value axis - await PageObjects.visEditor.toggleAccordion('visEditorSeriesAccordion3'); + await visEditor.toggleAccordion('visEditorSeriesAccordion3'); log.debug('Average memory value axis - ValueAxis-2'); - await PageObjects.visEditor.setSeriesAxis(1, 'ValueAxis-2'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(true); + await visEditor.setSeriesAxis(1, 'ValueAxis-2'); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(true); } describe('point series', function describeIndexTests() { before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await initChart(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); describe('secondary value axis', function () { @@ -88,14 +88,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; await retry.try(async () => { - const data = await PageObjects.visChart.getLineChartData(xyChartSelector, 'Count'); + const data = await visChart.getLineChartData(xyChartSelector, 'Count'); log.debug('count data=' + data); log.debug('data.length=' + data.length); expect(data).to.eql(expectedChartValues[0]); }); await retry.try(async () => { - const avgMemoryData = await PageObjects.visChart.getLineChartData( + const avgMemoryData = await visChart.getLineChartData( xyChartSelector, 'Average machine.ram' ); @@ -113,29 +113,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should put secondary axis on the right', async function () { - const length = await PageObjects.visChart.getAxesCountByPosition('right', xyChartSelector); + const length = await visChart.getAxesCountByPosition('right', xyChartSelector); expect(length).to.be(1); }); }); describe('multiple chart types', function () { it('should change average series type to histogram', async function () { - await PageObjects.visEditor.setSeriesType(1, 'histogram'); - await PageObjects.visEditor.clickGo(true); - const length = await PageObjects.visChart.getHistogramSeriesCount(xyChartSelector); + await visEditor.setSeriesType(1, 'histogram'); + await visEditor.clickGo(true); + const length = await visChart.getHistogramSeriesCount(xyChartSelector); expect(length).to.be(1); }); }); describe('grid lines', function () { before(async function () { - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickOptionsTab(); }); it('should show category grid lines', async function () { - await PageObjects.visEditor.toggleGridCategoryLines(); - await PageObjects.visEditor.clickGo(true); - const gridLines = await PageObjects.visChart.getGridLines(xyChartSelector); + await visEditor.toggleGridCategoryLines(); + await visEditor.clickGo(true); + const gridLines = await visChart.getGridLines(xyChartSelector); // FLAKY relaxing as depends on chart size/browser size and produce differences between local and CI // The objective here is to check whenever the grid lines are rendered, not the exact quantity expect(gridLines.length).to.be.greaterThan(0); @@ -145,10 +145,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show value axis grid lines', async function () { - await PageObjects.visEditor.setGridValueAxis('ValueAxis-2'); - await PageObjects.visEditor.toggleGridCategoryLines(); - await PageObjects.visEditor.clickGo(true); - const gridLines = await PageObjects.visChart.getGridLines(xyChartSelector); + await visEditor.setGridValueAxis('ValueAxis-2'); + await visEditor.toggleGridCategoryLines(); + await visEditor.clickGo(true); + const gridLines = await visChart.getGridLines(xyChartSelector); // FLAKY relaxing as depends on chart size/browser size and produce differences between local and CI // The objective here is to check whenever the grid lines are rendered, not the exact quantity expect(gridLines.length).to.be.greaterThan(0); @@ -160,31 +160,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('show values on chart', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(); log.debug('Bucket = X-axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Terms'); - await PageObjects.visEditor.selectAggregation('Terms'); + await visEditor.selectAggregation('Terms'); log.debug('Field = geo.src'); - await PageObjects.visEditor.selectField('geo.src'); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectField('geo.src'); + await visEditor.clickGo(true); log.debug('Open Options tab'); - await PageObjects.visEditor.clickOptionsTab(); + await visEditor.clickOptionsTab(); }); it('should show values on bar chart', async () => { - await PageObjects.visEditor.toggleValuesOnChart(); - await PageObjects.visEditor.clickGo(true); - const values = await PageObjects.visChart.getChartValues(xyChartSelector); + await visEditor.toggleValuesOnChart(); + await visEditor.clickGo(true); + const values = await visChart.getChartValues(xyChartSelector); expect(values).to.eql(['2,592', '2,373', '1,194', '489', '415']); }); it('should hide values on bar chart', async () => { - await PageObjects.visEditor.toggleValuesOnChart(); - await PageObjects.visEditor.clickGo(true); - const values = await PageObjects.visChart.getChartValues(xyChartSelector); + await visEditor.toggleValuesOnChart(); + await visEditor.clickGo(true); + const values = await visChart.getChartValues(xyChartSelector); expect(values.length).to.be(0); }); }); @@ -194,39 +194,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const customLabel = 'myLabel'; const axisTitle = 'myTitle'; before(async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickLineChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.selectYAxisAggregation('Average', 'bytes', customLabel, 1); - await PageObjects.visEditor.clickGo(true); - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions('ValueAxis-1'); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickLineChart(); + await visualize.clickNewSearch(); + await visEditor.selectYAxisAggregation('Average', 'bytes', customLabel, 1); + await visEditor.clickGo(true); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions('ValueAxis-1'); }); it('should render a custom label when one is set', async function () { - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be(customLabel); }); it('should render a custom axis title when one is set, overriding the custom label', async function () { - await PageObjects.visEditor.setAxisTitle(axisTitle); - await PageObjects.visEditor.clickGo(true); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visEditor.setAxisTitle(axisTitle); + await visEditor.clickGo(true); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be(axisTitle); }); it('should preserve saved axis titles after a vis is saved and reopened', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccess(visName); - await PageObjects.visChart.waitForVisualization(); - await PageObjects.visualize.loadSavedVisualization(visName); - await PageObjects.visChart.waitForRenderingCount(); - await PageObjects.visEditor.clickDataTab(); - await PageObjects.visEditor.toggleOpenEditor(1); - await PageObjects.visEditor.setCustomLabel('test', 1); - await PageObjects.visEditor.clickGo(true); - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions('ValueAxis-1'); - const title = await PageObjects.visChart.getYAxisTitle(xyChartSelector); + await visualize.saveVisualizationExpectSuccess(visName); + await visChart.waitForVisualization(); + await visualize.loadSavedVisualization(visName); + await visChart.waitForRenderingCount(); + await visEditor.clickDataTab(); + await visEditor.toggleOpenEditor(1); + await visEditor.setCustomLabel('test', 1); + await visEditor.clickGo(true); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions('ValueAxis-1'); + const title = await visChart.getYAxisTitle(xyChartSelector); expect(title).to.be(axisTitle); }); }); @@ -240,7 +240,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '2015-09-23 00:00', ]; await initChart(); - const labels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + const labels = await visChart.getXAxisLabels(xyChartSelector); expect(labels.join()).to.contain(expectedLabels.join()); }); @@ -254,10 +254,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'dateFormat:tz': 'America/Phoenix' }); await browser.refresh(); - await PageObjects.header.awaitKibanaChrome(); + await header.awaitKibanaChrome(); await initChart(); - const labels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + const labels = await visChart.getXAxisLabels(xyChartSelector); expect(labels.join()).to.contain(expectedLabels.join()); }); @@ -266,14 +266,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const fromTime = 'Sep 22, 2015 @ 09:05:47.415'; const toTime = 'Sep 22, 2015 @ 16:08:34.554'; // note that we're setting the absolute time range while we're in 'America/Phoenix' tz - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.visChart.waitForRenderingCount(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await visChart.waitForRenderingCount(); await retry.waitForWithTimeout( 'wait for x-axis labels to match expected for Phoenix', 5000, async () => { - const labels = (await PageObjects.visChart.getXAxisLabels(xyChartSelector)) ?? ''; + const labels = (await visChart.getXAxisLabels(xyChartSelector)) ?? ''; log.debug(`Labels: ${labels}`); const xLabels = [ @@ -330,16 +330,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // the absolute time range so the timepicker is going to shift +7 hours. await browser.refresh(); // wait some time before trying to check for rendering count - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.visualize.clickRefresh(true); - await PageObjects.visChart.waitForRenderingCount(); + await header.awaitKibanaChrome(); + await visualize.clickRefresh(true); + await visChart.waitForRenderingCount(); log.debug('getXAxisLabels'); await retry.waitForWithTimeout( 'wait for x-axis labels to match expected for UTC', 5000, async () => { - const labels2 = (await PageObjects.visChart.getXAxisLabels(xyChartSelector)) ?? ''; + const labels2 = (await visChart.getXAxisLabels(xyChartSelector)) ?? ''; log.debug(`Labels: ${labels2}`); const xLabels2 = [ diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart.ts index 7fd2d67106ab31..3d0f25b7870a6a 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const inspector = getService('inspector'); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); - const PageObjects = getPageObjects([ + const { visualize, visEditor, visChart, timePicker, common } = getPageObjects([ 'visualize', 'visEditor', 'visChart', @@ -29,94 +29,94 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('vertical bar chart', function () { before(async () => { - await PageObjects.visualize.initTests(); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.initTests(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); const vizName1 = 'Visualization VerticalBarChart'; const initBarChart = async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickVerticalBarChart'); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch(); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(); log.debug('Bucket = X-Axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp'); + await visEditor.selectField('@timestamp'); // leaving Interval set to Auto - await PageObjects.visEditor.clickGo(true); + await visEditor.clickGo(true); }; describe('bar charts x axis tick labels', () => { it('should show tick labels also after rotation of the chart', async function () { await initBarChart(); - const bottomLabels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + const bottomLabels = await visChart.getXAxisLabels(xyChartSelector); log.debug(`${bottomLabels.length} tick labels on bottom x axis`); - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.selectXAxisPosition('left'); - await PageObjects.visEditor.clickGo(true); + await visEditor.clickMetricsAndAxes(); + await visEditor.selectXAxisPosition('left'); + await visEditor.clickGo(true); // the getYAxisLabels helper always returns the labels on the left axis - const leftLabels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + const leftLabels = await visChart.getYAxisLabels(xyChartSelector); log.debug(`${leftLabels.length} tick labels on left x axis`); expect(leftLabels.length).to.be.greaterThan(bottomLabels.length * (2 / 3)); }); it('should not filter out first label after rotation of the chart', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('X-axis'); - await PageObjects.visEditor.selectAggregation('Date Range'); - await PageObjects.visEditor.selectField('@timestamp'); - - await PageObjects.visEditor.clickGo(true); - const bottomLabels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('X-axis'); + await visEditor.selectAggregation('Date Range'); + await visEditor.selectField('@timestamp'); + + await visEditor.clickGo(true); + const bottomLabels = await visChart.getXAxisLabels(xyChartSelector); expect(bottomLabels.length).to.be(1); - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.selectXAxisPosition('left'); - await PageObjects.visEditor.clickGo(true); + await visEditor.clickMetricsAndAxes(); + await visEditor.selectXAxisPosition('left'); + await visEditor.clickGo(true); // the getYAxisLabels helper always returns the labels on the left axis - const leftLabels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + const leftLabels = await visChart.getYAxisLabels(xyChartSelector); expect(leftLabels.length).to.be(1); }); }); describe('bar charts range on x axis', () => { it('should individual bars for each configured range', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.visEditor.clickBucket('X-axis'); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Range'); - await PageObjects.visEditor.selectAggregation('Date Range'); + await visEditor.selectAggregation('Date Range'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.clickAddDateRange(); - await PageObjects.visEditor.setDateRangeByIndex('1', 'now-2w/w', 'now-1w/w'); - await PageObjects.visEditor.clickGo(true); - const bottomLabels = await PageObjects.visChart.getXAxisLabels(xyChartSelector); + await visEditor.selectField('@timestamp'); + await visEditor.clickAddDateRange(); + await visEditor.setDateRangeByIndex('1', 'now-2w/w', 'now-1w/w'); + await visEditor.clickGo(true); + const bottomLabels = await visChart.getXAxisLabels(xyChartSelector); expect(bottomLabels.length).to.be(2); }); }); it('should save and load', async function () { await initBarChart(); - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -133,7 +133,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function // try sleeping a bit before getting that data await retry.try(async () => { - const data = await PageObjects.visChart.getBarChartData(xyChartSelector); + const data = await visChart.getBarChartData(xyChartSelector); log.debug('data=' + data); log.debug('data.length=' + data.length); expect(data).to.eql(expectedChartValues); @@ -174,7 +174,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const fromTime = 'Sep 20, 2015 @ 06:31:44.000'; const toTime = 'Sep 22, 2015 @ 18:31:44.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); let expectedChartValues = [ 82, 218, 341, 440, 480, 517, 522, 446, 403, 321, 258, 172, 95, 55, 38, 24, 3, 4, 11, 14, 17, @@ -186,15 +186,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function // try sleeping a bit before getting that data await retry.try(async () => { - const data = await PageObjects.visChart.getBarChartData(xyChartSelector); + const data = await visChart.getBarChartData(xyChartSelector); log.debug('data=' + data); log.debug('data.length=' + data.length); expect(data).to.eql(expectedChartValues); }); - await PageObjects.visEditor.toggleOpenEditor(2); - await PageObjects.visEditor.clickDropPartialBuckets(); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(2); + await visEditor.clickDropPartialBuckets(); + await visEditor.clickGo(true); expectedChartValues = [ 218, 341, 440, 480, 517, 522, 446, 403, 321, 258, 172, 95, 55, 38, 24, 3, 4, 11, 14, 17, 38, @@ -206,7 +206,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function // try sleeping a bit before getting that data await retry.try(async () => { - const data = await PageObjects.visChart.getBarChartData(xyChartSelector); + const data = await visChart.getBarChartData(xyChartSelector); log.debug('data=' + data); log.debug('data.length=' + data.length); expect(data).to.eql(expectedChartValues); @@ -218,12 +218,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const axisId = 'ValueAxis-1'; it('should show ticks on selecting log scale', async () => { - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisScaleType(axisId, 'log'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; @@ -234,9 +234,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filtered ticks on selecting log scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; @@ -247,36 +247,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show ticks on selecting square root scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'square root'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting square root scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show ticks on selecting linear scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'linear'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug(labels); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting linear scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); @@ -285,13 +285,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('vertical bar in percent mode', () => { it('should show ticks with percentage values', async function () { const axisId = 'ValueAxis-1'; - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisMode('percentage'); - await PageObjects.visEditor.changeYAxisShowCheckbox(axisId, true); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisMode('percentage'); + await visEditor.changeYAxisShowCheckbox(axisId, true); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); expect(labels[0]).to.eql('0%'); expect(labels[labels.length - 1]).to.eql('100%'); }); @@ -301,36 +301,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('response.raw'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('response.raw'); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(true); const expectedEntries = ['200', '404', '503']; // sorting order aligned with the reading direction - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); it('should allow custom sorting of series', async () => { - await PageObjects.visEditor.toggleOpenEditor(1, 'false'); - await PageObjects.visEditor.selectCustomSortMetric(3, 'Min', 'bytes'); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(1, 'false'); + await visEditor.selectCustomSortMetric(3, 'Min', 'bytes'); + await visEditor.clickGo(true); const expectedEntries = ['404', '200', '503']; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); it('should correctly filter by legend', async () => { - await PageObjects.visChart.filterLegend('200', true); - await PageObjects.visChart.waitForVisualization(); - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + await visChart.filterLegend('200', true); + await visChart.waitForVisualization(); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); const expectedEntries = ['200']; expect(legendEntries).to.eql(expectedEntries); await filterBar.removeFilter('response.raw'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); }); }); @@ -338,18 +338,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('response.raw'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - - await PageObjects.visEditor.toggleOpenEditor(3, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('response.raw'); + await visChart.waitForVisualizationRenderingStabilized(); + + await visEditor.toggleOpenEditor(3, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os'); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(true); const expectedEntries = [ '200 - win 8', @@ -368,18 +368,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '404 - win 8', '404 - win xp', ]; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); it('should show correct series when disabling first agg', async function () { // this will avoid issues with the play tooltip covering the disable agg button await testSubjects.scrollIntoView('metricsAggGroup'); - await PageObjects.visEditor.toggleDisabledAgg(3); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleDisabledAgg(3); + await visEditor.clickGo(true); const expectedEntries = ['win 8', 'win xp', 'ios', 'osx', 'win 7']; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); }); @@ -388,24 +388,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.toggleOpenEditor(1); - await PageObjects.visEditor.selectAggregation('Derivative', 'metrics'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(true); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.toggleOpenEditor(1); + await visEditor.selectAggregation('Derivative', 'metrics'); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(true); const expectedEntries = ['Derivative of Count']; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); it('should show an error if last bucket aggregation is terms', async () => { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('response.raw'); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('response.raw'); - const errorMessage = await PageObjects.visEditor.getBucketErrorMessage(); + const errorMessage = await visEditor.getBucketErrorMessage(); expect(errorMessage).to.contain('Last bucket aggregation must be "Date Histogram"'); }); }); diff --git a/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart_nontimeindex.ts b/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart_nontimeindex.ts index 30aa9e189e6a9c..15ff0fc18d8e41 100644 --- a/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart_nontimeindex.ts +++ b/test/functional/apps/visualize/replaced_vislib_chart_types/_vertical_bar_chart_nontimeindex.ts @@ -15,7 +15,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const retry = getService('retry'); const inspector = getService('inspector'); - const PageObjects = getPageObjects(['common', 'visualize', 'header', 'visEditor', 'visChart']); + const { common, visualize, header, visEditor, visChart } = getPageObjects([ + 'common', + 'visualize', + 'header', + 'visEditor', + 'visChart', + ]); const xyChartSelector = 'xyVisChart'; @@ -24,34 +30,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const initBarChart = async () => { log.debug('navigateToApp visualize'); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); log.debug('clickVerticalBarChart'); - await PageObjects.visualize.clickVerticalBarChart(); - await PageObjects.visualize.clickNewSearch( - PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED - ); - await PageObjects.common.sleep(500); + await visualize.clickVerticalBarChart(); + await visualize.clickNewSearch(visualize.index.LOGSTASH_NON_TIME_BASED); + await common.sleep(500); log.debug('Bucket = X-Axis'); - await PageObjects.visEditor.clickBucket('X-axis'); + await visEditor.clickBucket('X-axis'); log.debug('Aggregation = Date Histogram'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); + await visEditor.selectAggregation('Date Histogram'); log.debug('Field = @timestamp'); - await PageObjects.visEditor.selectField('@timestamp'); - await PageObjects.visEditor.setInterval('3h', { type: 'custom' }); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await PageObjects.visEditor.clickGo(true); + await visEditor.selectField('@timestamp'); + await visEditor.setInterval('3h', { type: 'custom' }); + await visChart.waitForVisualizationRenderingStabilized(); + await visEditor.clickGo(true); }; before(async () => { - await PageObjects.visualize.initTests(); + await visualize.initTests(); await initBarChart(); }); it('should save and load', async function () { - await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); + await visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.loadSavedVisualization(vizName1); - await PageObjects.visChart.waitForVisualization(); + await visualize.loadSavedVisualization(vizName1); + await visChart.waitForVisualization(); }); it('should have inspector enabled', async function () { @@ -68,7 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function // try sleeping a bit before getting that data await retry.try(async () => { - const data = await PageObjects.visChart.getBarChartData(xyChartSelector); + const data = await visChart.getBarChartData(xyChartSelector); log.debug('data=' + data); log.debug('data.length=' + data.length); expect(data).to.eql(expectedChartValues); @@ -109,12 +113,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const axisId = 'ValueAxis-1'; it('should show ticks on selecting log scale', async () => { - await PageObjects.visEditor.clickMetricsAndAxes(); - await PageObjects.visEditor.clickYAxisOptions(axisId); - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.clickMetricsAndAxes(); + await visEditor.clickYAxisOptions(axisId); + await visEditor.selectYAxisScaleType(axisId, 'log'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -124,9 +128,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filtered ticks on selecting log scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabelsAsNumbers(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabelsAsNumbers(xyChartSelector); const minLabel = 1; const maxLabel = 900; const numberOfLabels = 10; @@ -136,36 +140,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show ticks on selecting square root scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'square root'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting square root scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show ticks on selecting linear scale', async () => { - await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear'); - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.selectYAxisScaleType(axisId, 'linear'); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, false); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); log.debug(labels); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); it('should show filtered ticks on selecting linear scale', async () => { - await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); - await PageObjects.visEditor.clickGo(true); - const labels = await PageObjects.visChart.getYAxisLabels(xyChartSelector); + await visEditor.changeYAxisFilterLabelsCheckbox(axisId, true); + await visEditor.clickGo(true); + const labels = await visChart.getYAxisLabels(xyChartSelector); const expectedLabels = ['0', '200', '400', '600', '800', '1,000', '1,200', '1,400']; expect(labels).to.eql(expectedLabels); }); @@ -175,19 +179,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('response.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('response.raw'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.common.sleep(1003); - await PageObjects.visEditor.clickGo(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.sleep(1003); + await visEditor.clickGo(true); + await header.waitUntilLoadingHasFinished(); const expectedEntries = ['200', '404', '503']; // sorting order aligned with reading direction top-bottom - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); }); @@ -196,21 +200,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('response.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); - - await PageObjects.visEditor.toggleOpenEditor(3, 'false'); - await PageObjects.visEditor.clickBucket('Split series'); - await PageObjects.visEditor.selectAggregation('Terms'); - await PageObjects.visEditor.selectField('machine.os'); - await PageObjects.header.waitUntilLoadingHasFinished(); - - await PageObjects.common.sleep(1003); - await PageObjects.visEditor.clickGo(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('response.raw'); + await header.waitUntilLoadingHasFinished(); + + await visEditor.toggleOpenEditor(3, 'false'); + await visEditor.clickBucket('Split series'); + await visEditor.selectAggregation('Terms'); + await visEditor.selectField('machine.os'); + await header.waitUntilLoadingHasFinished(); + + await common.sleep(1003); + await visEditor.clickGo(true); + await header.waitUntilLoadingHasFinished(); const expectedEntries = [ '200 - win 8', @@ -229,17 +233,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '404 - win 8', '404 - win xp', ]; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); it('should show correct series when disabling first agg', async function () { - await PageObjects.visEditor.toggleDisabledAgg(3); - await PageObjects.visEditor.clickGo(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visEditor.toggleDisabledAgg(3); + await visEditor.clickGo(true); + await header.waitUntilLoadingHasFinished(); const expectedEntries = ['win 8', 'win xp', 'ios', 'osx', 'win 7']; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); }); @@ -248,17 +252,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(initBarChart); it('should show correct series', async function () { - await PageObjects.visEditor.toggleOpenEditor(2, 'false'); - await PageObjects.visEditor.toggleOpenEditor(1); - await PageObjects.visEditor.selectAggregation('Derivative', 'metrics'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await visEditor.toggleOpenEditor(2, 'false'); + await visEditor.toggleOpenEditor(1); + await visEditor.selectAggregation('Derivative', 'metrics'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.common.sleep(1003); - await PageObjects.visEditor.clickGo(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.sleep(1003); + await visEditor.clickGo(true); + await header.waitUntilLoadingHasFinished(); const expectedEntries = ['Derivative of Count']; - const legendEntries = await PageObjects.visChart.getLegendEntriesXYCharts(xyChartSelector); + const legendEntries = await visChart.getLegendEntriesXYCharts(xyChartSelector); expect(legendEntries).to.eql(expectedEntries); }); }); diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index c7b93d3ca0e912..c610b417c4323d 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -718,7 +718,7 @@ export class DashboardPageObject extends FtrService { } public async getDashboardPanels() { - return await this.testSubjects.findAll('embeddablePanel'); + return await this.testSubjects.findAll('dashboardPanel'); } public async addVisualizations(visualizations: string[]) { @@ -850,20 +850,6 @@ export class DashboardPageObject extends FtrService { return checkList.filter((viz) => viz.isPresent === false).map((viz) => viz.name); } - public async getPanelDrilldownCount(panelIndex = 0): Promise { - this.log.debug('getPanelDrilldownCount'); - const panel = (await this.getDashboardPanels())[panelIndex]; - try { - const count = await panel.findByTestSubject( - 'embeddablePanelNotification-ACTION_PANEL_NOTIFICATIONS' - ); - return Number.parseInt(await count.getVisibleText(), 10); - } catch (e) { - // if not found then this is 0 (we don't show badge with 0) - return 0; - } - } - public async getPanelChartDebugState(panelIndex: number) { return await this.elasticChart.getChartDebugData(undefined, panelIndex); } diff --git a/test/functional/page_objects/time_to_visualize_page.ts b/test/functional/page_objects/time_to_visualize_page.ts index b579c334ff331a..f9da8a16930fdb 100644 --- a/test/functional/page_objects/time_to_visualize_page.ts +++ b/test/functional/page_objects/time_to_visualize_page.ts @@ -134,18 +134,6 @@ export class TimeToVisualizePageObject extends FtrService { } } - public async libraryNotificationExists(panelTitle: string) { - this.log.debug('searching for library modal on panel:', panelTitle); - const panel = await this.testSubjects.find( - `embeddablePanelHeading-${panelTitle.replace(/ /g, '')}` - ); - const libraryActionExists = await this.testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panel - ); - return libraryActionExists; - } - public async saveFromModal( vizName: string, saveModalArgs: SaveModalArgs = { addToDashboard: null } diff --git a/test/functional/services/dashboard/panel_actions.ts b/test/functional/services/dashboard/panel_actions.ts index 9660b96ba3d93c..8cb8a9b635c2ca 100644 --- a/test/functional/services/dashboard/panel_actions.ts +++ b/test/functional/services/dashboard/panel_actions.ts @@ -41,6 +41,7 @@ export class DashboardPanelActionsService extends FtrService { private readonly dashboard = this.ctx.getPageObject('dashboard'); async findContextMenu(parent?: WebElementWrapper) { + this.log.debug('findContextMenu'); return parent ? await this.testSubjects.findDescendant(OPEN_CONTEXT_MENU_ICON_DATA_TEST_SUBJ, parent) : await this.testSubjects.find(OPEN_CONTEXT_MENU_ICON_DATA_TEST_SUBJ); @@ -75,7 +76,7 @@ export class DashboardPanelActionsService extends FtrService { } async openContextMenu(parent?: WebElementWrapper) { - this.log.debug(`openContextMenu(${parent}`); + this.log.debug(`openContextMenu`); const open = await this.testSubjects.exists('embeddablePanelContextMenuOpen'); if (!open) await this.toggleContextMenu(parent); await this.expectContextMenuToBeOpen(); @@ -89,15 +90,14 @@ export class DashboardPanelActionsService extends FtrService { async hasContextMenuMoreItem() { this.log.debug('hasContextMenuMoreItem'); - return await this.testSubjects.exists('embeddablePanelMore-mainMenu'); + return await this.testSubjects.exists('embeddablePanelMore-mainMenu', { timeout: 500 }); } async clickContextMenuMoreItem() { this.log.debug('clickContextMenuMoreItem'); await this.expectContextMenuToBeOpen(); - const hasMoreSubPanel = await this.hasContextMenuMoreItem(); - if (hasMoreSubPanel) { - await this.testSubjects.click('embeddablePanelMore-mainMenu'); + if (await this.hasContextMenuMoreItem()) { + await this.testSubjects.clickWhenNotDisabledWithoutRetry('embeddablePanelMore-mainMenu'); } } @@ -108,13 +108,13 @@ export class DashboardPanelActionsService extends FtrService { } async clickContextMenuItem(testSubject: string, parent?: WebElementWrapper) { - this.log.debug(`clickContextMenuItem`); + this.log.debug(`clickContextMenuItem(${testSubject})`); await this.openContextMenu(parent); - const exists = await this.testSubjects.exists(testSubject); + const exists = await this.testSubjects.exists(testSubject, { timeout: 500 }); if (!exists) { await this.clickContextMenuMoreItem(); } - await this.testSubjects.click(testSubject); + await this.testSubjects.clickWhenNotDisabledWithoutRetry(testSubject, { timeout: 500 }); } async clickContextMenuItemByTitle(testSubject: string, title = '') { @@ -127,10 +127,12 @@ export class DashboardPanelActionsService extends FtrService { this.log.debug('navigateToEditorFromFlyout'); await this.clickContextMenuItem(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); await this.header.waitUntilLoadingHasFinished(); - await this.testSubjects.click(EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ); + await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ); const isConfirmModalVisible = await this.testSubjects.exists('confirmModalConfirmButton'); if (isConfirmModalVisible) { - await this.testSubjects.click('confirmModalConfirmButton', 20000); + await this.testSubjects.clickWhenNotDisabledWithoutRetry('confirmModalConfirmButton', { + timeout: 20000, + }); } } @@ -193,18 +195,13 @@ export class DashboardPanelActionsService extends FtrService { await this.removePanel(header); } - async customizePanel(parent?: WebElementWrapper) { - this.log.debug('customizePanel'); - await this.clickContextMenuItem(CUSTOMIZE_PANEL_DATA_TEST_SUBJ, parent); - } - - async customizePanelByTitle(title = '') { - this.log.debug('customizePanel'); + async customizePanel(title = '') { + this.log.debug(`customizePanel(${title})`); const header = await this.getPanelHeading(title); await this.clickContextMenuItem(CUSTOMIZE_PANEL_DATA_TEST_SUBJ, header); } - async clonePanelByTitle(title = '') { + async clonePanel(title = '') { this.log.debug(`clonePanel(${title})`); const header = await this.getPanelHeading(title); await this.clickContextMenuItem(CLONE_PANEL_DATA_TEST_SUBJ, header); @@ -248,60 +245,56 @@ export class DashboardPanelActionsService extends FtrService { await this.clickContextMenuItem(OPEN_INSPECTOR_TEST_SUBJ, parent); } - async legacyUnlinkFromLibrary(parent?: WebElementWrapper) { - this.log.debug('legacyUnlinkFromLibrary'); - await this.clickContextMenuItem(LEGACY_UNLINK_FROM_LIBRARY_TEST_SUBJ, parent); - await this.testSubjects.waitForDeleted( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' - ); + async legacyUnlinkFromLibrary(title = '') { + this.log.debug(`legacyUnlinkFromLibrary(${title}`); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(LEGACY_UNLINK_FROM_LIBRARY_TEST_SUBJ, header); + await this.testSubjects.existOrFail('unlinkPanelSuccess'); + await this.expectNotLinkedToLibrary(title, true); } - async unlinkFromLibrary(parent?: WebElementWrapper) { - this.log.debug('unlinkFromLibrary'); - await this.clickContextMenuItem(UNLINK_FROM_LIBRARY_TEST_SUBJ, parent); - await this.testSubjects.waitForDeleted( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' - ); + async unlinkFromLibrary(title = '') { + this.log.debug(`unlinkFromLibrary(${title})`); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(UNLINK_FROM_LIBRARY_TEST_SUBJ, header); + await this.testSubjects.existOrFail('unlinkPanelSuccess'); + await this.expectNotLinkedToLibrary(title); } - async legacySaveToLibrary(newTitle: string, parent?: WebElementWrapper) { - this.log.debug('legacySaveToLibrary'); - await this.clickContextMenuItem(LEGACY_SAVE_TO_LIBRARY_TEST_SUBJ, parent); + async legacySaveToLibrary(newTitle = '', oldTitle = '') { + this.log.debug(`legacySaveToLibrary(${newTitle},${oldTitle})`); + const header = await this.getPanelHeading(oldTitle); + await this.clickContextMenuItem(LEGACY_SAVE_TO_LIBRARY_TEST_SUBJ, header); await this.testSubjects.setValue('savedObjectTitle', newTitle, { clearWithKeyboard: true, }); - await this.testSubjects.click('confirmSaveSavedObjectButton'); - await this.retry.try(async () => { - await this.testSubjects.existOrFail( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' - ); - }); + await this.testSubjects.clickWhenNotDisabledWithoutRetry('confirmSaveSavedObjectButton'); + await this.testSubjects.existOrFail('addPanelToLibrarySuccess'); + await this.expectLinkedToLibrary(newTitle, true); } - async saveToLibrary(newTitle: string, parent?: WebElementWrapper) { - this.log.debug('saveToLibrary'); - await this.clickContextMenuItem(SAVE_TO_LIBRARY_TEST_SUBJ, parent); + async saveToLibrary(newTitle = '', oldTitle = '') { + this.log.debug(`saveToLibraryByTitle(${newTitle},${oldTitle})`); + const header = await this.getPanelHeading(oldTitle); + await this.clickContextMenuItem(SAVE_TO_LIBRARY_TEST_SUBJ, header); await this.testSubjects.setValue('savedObjectTitle', newTitle, { clearWithKeyboard: true, }); - await this.testSubjects.click('confirmSaveSavedObjectButton'); - await this.retry.try(async () => { - await this.testSubjects.existOrFail( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION' - ); - }); + await this.testSubjects.clickWhenNotDisabledWithoutRetry('confirmSaveSavedObjectButton'); + await this.testSubjects.existOrFail('addPanelToLibrarySuccess'); + await this.expectLinkedToLibrary(newTitle); } async expectExistsPanelAction(testSubject: string, title = '') { this.log.debug('expectExistsPanelAction', testSubject, title); - const panelWrapper = title ? await this.getPanelHeading(title) : undefined; + const panelWrapper = await this.getPanelHeading(title); await this.openContextMenu(panelWrapper); - if (!(await this.testSubjects.exists(testSubject))) { + if (!(await this.testSubjects.exists(testSubject, { timeout: 1000 }))) { if (await this.hasContextMenuMoreItem()) { await this.clickContextMenuMoreItem(); } - await this.testSubjects.existOrFail(testSubject); + await this.testSubjects.existOrFail(testSubject, { timeout: 1000 }); } await this.toggleContextMenu(panelWrapper); } @@ -331,14 +324,15 @@ export class DashboardPanelActionsService extends FtrService { } async expectMissingPanelAction(testSubject: string, title = '') { - this.log.debug('expectMissingPanelAction', testSubject, title); - await this.openContextMenuByTitle(title); + this.log.debug(`expectMissingPanelAction(${title})`, testSubject); + const panelWrapper = await this.getPanelHeading(title); + await this.openContextMenu(panelWrapper); await this.testSubjects.missingOrFail(testSubject); if (await this.hasContextMenuMoreItem()) { await this.clickContextMenuMoreItem(); await this.testSubjects.missingOrFail(testSubject); } - await this.toggleContextMenuByTitle(title); + await this.toggleContextMenu(panelWrapper); } async expectMissingEditPanelAction(title = '') { @@ -381,13 +375,16 @@ export class DashboardPanelActionsService extends FtrService { await this.openContextMenu(parent); const isActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); if (!isActionVisible) await this.clickContextMenuMoreItem(); - return await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ, { timeout: 500 }); + return await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ, { timeout: 1000 }); } async canConvertToLensByTitle(title = '') { this.log.debug(`canConvertToLens(${title})`); const header = await this.getPanelHeading(title); - return await this.canConvertToLens(header); + await this.openContextMenu(header); + const isActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); + if (!isActionVisible) await this.clickContextMenuMoreItem(); + return await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ, { timeout: 1000 }); } async convertToLens(parent?: WebElementWrapper) { @@ -398,7 +395,7 @@ export class DashboardPanelActionsService extends FtrService { throw new Error('Convert to Lens option not found'); } - await this.testSubjects.click(CONVERT_TO_LENS_TEST_SUBJ); + await this.testSubjects.clickWhenNotDisabledWithoutRetry(CONVERT_TO_LENS_TEST_SUBJ); }); } @@ -407,4 +404,26 @@ export class DashboardPanelActionsService extends FtrService { const header = await this.getPanelHeading(title); return await this.convertToLens(header); } + + public async expectLinkedToLibrary(title = '', legacy?: boolean) { + this.log.debug(`expectLinkedToLibrary(${title})`); + if (legacy) { + await this.expectExistsPanelAction(LEGACY_UNLINK_FROM_LIBRARY_TEST_SUBJ, title); + } else { + await this.expectExistsPanelAction(UNLINK_FROM_LIBRARY_TEST_SUBJ, title); + } + await this.expectMissingPanelAction(LEGACY_SAVE_TO_LIBRARY_TEST_SUBJ, title); + await this.expectMissingPanelAction(SAVE_TO_LIBRARY_TEST_SUBJ, title); + } + + public async expectNotLinkedToLibrary(title = '', legacy?: boolean) { + this.log.debug(`expectNotLinkedToLibrary(${title})`); + if (legacy) { + await this.expectExistsPanelAction(LEGACY_SAVE_TO_LIBRARY_TEST_SUBJ, title); + } else { + await this.expectExistsPanelAction(SAVE_TO_LIBRARY_TEST_SUBJ, title); + } + await this.expectMissingPanelAction(LEGACY_UNLINK_FROM_LIBRARY_TEST_SUBJ, title); + await this.expectMissingPanelAction(UNLINK_FROM_LIBRARY_TEST_SUBJ, title); + } } diff --git a/test/functional/services/dashboard/panel_drilldown_actions.ts b/test/functional/services/dashboard/panel_drilldown_actions.ts index dbff1ddf5b8cf8..7c2e0278bc8e9e 100644 --- a/test/functional/services/dashboard/panel_drilldown_actions.ts +++ b/test/functional/services/dashboard/panel_drilldown_actions.ts @@ -13,26 +13,25 @@ import { FtrProviderContext } from '../../ftr_provider_context'; const CREATE_DRILLDOWN_DATA_TEST_SUBJ = 'embeddablePanelAction-OPEN_FLYOUT_ADD_DRILLDOWN'; const MANAGE_DRILLDOWNS_DATA_TEST_SUBJ = 'embeddablePanelAction-OPEN_FLYOUT_EDIT_DRILLDOWN'; -export function DashboardDrilldownPanelActionsProvider({ getService }: FtrProviderContext) { +export function DashboardDrilldownPanelActionsProvider({ + getService, + getPageObjects, +}: FtrProviderContext) { const log = getService('log'); const testSubjects = getService('testSubjects'); const dashboardPanelActions = getService('dashboardPanelActions'); + const { dashboard } = getPageObjects(['dashboard']); + return new (class DashboardDrilldownPanelActions { async expectExistsCreateDrilldownAction() { log.debug('expectExistsCreateDrilldownAction'); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.expectContextMenuToBeOpen(); - await dashboardPanelActions.clickContextMenuMoreItem(); - await await testSubjects.existOrFail(CREATE_DRILLDOWN_DATA_TEST_SUBJ); + await dashboardPanelActions.expectExistsPanelAction(CREATE_DRILLDOWN_DATA_TEST_SUBJ); } async expectMissingCreateDrilldownAction() { log.debug('expectMissingCreateDrilldownAction'); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.expectContextMenuToBeOpen(); - await dashboardPanelActions.clickContextMenuMoreItem(); - await testSubjects.existOrFail(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); + await dashboardPanelActions.expectMissingPanelAction(CREATE_DRILLDOWN_DATA_TEST_SUBJ); } async clickCreateDrilldown() { @@ -43,24 +42,17 @@ export function DashboardDrilldownPanelActionsProvider({ getService }: FtrProvid async expectExistsManageDrilldownsAction() { log.debug('expectExistsCreateDrilldownAction'); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.expectContextMenuToBeOpen(); - await dashboardPanelActions.clickContextMenuMoreItem(); - await testSubjects.existOrFail(CREATE_DRILLDOWN_DATA_TEST_SUBJ); + await dashboardPanelActions.expectExistsPanelAction(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); } async expectMissingManageDrilldownsAction() { log.debug('expectExistsRemovePanelAction'); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.expectContextMenuToBeOpen(); - await dashboardPanelActions.clickContextMenuMoreItem(); - await testSubjects.existOrFail(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); + await dashboardPanelActions.expectMissingPanelAction(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); } async clickManageDrilldowns() { log.debug('clickManageDrilldowns'); - await this.expectExistsManageDrilldownsAction(); - await testSubjects.clickWhenNotDisabledWithoutRetry(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); + await dashboardPanelActions.clickContextMenuItem(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); } async expectMultipleActionsMenuOpened() { @@ -97,5 +89,37 @@ export function DashboardDrilldownPanelActionsProvider({ getService }: FtrProvid throw new Error(`No action matching text "${text}"`); } + + async getPanelDrilldownCount(panelIndex = 0): Promise { + log.debug('getPanelDrilldownCount'); + const panel = (await dashboard.getDashboardPanels())[panelIndex]; + await dashboardPanelActions.openContextMenu(panel); + + try { + const exists = await testSubjects.exists(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ, { + timeout: 500, + }); + if (!exists) { + await dashboardPanelActions.clickContextMenuMoreItem(); + if (!(await testSubjects.exists(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ, { timeout: 500 }))) { + return 0; + } + } + const manageDrilldownAction = await testSubjects.find( + MANAGE_DRILLDOWNS_DATA_TEST_SUBJ, + 500 + ); + + const count = await ( + await manageDrilldownAction.findByCssSelector('.euiNotificationBadge') + ).getVisibleText(); + return Number.parseInt(count, 10); + } catch (e) { + log.debug('manage drilldowns action not found'); + return 0; + } finally { + await dashboardPanelActions.toggleContextMenu(panel); + } + } })(); } diff --git a/test/plugin_functional/test_suites/data_plugin/index.ts b/test/plugin_functional/test_suites/data_plugin/index.ts index 14bbe161ffde9c..e3e6232c74c320 100644 --- a/test/plugin_functional/test_suites/data_plugin/index.ts +++ b/test/plugin_functional/test_suites/data_plugin/index.ts @@ -15,15 +15,15 @@ export default function ({ loadTestFile, }: PluginFunctionalProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'header', 'settings']); + const { common, settings } = getPageObjects(['common', 'settings']); describe('data plugin', () => { before(async () => { await esArchiver.loadIfNeeded( 'test/functional/fixtures/es_archiver/getting_started/shakespeare' ); - await PageObjects.common.navigateToApp('settings'); - await PageObjects.settings.createIndexPattern('shakespeare', ''); + await common.navigateToApp('settings'); + await settings.createIndexPattern('shakespeare', ''); }); loadTestFile(require.resolve('./search')); diff --git a/test/plugin_functional/test_suites/data_plugin/session.ts b/test/plugin_functional/test_suites/data_plugin/session.ts index 004b47e40fa60f..812641e508d2c0 100644 --- a/test/plugin_functional/test_suites/data_plugin/session.ts +++ b/test/plugin_functional/test_suites/data_plugin/session.ts @@ -11,12 +11,11 @@ import expect from '@kbn/expect'; import { PluginFunctionalProviderContext } from '../../services'; export default function ({ getService, getPageObjects }: PluginFunctionalProviderContext) { - const PageObjects = getPageObjects([ + const { common, header, dashboard, discover, unifiedFieldList } = getPageObjects([ 'common', 'header', 'dashboard', 'discover', - 'timePicker', 'unifiedFieldList', ]); const filterBar = getService('filterBar'); @@ -36,9 +35,9 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide describe('Session management', function describeSessionManagementTests() { describe('Discover', () => { before(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await testSubjects.click('clearSessionsButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); afterEach(async () => { @@ -47,8 +46,8 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide }); it('Starts on index pattern select', async () => { - await PageObjects.discover.selectIndexPattern('shakespeare'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectIndexPattern('shakespeare'); + await header.waitUntilLoadingHasFinished(); const sessionIds = await getSessionIds(); expect(sessionIds.length).to.be(1); @@ -56,22 +55,22 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide it('Starts on a refresh', async () => { await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const sessionIds = await getSessionIds(); expect(sessionIds.length).to.be(1); }); it('Starts a new session on sort', async () => { - await PageObjects.unifiedFieldList.clickFieldListItemAdd('speaker'); - await PageObjects.discover.clickFieldSort('speaker', 'Sort A-Z'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('speaker'); + await discover.clickFieldSort('speaker', 'Sort A-Z'); + await header.waitUntilLoadingHasFinished(); const sessionIds = await getSessionIds(); expect(sessionIds.length).to.be(1); }); it('Starts a new session on filter change', async () => { await filterBar.addFilter({ field: 'line_number', operation: 'is', value: '4.3.108' }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const sessionIds = await getSessionIds(); expect(sessionIds.length).to.be(1); }); @@ -86,9 +85,9 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('dashboard with filter'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('dashboard with filter'); + await header.waitUntilLoadingHasFinished(); }); afterEach(async () => { @@ -108,7 +107,7 @@ export default function ({ getService, getPageObjects }: PluginFunctionalProvide it('starts a session on refresh', async () => { await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const sessionIds = await getSessionIds(); expect(sessionIds.length).to.be(1); }); diff --git a/test/plugin_functional/test_suites/panel_actions/index.js b/test/plugin_functional/test_suites/panel_actions/index.ts similarity index 77% rename from test/plugin_functional/test_suites/panel_actions/index.js rename to test/plugin_functional/test_suites/panel_actions/index.ts index 3cc629375ad02c..ad4871e961db1e 100644 --- a/test/plugin_functional/test_suites/panel_actions/index.js +++ b/test/plugin_functional/test_suites/panel_actions/index.ts @@ -7,11 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export default function ({ getService, getPageObjects, loadTestFile }) { +import { PluginFunctionalProviderContext } from '../../services'; + +export default function ({ + getService, + getPageObjects, + loadTestFile, +}: PluginFunctionalProviderContext) { const browser = getService('browser'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard']); + const { common, dashboard } = getPageObjects(['common', 'dashboard']); describe('pluggable panel actions', function () { before(async () => { @@ -24,12 +30,12 @@ export default function ({ getService, getPageObjects, loadTestFile }) { await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*', }); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.preserveCrossAppState(); + await common.navigateToApp('dashboard'); + await dashboard.preserveCrossAppState(); }); after(async function () { - await PageObjects.dashboard.clearSavedObjectsFromAppLinks(); + await dashboard.clearSavedObjectsFromAppLinks(); await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.unload('test/functional/fixtures/es_archiver/dashboard/current/data'); }); diff --git a/test/plugin_functional/test_suites/panel_actions/panel_actions.js b/test/plugin_functional/test_suites/panel_actions/panel_actions.ts similarity index 89% rename from test/plugin_functional/test_suites/panel_actions/panel_actions.js rename to test/plugin_functional/test_suites/panel_actions/panel_actions.ts index df83a05e14e4df..8db65c13b57b6d 100644 --- a/test/plugin_functional/test_suites/panel_actions/panel_actions.js +++ b/test/plugin_functional/test_suites/panel_actions/panel_actions.ts @@ -8,16 +8,17 @@ */ import expect from '@kbn/expect'; +import { PluginFunctionalProviderContext } from '../../services'; -export default function ({ getService, getPageObjects }) { +export default function ({ getService, getPageObjects }: PluginFunctionalProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['dashboard']); + const { dashboard } = getPageObjects(['dashboard']); describe('Panel Actions', () => { before(async () => { - await PageObjects.dashboard.loadSavedDashboard('few panels'); + await dashboard.loadSavedDashboard('few panels'); }); it('allows to register links into the context menu', async () => { diff --git a/x-pack/packages/kbn-elastic-assistant-common/.gitignore b/x-pack/packages/kbn-elastic-assistant-common/.gitignore new file mode 100644 index 00000000000000..05014e534ec88a --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/.gitignore @@ -0,0 +1,2 @@ +# Private configs for .http files +http-client.private.env.json \ No newline at end of file diff --git a/x-pack/packages/kbn-elastic-assistant-common/env/README.md b/x-pack/packages/kbn-elastic-assistant-common/env/README.md new file mode 100644 index 00000000000000..b90d83aaca8123 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/env/README.md @@ -0,0 +1,33 @@ +With https://github.com/elastic/kibana/pull/186566, we've introduced a few sample `*.http` files for easier development/testing. These files are supported out of the box in JetBrains IDE's or in VSCode with the [httpyac](https://httpyac.github.io/) (and many other) extensions. Since the configuration for these files includes a `-` in the name, a few @elastic/kibana-operations files have been updated to exclude them from checks and being included in the distribution. + +You can read more about `http` files [here](https://www.jetbrains.com/help/webstorm/http-client-in-product-code-editor.html) and for the spec see this repo [here](https://github.com/JetBrains/http-request-in-editor-spec/blob/master/spec.md). If we find these useful, we could add support to our [OpenAPI Generator](https://openapi-generator.tech/docs/generators/jetbrains-http-client) to create these automatically. They currently live co-located next to the OAS and generated schema files here: + +``` +x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.http +x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.http +``` + +and the main config here in this directory: + +``` +x-pack/packages/kbn-elastic-assistant-common/env/http-client.env.json +``` + +The `x-pack/packages/kbn-elastic-assistant-common/.gitignore` has been updated to ignore `http-client.private.env.json` files locally, which is how you can override the config as you'd like. This is helpful to add variables like `basePath` as below: + +``` +{ + "dev": { + "basePath": "/kbn" + } +} +``` + +To use them, just open the corresponding `*.http` for the API you want to test, and click `Send`, and the response will open in another tab. Here is what that looks like for creating one of the new `IndexEntry` KB documents that have been introduced in the initial PR: + +

+ +

+ + +For continuing this effort, https://github.com/elastic/kibana/issues/192386 has been created. diff --git a/x-pack/packages/kbn-elastic-assistant-common/env/http-client.env.json b/x-pack/packages/kbn-elastic-assistant-common/env/http-client.env.json new file mode 100644 index 00000000000000..3f48e01e099fac --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/env/http-client.env.json @@ -0,0 +1,15 @@ +{ + "dev": { + "host": "localhost", + "port": "5601", + "basePath": "", + "elasticApiVersion": "1", + "auth": { + "username": "elastic", + "password": "changeme" + }, + "appContext": { + "security": "%7B%22type%22%3A%22application%22%2C%22name%22%3A%22securitySolutionUI%22%2C%22url%22%3A%22%2Fkbn%2Fapp%2Fsecurity%22%7D" + } + } +} diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts index c6c6c758a8cf6e..6304bfa4786cf8 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/index.ts @@ -49,10 +49,10 @@ export * from './actions_connector/post_actions_connector_execute_route.gen'; // Knowledge Base Schemas export * from './knowledge_base/crud_kb_route.gen'; -export * from './knowledge_base/bulk_crud_knowledge_base_route.gen'; -export * from './knowledge_base/common_attributes.gen'; -export * from './knowledge_base/crud_knowledge_base_route.gen'; -export * from './knowledge_base/find_knowledge_base_entries_route.gen'; +export * from './knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen'; +export * from './knowledge_base/entries/common_attributes.gen'; +export * from './knowledge_base/entries/crud_knowledge_base_entries_route.gen'; +export * from './knowledge_base/entries/find_knowledge_base_entries_route.gen'; export * from './prompts/find_prompts_route.gen'; export { PromptResponse, PromptTypeEnum } from './prompts/bulk_crud_prompts_route.gen'; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts deleted file mode 100644 index 2736baf8a135d5..00000000000000 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -/* - * NOTICE: Do not edit this file manually. - * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. - * - * info: - * title: Common Knowledge Base Attributes - * version: not applicable - */ - -import { z } from '@kbn/zod'; - -import { NonEmptyString, User } from '../common_attributes.gen'; - -export type KnowledgeBaseEntryErrorSchema = z.infer; -export const KnowledgeBaseEntryErrorSchema = z - .object({ - statusCode: z.number(), - error: z.string(), - message: z.string(), - }) - .strict(); - -/** - * Metadata about an Knowledge Base Entry - */ -export type Metadata = z.infer; -export const Metadata = z.object({ - /** - * Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc - */ - kbResource: z.string(), - /** - * Source document name or filepath - */ - source: z.string(), - /** - * Whether or not this resource should always be included - */ - required: z.boolean(), -}); - -/** - * Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings - */ -export type Vector = z.infer; -export const Vector = z.object({ - /** - * ID of the model used to create the embeddings - */ - modelId: z.string(), - /** - * Tokens with their corresponding values - */ - tokens: z.object({}).catchall(z.number()), -}); - -export type KnowledgeBaseEntryResponse = z.infer; -export const KnowledgeBaseEntryResponse = z.object({ - timestamp: NonEmptyString.optional(), - id: NonEmptyString, - /** - * Time the Knowledge Base Entry was created - */ - createdAt: z.string(), - /** - * User who created the Knowledge Base Entry - */ - createdBy: z.string().optional(), - /** - * Time the Knowledge Base Entry was last updated - */ - updatedAt: z.string().optional(), - /** - * User who last updated the Knowledge Base Entry - */ - updatedBy: z.string().optional(), - users: z.array(User), - /** - * Metadata about the Knowledge Base Entry - */ - metadata: Metadata.optional(), - /** - * Kibana space - */ - namespace: z.string(), - /** - * Knowledge Base Entry content - */ - text: z.string(), - vector: Vector.optional(), -}); - -export type KnowledgeBaseEntryUpdateProps = z.infer; -export const KnowledgeBaseEntryUpdateProps = z.object({ - id: NonEmptyString, - /** - * Metadata about the Knowledge Base Entry - */ - metadata: Metadata.optional(), -}); - -export type KnowledgeBaseEntryCreateProps = z.infer; -export const KnowledgeBaseEntryCreateProps = z.object({ - /** - * Metadata about the Knowledge Base Entry - */ - metadata: Metadata, - /** - * Knowledge Base Entry content - */ - text: z.string(), -}); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml deleted file mode 100644 index 53c69426b69bd9..00000000000000 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml +++ /dev/null @@ -1,123 +0,0 @@ -openapi: 3.0.0 -info: - title: Common Knowledge Base Attributes - version: 'not applicable' -paths: {} -components: - x-codegen-enabled: true - schemas: - - KnowledgeBaseEntryErrorSchema: - type: object - required: - - statusCode - - error - - message - additionalProperties: false - properties: - statusCode: - type: number - error: - type: string - message: - type: string - - Metadata: - type: object - description: Metadata about an Knowledge Base Entry - required: - - 'kbResource' - - 'source' - - 'required' - properties: - kbResource: - type: string - description: Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc - source: - type: string - description: Source document name or filepath - required: - type: boolean - description: Whether or not this resource should always be included - - Vector: - type: object - description: Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings - required: - - 'modelId' - - 'tokens' - properties: - modelId: - type: string - description: ID of the model used to create the embeddings - tokens: - type: object - additionalProperties: - type: number - description: Tokens with their corresponding values - - KnowledgeBaseEntryResponse: - type: object - required: - - id - - createdAt - - users - - namespace - - text - properties: - 'timestamp': - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' - id: - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' - createdAt: - description: Time the Knowledge Base Entry was created - type: string - createdBy: - description: User who created the Knowledge Base Entry - type: string - updatedAt: - description: Time the Knowledge Base Entry was last updated - type: string - updatedBy: - description: User who last updated the Knowledge Base Entry - type: string - users: - type: array - items: - $ref: '../common_attributes.schema.yaml#/components/schemas/User' - metadata: - $ref: '#/components/schemas/Metadata' - description: Metadata about the Knowledge Base Entry - namespace: - type: string - description: Kibana space - text: - type: string - description: Knowledge Base Entry content - vector: - $ref: '#/components/schemas/Vector' - - KnowledgeBaseEntryUpdateProps: - type: object - required: - - id - properties: - id: - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' - metadata: - $ref: '#/components/schemas/Metadata' - description: Metadata about the Knowledge Base Entry - - KnowledgeBaseEntryCreateProps: - type: object - required: - - metadata - - text - properties: - metadata: - $ref: '#/components/schemas/Metadata' - description: Metadata about the Knowledge Base Entry - text: - type: string - description: Knowledge Base Entry content - diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts similarity index 100% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.gen.ts rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.gen.ts diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.http b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.http new file mode 100644 index 00000000000000..d8ad084a792a10 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.http @@ -0,0 +1,13 @@ +### Empty Bulk Action +POST http://{{host}}:{{port}}{{basePath}}/internal/elastic_assistant/knowledge_base/entries/_bulk_action +kbn-xsrf: "true" +Content-Type: application/json +Elastic-Api-Version: {{elasticApiVersion}} +Authorization: Basic {{auth.username}} {{auth.password}} +X-Kbn-Context: {{appContext.security}} + +{ + "delete": {}, + "create": [], + "update": [] +} diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.schema.yaml similarity index 100% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/bulk_crud_knowledge_base_route.schema.yaml rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/bulk_crud_knowledge_base_entries_route.schema.yaml diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts new file mode 100644 index 00000000000000..1af5c46b1c1301 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen.ts @@ -0,0 +1,248 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Common Knowledge Base Attributes + * version: not applicable + */ + +import { z } from '@kbn/zod'; + +import { User, NonEmptyString } from '../../common_attributes.gen'; + +/** + * Array of objects defining the input schema, allowing the LLM to extract structured data to be used in retrieval + */ +export type InputSchema = z.infer; +export const InputSchema = z.array( + z.object({ + /** + * Name of the field + */ + fieldName: z.string(), + /** + * Type of the field + */ + fieldType: z.string(), + /** + * Description of the field + */ + description: z.string(), + }) +); + +export type KnowledgeBaseEntryErrorSchema = z.infer; +export const KnowledgeBaseEntryErrorSchema = z + .object({ + statusCode: z.number(), + error: z.string(), + message: z.string(), + }) + .strict(); + +/** + * Metadata about a Knowledge Base Entry + */ +export type Metadata = z.infer; +export const Metadata = z.object({ + /** + * Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc + */ + kbResource: z.string(), + /** + * Source document name or filepath + */ + source: z.string(), + /** + * Whether this resource should always be included + */ + required: z.boolean(), +}); + +/** + * Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings + */ +export type Vector = z.infer; +export const Vector = z.object({ + /** + * ID of the model used to create the embeddings + */ + modelId: z.string(), + /** + * Tokens with their corresponding values + */ + tokens: z.object({}).catchall(z.number()), +}); + +export type BaseRequiredFields = z.infer; +export const BaseRequiredFields = z.object({ + /** + * Name of the Knowledge Base Entry + */ + name: z.string(), +}); + +export type BaseDefaultableFields = z.infer; +export const BaseDefaultableFields = z.object({ + /** + * Kibana Space, defaults to 'default' space + */ + namespace: z.string().optional(), + /** + * Users who have access to the Knowledge Base Entry, defaults to current user. Empty array provides access to all users. + */ + users: z.array(User).optional(), +}); + +export type BaseCreateProps = z.infer; +export const BaseCreateProps = BaseRequiredFields.merge(BaseDefaultableFields); + +export type BaseUpdateProps = z.infer; +export const BaseUpdateProps = BaseCreateProps.partial(); + +export type BaseResponseProps = z.infer; +export const BaseResponseProps = BaseRequiredFields.merge(BaseDefaultableFields.required()); + +export type ResponseFields = z.infer; +export const ResponseFields = z.object({ + id: NonEmptyString, + /** + * Time the Knowledge Base Entry was created + */ + createdAt: z.string(), + /** + * User who created the Knowledge Base Entry + */ + createdBy: z.string(), + /** + * Time the Knowledge Base Entry was last updated + */ + updatedAt: z.string(), + /** + * User who last updated the Knowledge Base Entry + */ + updatedBy: z.string(), +}); + +export type SharedResponseProps = z.infer; +export const SharedResponseProps = BaseResponseProps.merge(ResponseFields); + +export type DocumentEntryType = z.infer; +export const DocumentEntryType = z.literal('document'); + +export type DocumentEntryRequiredFields = z.infer; +export const DocumentEntryRequiredFields = z.object({ + /** + * Entry type + */ + type: z.literal('document'), + /** + * Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc + */ + kbResource: z.string(), + /** + * Source document name or filepath + */ + source: z.string(), + /** + * Knowledge Base Entry content + */ + text: z.string(), +}); + +export type DocumentEntryOptionalFields = z.infer; +export const DocumentEntryOptionalFields = z.object({ + /** + * Whether this resource should always be included, defaults to false + */ + required: z.boolean().optional(), + vector: Vector.optional(), +}); + +export type DocumentEntryCreateFields = z.infer; +export const DocumentEntryCreateFields = BaseCreateProps.merge(DocumentEntryRequiredFields).merge( + DocumentEntryOptionalFields +); + +export type DocumentEntryUpdateFields = z.infer; +export const DocumentEntryUpdateFields = BaseUpdateProps.merge(DocumentEntryCreateFields); + +export type DocumentEntryResponseFields = z.infer; +export const DocumentEntryResponseFields = DocumentEntryRequiredFields.merge( + DocumentEntryOptionalFields +); + +export type DocumentEntry = z.infer; +export const DocumentEntry = SharedResponseProps.merge(DocumentEntryResponseFields); + +export type IndexEntryType = z.infer; +export const IndexEntryType = z.literal('index'); + +export type IndexEntryRequiredFields = z.infer; +export const IndexEntryRequiredFields = z.object({ + /** + * Entry type + */ + type: z.literal('index'), + /** + * Index or Data Stream to query for Knowledge Base content + */ + index: z.string(), + /** + * Field to query for Knowledge Base content + */ + field: z.string(), + /** + * Description for when this index or data stream should be queried for Knowledge Base content. Passed to the LLM as a tool description + */ + description: z.string(), + /** + * Description of query field used to fetch Knowledge Base content. Passed to the LLM as part of the tool input schema + */ + queryDescription: z.string(), +}); + +export type IndexEntryOptionalFields = z.infer; +export const IndexEntryOptionalFields = z.object({ + inputSchema: InputSchema.optional(), + /** + * Fields to extract from the query result, defaults to all fields if not provided or empty + */ + outputFields: z.array(z.string()).optional(), +}); + +export type IndexEntryCreateFields = z.infer; +export const IndexEntryCreateFields = + BaseCreateProps.merge(IndexEntryRequiredFields).merge(IndexEntryOptionalFields); + +export type IndexEntryUpdateFields = z.infer; +export const IndexEntryUpdateFields = BaseUpdateProps.merge(IndexEntryCreateFields); + +export type IndexEntryResponseFields = z.infer; +export const IndexEntryResponseFields = IndexEntryRequiredFields.merge(IndexEntryOptionalFields); + +export type IndexEntry = z.infer; +export const IndexEntry = SharedResponseProps.merge(IndexEntryResponseFields); + +export type KnowledgeBaseEntryCreateProps = z.infer; +export const KnowledgeBaseEntryCreateProps = z.discriminatedUnion('type', [ + DocumentEntryCreateFields, + IndexEntryCreateFields, +]); + +export type KnowledgeBaseEntryUpdateProps = z.infer; +export const KnowledgeBaseEntryUpdateProps = z.discriminatedUnion('type', [ + DocumentEntryUpdateFields, + IndexEntryUpdateFields, +]); + +export type KnowledgeBaseEntryResponse = z.infer; +export const KnowledgeBaseEntryResponse = z.discriminatedUnion('type', [DocumentEntry, IndexEntry]); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.schema.yaml new file mode 100644 index 00000000000000..c1c551059f04b1 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.schema.yaml @@ -0,0 +1,302 @@ +openapi: 3.0.0 +info: + title: Common Knowledge Base Attributes + version: "not applicable" +paths: {} +components: + x-codegen-enabled: true + schemas: + InputSchema: + type: array + description: Array of objects defining the input schema, allowing the LLM to extract structured data to be used in retrieval + items: + type: object + required: + - fieldName + - fieldType + - description + properties: + fieldName: + type: string + description: Name of the field + fieldType: + type: string + description: Type of the field + description: + type: string + description: Description of the field + + KnowledgeBaseEntryErrorSchema: + type: object + required: + - statusCode + - error + - message + additionalProperties: false + properties: + statusCode: + type: number + error: + type: string + message: + type: string + + Metadata: + type: object + description: Metadata about a Knowledge Base Entry + required: + - "kbResource" + - "source" + - "required" + properties: + kbResource: + type: string + description: Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc + source: + type: string + description: Source document name or filepath + required: + type: boolean + description: Whether this resource should always be included + + Vector: + type: object + description: Object containing Knowledge Base Entry text embeddings and modelId used to create the embeddings + required: + - "modelId" + - "tokens" + properties: + modelId: + type: string + description: ID of the model used to create the embeddings + tokens: + type: object + additionalProperties: + type: number + description: Tokens with their corresponding values + + ########### + # Base Entry + ########### + BaseRequiredFields: + x-inline: true + type: object + properties: + name: + type: string + description: Name of the Knowledge Base Entry + required: + - name + + BaseDefaultableFields: + x-inline: true + type: object + properties: + namespace: + type: string + description: Kibana Space, defaults to 'default' space + users: + type: array + description: Users who have access to the Knowledge Base Entry, defaults to current user. Empty array provides access to all users. + items: + $ref: "../../common_attributes.schema.yaml#/components/schemas/User" + + BaseCreateProps: + x-inline: true + allOf: + - $ref: "#/components/schemas/BaseRequiredFields" + - $ref: "#/components/schemas/BaseDefaultableFields" + + BaseUpdateProps: + x-inline: true + allOf: + - $ref: "#/components/schemas/BaseCreateProps" + x-modify: partial + + BaseResponseProps: + x-inline: true + allOf: + - $ref: "#/components/schemas/BaseRequiredFields" + - $ref: "#/components/schemas/BaseDefaultableFields" + x-modify: required + + ResponseFields: + type: object + properties: + id: + $ref: "../../common_attributes.schema.yaml#/components/schemas/NonEmptyString" + createdAt: + description: Time the Knowledge Base Entry was created + type: string + createdBy: + description: User who created the Knowledge Base Entry + type: string + updatedAt: + description: Time the Knowledge Base Entry was last updated + type: string + updatedBy: + description: User who last updated the Knowledge Base Entry + type: string + required: + - id + - createdAt + - createdBy + - updatedAt + - updatedBy + + SharedResponseProps: + x-inline: true + allOf: + - $ref: "#/components/schemas/BaseResponseProps" + - $ref: "#/components/schemas/ResponseFields" + + ########### + # Document Knowledge Base Entry + ########### + DocumentEntryType: + type: string + enum: + - document + + DocumentEntryRequiredFields: + type: object + properties: + type: + type: string + enum: [document] + description: Entry type + kbResource: + type: string + description: Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc + source: + type: string + description: Source document name or filepath + text: + type: string + description: Knowledge Base Entry content + + required: + - type + - kbResource + - source + - text + + DocumentEntryOptionalFields: + type: object + properties: + required: + type: boolean + description: Whether this resource should always be included, defaults to false + vector: + $ref: "#/components/schemas/Vector" + + DocumentEntryCreateFields: + allOf: + - $ref: "#/components/schemas/BaseCreateProps" + - $ref: "#/components/schemas/DocumentEntryRequiredFields" + - $ref: "#/components/schemas/DocumentEntryOptionalFields" + + DocumentEntryUpdateFields: + allOf: + - $ref: "#/components/schemas/BaseUpdateProps" + - $ref: "#/components/schemas/DocumentEntryCreateFields" + + DocumentEntryResponseFields: + allOf: + - $ref: "#/components/schemas/DocumentEntryRequiredFields" + - $ref: "#/components/schemas/DocumentEntryOptionalFields" + + DocumentEntry: + allOf: + - $ref: "#/components/schemas/SharedResponseProps" + - $ref: "#/components/schemas/DocumentEntryResponseFields" + + ########### + # Index Knowledge Base Entry + ########### + IndexEntryType: + type: string + enum: + - index + + IndexEntryRequiredFields: + type: object + properties: + type: + type: string + enum: [index] + description: Entry type + index: + type: string + description: Index or Data Stream to query for Knowledge Base content + field: + type: string + description: Field to query for Knowledge Base content + description: + type: string + description: Description for when this index or data stream should be queried for Knowledge Base content. Passed to the LLM as a tool description + queryDescription: + type: string + description: Description of query field used to fetch Knowledge Base content. Passed to the LLM as part of the tool input schema + required: + - type + - index + - field + - description + - queryDescription + + IndexEntryOptionalFields: + type: object + properties: + inputSchema: + $ref: "#/components/schemas/InputSchema" + outputFields: + type: array + description: Fields to extract from the query result, defaults to all fields if not provided or empty + items: + type: string + + IndexEntryCreateFields: + allOf: + - $ref: "#/components/schemas/BaseCreateProps" + - $ref: "#/components/schemas/IndexEntryRequiredFields" + - $ref: "#/components/schemas/IndexEntryOptionalFields" + + IndexEntryUpdateFields: + allOf: + - $ref: "#/components/schemas/BaseUpdateProps" + - $ref: "#/components/schemas/IndexEntryCreateFields" + + IndexEntryResponseFields: + allOf: + - $ref: "#/components/schemas/IndexEntryRequiredFields" + - $ref: "#/components/schemas/IndexEntryOptionalFields" + + IndexEntry: + allOf: + - $ref: "#/components/schemas/SharedResponseProps" + - $ref: "#/components/schemas/IndexEntryResponseFields" + + ################### + # Combined Props + ################### + KnowledgeBaseEntryCreateProps: + discriminator: + propertyName: type + anyOf: + - $ref: "#/components/schemas/DocumentEntryCreateFields" + - $ref: "#/components/schemas/IndexEntryCreateFields" + + KnowledgeBaseEntryUpdateProps: + discriminator: + propertyName: type + anyOf: + - $ref: "#/components/schemas/DocumentEntryUpdateFields" + - $ref: "#/components/schemas/IndexEntryUpdateFields" + + KnowledgeBaseEntryResponse: + discriminator: + propertyName: type + anyOf: + - $ref: "#/components/schemas/DocumentEntry" + - $ref: "#/components/schemas/IndexEntry" diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts similarity index 98% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts index c73fb3ba7b7cf8..1650f4ddc3cc62 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.gen.ts @@ -21,7 +21,7 @@ import { KnowledgeBaseEntryResponse, KnowledgeBaseEntryUpdateProps, } from './common_attributes.gen'; -import { NonEmptyString } from '../common_attributes.gen'; +import { NonEmptyString } from '../../common_attributes.gen'; export type CreateKnowledgeBaseEntryRequestBody = z.infer< typeof CreateKnowledgeBaseEntryRequestBody diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.http b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.http new file mode 100644 index 00000000000000..88ad6555da50ff --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.http @@ -0,0 +1,49 @@ +### Create Document Entry +POST http://{{host}}:{{port}}{{basePath}}/internal/elastic_assistant/knowledge_base/entries +kbn-xsrf: "true" +Content-Type: application/json +Elastic-Api-Version: {{elasticApiVersion}} +Authorization: Basic {{auth.username}} {{auth.password}} +X-Kbn-Context: {{appContext.security}} + +{ + "type": "document", + "name": "Favorites", + "kbResource": "user", + "source": "api", + "required": true, + "text": "My favorite food is Dan Bing" +} + +### Create Index Entry +POST http://{{host}}:{{port}}{{basePath}}/internal/elastic_assistant/knowledge_base/entries +kbn-xsrf: "true" +Content-Type: application/json +Elastic-Api-Version: {{elasticApiVersion}} +Authorization: Basic {{auth.username}} {{auth.password}} +X-Kbn-Context: {{appContext.security}} + +{ + "type": "index", + "name": "SpongBotSlackConnector", + "namespace": "default", + "index": "spongbot-slack", + "field": "semantic_text", + "description": "Use this index to search for the user's Slack messages.", + "queryDescription": + "The free text search that the user wants to perform over this dataset. So if asking \"what are my slack messages from last week about failed tests\", the query would be \"A test has failed! failing test failed test\"", + "inputSchema": [ + { + "fieldName": "author", + "fieldType": "string", + "description": "The author of the message. So if asking for recent messages from Stan, you would provide 'Stan' as the author." + } + ], + "outputFields": ["author", "text", "timestamp"] +} + + + + + + diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.schema.yaml similarity index 93% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.schema.yaml index 32e66efffc13ca..7479b5cca8225e 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/crud_knowledge_base_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/crud_knowledge_base_entries_route.schema.yaml @@ -3,7 +3,7 @@ info: title: Manage Knowledge Base Entries API endpoint version: '1' paths: - /internnal/elastic_assistant/knowledge_base/entries: + /internal/elastic_assistant/knowledge_base/entries: post: x-codegen-enabled: true # This API is still behind the `assistantKnowledgeBaseByDefault` feature flag @@ -51,7 +51,7 @@ paths: required: true description: The Knowledge Base Entry's `id` value. schema: - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../common_attributes.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Successful request returning a Knowledge Base Entry @@ -81,7 +81,7 @@ paths: required: true description: The Knowledge Base Entry's `id` value schema: - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../common_attributes.schema.yaml#/components/schemas/NonEmptyString' requestBody: required: true content: @@ -117,7 +117,7 @@ paths: required: true description: The Knowledge Base Entry's `id` value schema: - $ref: '../common_attributes.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../common_attributes.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Successful request returning the deleted Knowledge Base Entry diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts similarity index 97% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts index cb5ae50ec81f00..81930d69bb2653 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.gen.ts @@ -17,7 +17,7 @@ import { z } from '@kbn/zod'; import { ArrayFromString } from '@kbn/zod-helpers'; -import { SortOrder } from '../common_attributes.gen'; +import { SortOrder } from '../../common_attributes.gen'; import { KnowledgeBaseEntryResponse } from './common_attributes.gen'; export type FindKnowledgeBaseEntriesSortField = z.infer; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.http b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.http new file mode 100644 index 00000000000000..3d90053767dfef --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.http @@ -0,0 +1,6 @@ +### Find all knowledge base entries +GET http://{{host}}:{{port}}{{basePath}}/internal/elastic_assistant/knowledge_base/entries/_find +Elastic-Api-Version: {{elasticApiVersion}} +Authorization: Basic {{auth.username}} {{auth.password}} +X-Kbn-Context: {{appContext.security}} + diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.schema.yaml similarity index 97% rename from x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.schema.yaml rename to x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.schema.yaml index cf88de73df1dbe..8794a94b0efc9d 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/find_knowledge_base_entries_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/find_knowledge_base_entries_route.schema.yaml @@ -39,7 +39,7 @@ paths: description: Sort order required: false schema: - $ref: '../common_attributes.schema.yaml#/components/schemas/SortOrder' + $ref: '../../common_attributes.schema.yaml#/components/schemas/SortOrder' - name: 'page' in: query description: Page number diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/mocks.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/mocks.ts new file mode 100644 index 00000000000000..a4828c2f24d913 --- /dev/null +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/entries/mocks.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IndexEntryCreateFields } from './common_attributes.gen'; + +export const indexEntryMock: IndexEntryCreateFields = { + type: 'index', + name: 'SpongBotSlackConnector', + namespace: 'default', + index: 'spongbot', + field: 'semantic_text', + description: "Use this index to search for the user's Slack messages.", + queryDescription: + 'The free text search that the user wants to perform over this dataset. So if asking "what are my slack messages from last week about failed tests", the query would be "A test has failed! failing test failed test".', + inputSchema: [ + { + fieldName: 'author', + fieldType: 'string', + description: + "The author of the message. So if asking for recent messages from Stan, you would provide 'Stan' as the author.", + }, + ], +}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/entries/use_knowledge_base_entries.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/entries/use_knowledge_base_entries.ts index aa1d72d755ffa4..43d70af7dd2558 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/entries/use_knowledge_base_entries.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/knowledge_base/entries/use_knowledge_base_entries.ts @@ -10,6 +10,7 @@ import { useQuery, useQueryClient } from '@tanstack/react-query'; import { API_VERSIONS, ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_FIND, + FindKnowledgeBaseEntriesRequestQuery, FindKnowledgeBaseEntriesResponse, } from '@kbn/elastic-assistant-common'; @@ -17,9 +18,22 @@ import { useCallback } from 'react'; export interface UseKnowledgeBaseEntriesParams { http: HttpSetup; + query: FindKnowledgeBaseEntriesRequestQuery; signal?: AbortSignal | undefined; } +const defaultQuery: FindKnowledgeBaseEntriesRequestQuery = { + page: 1, + per_page: 100, +}; + +export const KNOWLEDGE_BASE_ENTRY_QUERY_KEY = [ + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_FIND, + defaultQuery.page, + defaultQuery.per_page, + API_VERSIONS.internal.v1, +]; + /** * Hook for fetching Knowledge Base Entries. * @@ -27,24 +41,16 @@ export interface UseKnowledgeBaseEntriesParams { * * @param {Object} options - The options object. * @param {HttpSetup} options.http - HttpSetup - * @param {Function} [options.onFetch] - transformation function for kb entries fetch result + * @param {Function} [options.query] - Query params to include, like filters, pagination, etc. * @param {AbortSignal} [options.signal] - AbortSignal * - * @returns {useQuery} hook for fetching Knowledge Base Entries + * @returns hook for fetching Knowledge Base Entries */ -const query = { - page: 1, - perPage: 100, -}; - -export const KNOWLEDGE_BASE_ENTRY_QUERY_KEY = [ - ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL_FIND, - query.page, - query.perPage, - API_VERSIONS.internal.v1, -]; - -export const useKnowledgeBaseEntries = ({ http, signal }: UseKnowledgeBaseEntriesParams) => +export const useKnowledgeBaseEntries = ({ + http, + query = defaultQuery, + signal, +}: UseKnowledgeBaseEntriesParams) => useQuery( KNOWLEDGE_BASE_ENTRY_QUERY_KEY, async () => diff --git a/x-pack/packages/security-solution/features/src/product_features_keys.ts b/x-pack/packages/security-solution/features/src/product_features_keys.ts index 2bb8cdc0f1e9fe..5a1a9f93d351f6 100644 --- a/x-pack/packages/security-solution/features/src/product_features_keys.ts +++ b/x-pack/packages/security-solution/features/src/product_features_keys.ts @@ -34,6 +34,11 @@ export enum ProductFeatureSecurityKey { * Host Isolation Exceptions, Blocklist. */ endpointArtifactManagement = 'endpoint_artifact_management', + /** + * Enables managing host isolation exceptions for serverless PLIs + * Allows user to create, read, update HIEs Endpoint Complete PLI + */ + endpointHostIsolationExceptions = 'endpoint_host_isolation_exceptions', /** * Enables all of endpoint's supported response actions - like host isolation, file operations, * process operations, command execution, etc. @@ -121,7 +126,7 @@ export enum SecuritySubFeatureId { endpointList = 'endpointListSubFeature', endpointExceptions = 'endpointExceptionsSubFeature', trustedApplications = 'trustedApplicationsSubFeature', - hostIsolationExceptions = 'hostIsolationExceptionsSubFeature', + hostIsolationExceptionsBasic = 'hostIsolationExceptionsBasicSubFeature', blocklist = 'blocklistSubFeature', eventFilters = 'eventFiltersSubFeature', policyManagement = 'policyManagementSubFeature', diff --git a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts index fe0354b34a558d..d2efada7b3eacf 100644 --- a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts +++ b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts @@ -125,7 +125,7 @@ const trustedApplicationsSubFeature: SubFeatureConfig = { }, ], }; -const hostIsolationExceptionsSubFeature: SubFeatureConfig = { +const hostIsolationExceptionsBasicSubFeature: SubFeatureConfig = { requireAllSpaces: true, privilegesTooltip: i18n.translate( 'securitySolutionPackages.features.featureRegistry.subFeatures.hostIsolationExceptions.privilegesTooltip', @@ -664,7 +664,7 @@ export const getSecuritySubFeaturesMap = ({ [SecuritySubFeatureId.endpointList, endpointListSubFeature], [SecuritySubFeatureId.endpointExceptions, endpointExceptionsSubFeature], [SecuritySubFeatureId.trustedApplications, trustedApplicationsSubFeature], - [SecuritySubFeatureId.hostIsolationExceptions, hostIsolationExceptionsSubFeature], + [SecuritySubFeatureId.hostIsolationExceptionsBasic, hostIsolationExceptionsBasicSubFeature], [SecuritySubFeatureId.blocklist, blocklistSubFeature], [SecuritySubFeatureId.eventFilters, eventFiltersSubFeature], [SecuritySubFeatureId.policyManagement, policyManagementSubFeature], diff --git a/x-pack/packages/security-solution/features/src/security/product_feature_config.ts b/x-pack/packages/security-solution/features/src/security/product_feature_config.ts index 8445a00fecc6ce..2859f359f27c68 100644 --- a/x-pack/packages/security-solution/features/src/security/product_feature_config.ts +++ b/x-pack/packages/security-solution/features/src/security/product_feature_config.ts @@ -79,10 +79,16 @@ export const securityDefaultProductFeaturesConfig: DefaultSecurityProductFeature [ProductFeatureSecurityKey.endpointArtifactManagement]: { subFeatureIds: [ + SecuritySubFeatureId.hostIsolationExceptionsBasic, SecuritySubFeatureId.trustedApplications, SecuritySubFeatureId.blocklist, SecuritySubFeatureId.eventFilters, ], + }, + + // Endpoint Complete Tier: + // Allows access to create/update HIEs + [ProductFeatureSecurityKey.endpointHostIsolationExceptions]: { subFeaturesPrivileges: [ { id: 'host_isolation_exceptions_all', @@ -99,7 +105,6 @@ export const securityDefaultProductFeaturesConfig: DefaultSecurityProductFeature [ProductFeatureSecurityKey.endpointResponseActions]: { subFeatureIds: [ - SecuritySubFeatureId.hostIsolationExceptions, SecuritySubFeatureId.responseActionsHistory, SecuritySubFeatureId.hostIsolation, SecuritySubFeatureId.processOperations, @@ -117,10 +122,13 @@ export const securityDefaultProductFeaturesConfig: DefaultSecurityProductFeature }, // Product features without RBAC + // Endpoint/Osquery PLIs [ProductFeatureSecurityKey.osqueryAutomatedResponseActions]: {}, [ProductFeatureSecurityKey.endpointProtectionUpdates]: {}, [ProductFeatureSecurityKey.endpointAgentTamperProtection]: {}, [ProductFeatureSecurityKey.externalRuleActions]: {}, [ProductFeatureSecurityKey.cloudSecurityPosture]: {}, + + // Security PLIs [ProductFeatureSecurityKey.integrationAssistant]: {}, }; diff --git a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts index d775c38117e4c2..e450cdd1e6f94b 100644 --- a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts +++ b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts @@ -260,6 +260,9 @@ describe('mappingFromFieldMap', () => { }, }, }, + intended_timestamp: { + type: 'date', + }, rule: { properties: { category: { diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx index e74f3117d55f96..6b8de98369b146 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx @@ -64,7 +64,6 @@ export interface CreateMaintenanceWindowFormProps { onSuccess: () => void; initialValue?: FormProps; maintenanceWindowId?: string; - scopedQueryFeatureFlag?: boolean; } const useDefaultTimezone = () => { @@ -77,13 +76,7 @@ const useDefaultTimezone = () => { const TIMEZONE_OPTIONS = UI_TIMEZONE_OPTIONS.map((n) => ({ label: n })) ?? [{ label: 'UTC' }]; export const CreateMaintenanceWindowForm = React.memo((props) => { - const { - onCancel, - onSuccess, - initialValue, - maintenanceWindowId, - scopedQueryFeatureFlag = true, - } = props; + const { onCancel, onSuccess, initialValue, maintenanceWindowId } = props; const [defaultStartDateValue] = useState(moment().toISOString()); const [defaultEndDateValue] = useState(moment().add(30, 'minutes').toISOString()); @@ -125,7 +118,7 @@ export const CreateMaintenanceWindowForm = React.memo { - if (!isScopedQueryEnabled || !scopedQueryFeatureFlag) { + if (!isScopedQueryEnabled) { return null; } if (!query && !filters.length) { @@ -135,7 +128,7 @@ export const CreateMaintenanceWindowForm = React.memo>( async (formData, isValid) => { @@ -434,19 +427,17 @@ export const CreateMaintenanceWindowForm = React.memo )} - {scopedQueryFeatureFlag && ( - - - - {() => ( - - )} - - - )} + + + + {() => ( + + )} + + @@ -462,24 +453,22 @@ export const CreateMaintenanceWindowForm = React.memo - {scopedQueryFeatureFlag && ( - - - {() => ( - - )} - - - )} + + + {() => ( + + )} + + {isEditMode && ( diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/constants.ts b/x-pack/plugins/alerting/public/pages/maintenance_windows/constants.ts index 1819059bf5279a..22b992e3e63822 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/constants.ts +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/constants.ts @@ -123,5 +123,3 @@ export const STATUS_OPTIONS = [ { value: MaintenanceWindowStatus.Finished, name: i18n.TABLE_STATUS_FINISHED }, { value: MaintenanceWindowStatus.Archived, name: i18n.TABLE_STATUS_ARCHIVED }, ]; - -export const IS_SCOPED_QUERY_ENABLED = true; diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_create_page.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_create_page.tsx index d9dd4441d77962..80a5b1d0180876 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_create_page.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_create_page.tsx @@ -14,7 +14,6 @@ import * as i18n from './translations'; import { PageHeader } from './components/page_header'; import { CreateMaintenanceWindowForm } from './components/create_maintenance_windows_form'; import { MAINTENANCE_WINDOW_DEEP_LINK_IDS } from '../../../common'; -import { IS_SCOPED_QUERY_ENABLED } from './constants'; export const MaintenanceWindowsCreatePage = React.memo(() => { useBreadcrumbs(MAINTENANCE_WINDOW_DEEP_LINK_IDS.maintenanceWindowsCreate); @@ -31,7 +30,6 @@ export const MaintenanceWindowsCreatePage = React.memo(() => { ); diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_edit_page.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_edit_page.tsx index 4f828873cb7a0e..7f34a42349c999 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_edit_page.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/maintenance_window_edit_page.tsx @@ -17,7 +17,6 @@ import { CreateMaintenanceWindowForm } from './components/create_maintenance_win import { MAINTENANCE_WINDOW_DEEP_LINK_IDS } from '../../../common'; import { useGetMaintenanceWindow } from '../../hooks/use_get_maintenance_window'; import { CenterJustifiedSpinner } from './components/center_justified_spinner'; -import { IS_SCOPED_QUERY_ENABLED } from './constants'; export const MaintenanceWindowsEditPage = React.memo(() => { const { navigateToMaintenanceWindows } = useMaintenanceWindowsNavigation(); @@ -44,7 +43,6 @@ export const MaintenanceWindowsEditPage = React.memo(() => { maintenanceWindowId={maintenanceWindowId} onCancel={navigateToMaintenanceWindows} onSuccess={navigateToMaintenanceWindows} - scopedQueryFeatureFlag={IS_SCOPED_QUERY_ENABLED} /> ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts index 77ebddbf8c2dd9..bfee8a94d6dd6d 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.test.ts @@ -430,7 +430,7 @@ describe('bulkDisableRules', () => { }); }); - test('should thow an error if number of matched rules greater than 10,000', async () => { + test('should throw an error if number of matched rules greater than 10,000', async () => { unsecuredSavedObjectsClient.find.mockResolvedValue({ aggregations: { alertTypeId: { @@ -464,12 +464,81 @@ describe('bulkDisableRules', () => { ); }); - test('should skip rule if it is already disabled', async () => { + test('should return both rules if one is already disabled and one is enabled when bulk disable is based on ids', async () => { mockCreatePointInTimeFinderAsInternalUser({ saved_objects: [enabledRuleForBulkOps1, disabledRuleForBulkDisable2], }); unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ - saved_objects: [disabledRuleForBulkDisable1], + saved_objects: [disabledRuleForBulkDisable1, disabledRuleForBulkDisable2], + }); + + const result = await rulesClient.bulkDisableRules({ ids: ['id1', 'id2'] }); + + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledTimes(1); + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( + expect.arrayContaining([ + expect.objectContaining({ + id: 'id1', + attributes: expect.objectContaining({ + enabled: false, + }), + }), + expect.objectContaining({ + id: 'id2', + attributes: expect.objectContaining({ + enabled: false, + }), + }), + ]), + { overwrite: true } + ); + + expect(result.rules[0].id).toBe('id1'); + expect(result.rules[1].id).toBe('id2'); + }); + + test('should return rules in correct format', async () => { + mockCreatePointInTimeFinderAsInternalUser({ + saved_objects: [enabledRuleForBulkOps1, disabledRuleForBulkDisable2], + }); + unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ + saved_objects: [disabledRuleForBulkDisable1, disabledRuleForBulkDisable2], + }); + + const result = await rulesClient.bulkDisableRules({ ids: ['id1', 'id2'] }); + + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledTimes(1); + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( + expect.arrayContaining([ + expect.objectContaining({ + id: 'id1', + attributes: expect.objectContaining({ + enabled: false, + }), + }), + expect.objectContaining({ + id: 'id2', + attributes: expect.objectContaining({ + enabled: false, + }), + }), + ]), + { overwrite: true } + ); + + expect(result).toStrictEqual({ + errors: [], + rules: [returnedRuleForBulkDisable1, returnedRuleForBulkDisable2], + total: 2, + }); + }); + + test('should return both rules if one is already disabled and one is enabled when bulk disable is based on filter', async () => { + mockCreatePointInTimeFinderAsInternalUser({ + saved_objects: [enabledRuleForBulkOps1, disabledRuleForBulkDisable2], + }); + unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ + saved_objects: [disabledRuleForBulkDisable1, disabledRuleForBulkDisable2], }); const result = await rulesClient.bulkDisableRules({ filter: 'fake_filter' }); @@ -483,13 +552,19 @@ describe('bulkDisableRules', () => { enabled: false, }), }), + expect.objectContaining({ + id: 'id2', + attributes: expect.objectContaining({ + enabled: false, + }), + }), ]), { overwrite: true } ); expect(result).toStrictEqual({ errors: [], - rules: [returnedRuleForBulkDisable1], + rules: [returnedRuleForBulkDisable1, returnedRuleForBulkDisable2], total: 2, }); }); @@ -712,8 +787,14 @@ describe('bulkDisableRules', () => { saved_objects: [ enabledRuleForBulkOps1, enabledRuleForBulkOps2, - siemRuleForBulkOps1, - siemRuleForBulkOps2, + { + ...siemRuleForBulkOps1, + attributes: { ...siemRuleForBulkOps1.attributes, enabled: true }, + }, + { + ...siemRuleForBulkOps2, + attributes: { ...siemRuleForBulkOps2.attributes, enabled: true }, + }, ], }; }, @@ -723,8 +804,14 @@ describe('bulkDisableRules', () => { saved_objects: [ enabledRuleForBulkOps1, enabledRuleForBulkOps2, - siemRuleForBulkOps1, - siemRuleForBulkOps2, + { + ...siemRuleForBulkOps1, + attributes: { ...siemRuleForBulkOps1.attributes, enabled: true }, + }, + { + ...siemRuleForBulkOps2, + attributes: { ...siemRuleForBulkOps2.attributes, enabled: true }, + }, ], }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts index 72a06868e9a3da..78dc98cbbe84ae 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_disable/bulk_disable_rules.ts @@ -133,8 +133,6 @@ const bulkDisableRulesWithOCC = async ( untrack: boolean; } ) => { - const additionalFilter = nodeBuilder.is('alert.attributes.enabled', 'true'); - const rulesFinder = await withSpan( { name: 'encryptedSavedObjectsClient.createPointInTimeFinderDecryptedAsInternalUser', @@ -143,7 +141,7 @@ const bulkDisableRulesWithOCC = async ( () => context.encryptedSavedObjectsClient.createPointInTimeFinderDecryptedAsInternalUser( { - filter: filter ? nodeBuilder.and([filter, additionalFilter]) : additionalFilter, + filter, type: RULE_SAVED_OBJECT_TYPE, perPage: 100, ...(context.namespace ? { namespaces: [context.namespace] } : undefined), diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts index 9140fcd361769d..78151461285227 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.test.ts @@ -210,12 +210,12 @@ describe('bulkEnableRules', () => { }); }); - test('should enable two rule and return right actions', async () => { + test('should enable two rules and return right actions', async () => { unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ saved_objects: [enabledRuleForBulkOpsWithActions1, enabledRuleForBulkOpsWithActions2], }); - const result = await rulesClient.bulkDisableRules({ filter: 'fake_filter' }); + const result = await rulesClient.bulkEnableRules({ filter: 'fake_filter' }); expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledTimes(1); expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( @@ -223,13 +223,13 @@ describe('bulkEnableRules', () => { expect.objectContaining({ id: 'id1', attributes: expect.objectContaining({ - enabled: false, + enabled: true, }), }), expect.objectContaining({ id: 'id2', attributes: expect.objectContaining({ - enabled: false, + enabled: true, }), }), ]), @@ -239,6 +239,7 @@ describe('bulkEnableRules', () => { expect(result).toStrictEqual({ errors: [], rules: [returnedRuleForBulkEnableWithActions1, returnedRuleForBulkEnableWithActions2], + taskIdsFailedToBeEnabled: [], total: 2, }); }); @@ -432,15 +433,22 @@ describe('bulkEnableRules', () => { }); }); - test('should skip rule if it is already enabled', async () => { + test('should return both rules if one is already enabled and one is disabled when bulk enable is based on ids', async () => { mockCreatePointInTimeFinderAsInternalUser({ saved_objects: [disabledRule1, enabledRuleForBulkOps2], }); unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ - saved_objects: [enabledRuleForBulkOps1], + saved_objects: [enabledRuleForBulkOps1, enabledRuleForBulkOps2], }); - const result = await rulesClient.bulkEnableRules({ filter: 'fake_filter' }); + const result = await rulesClient.bulkEnableRules({ + ids: ['id1', 'id2'], + }); + + expect(taskManager.bulkSchedule).not.toHaveBeenCalled(); + + expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1); + expect(taskManager.bulkEnable).toHaveBeenCalledWith(['id1', 'id2']); expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledTimes(1); expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( @@ -457,7 +465,45 @@ describe('bulkEnableRules', () => { expect(result).toStrictEqual({ errors: [], - rules: [returnedRuleForBulkOps1], + rules: [returnedRuleForBulkOps1, returnedRuleForBulkOps2], + total: 2, + taskIdsFailedToBeEnabled: [], + }); + }); + + test('should return both rules if one is already enabled and one is disabled when bulk enable is based on filters', async () => { + mockCreatePointInTimeFinderAsInternalUser({ + saved_objects: [disabledRule1, enabledRuleForBulkOps2], + }); + unsecuredSavedObjectsClient.bulkCreate.mockResolvedValue({ + saved_objects: [enabledRuleForBulkOps1, enabledRuleForBulkOps2], + }); + + const result = await rulesClient.bulkEnableRules({ + filter: 'fake_filter', + }); + + expect(taskManager.bulkSchedule).not.toHaveBeenCalled(); + + expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1); + expect(taskManager.bulkEnable).toHaveBeenCalledWith(['id1', 'id2']); + + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledTimes(1); + expect(unsecuredSavedObjectsClient.bulkCreate).toHaveBeenCalledWith( + expect.arrayContaining([ + expect.objectContaining({ + id: 'id1', + attributes: expect.objectContaining({ + enabled: true, + }), + }), + ]), + { overwrite: true } + ); + + expect(result).toStrictEqual({ + errors: [], + rules: [returnedRuleForBulkOps1, returnedRuleForBulkOps2], total: 2, taskIdsFailedToBeEnabled: [], }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts index 159fc0df4ba178..0bf346006e4f8d 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_enable/bulk_enable_rules.ts @@ -153,8 +153,6 @@ const bulkEnableRulesWithOCC = async ( context: RulesClientContext, { filter }: { filter: KueryNode | null } ) => { - const additionalFilter = nodeBuilder.is('alert.attributes.enabled', 'false'); - const rulesFinder = await withSpan( { name: 'encryptedSavedObjectsClient.createPointInTimeFinderDecryptedAsInternalUser', @@ -163,7 +161,7 @@ const bulkEnableRulesWithOCC = async ( async () => await context.encryptedSavedObjectsClient.createPointInTimeFinderDecryptedAsInternalUser( { - filter: filter ? nodeBuilder.and([filter, additionalFilter]) : additionalFilter, + filter, type: RULE_SAVED_OBJECT_TYPE, perPage: 100, ...(context.namespace ? { namespaces: [context.namespace] } : undefined), @@ -187,9 +185,7 @@ const bulkEnableRulesWithOCC = async ( } await rulesFinder.close(); - const updatedInterval = rulesFinderRules - .filter((rule) => !rule.attributes.enabled) - .map((rule) => rule.attributes.schedule?.interval); + const updatedInterval = rulesFinderRules.map((rule) => rule.attributes.schedule?.interval); const validationPayload = await validateScheduleLimit({ context, diff --git a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap index c1a9a0a77a9f77..2ce82a1b3925fd 100644 --- a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap +++ b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap @@ -837,6 +837,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -1930,6 +1935,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -3023,6 +3033,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -4116,6 +4131,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -5209,6 +5229,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -6308,6 +6333,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -7401,6 +7431,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, @@ -8494,6 +8529,11 @@ Object { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts index 4739ec5a91d3b0..c6cec600090ba3 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts @@ -1947,28 +1947,6 @@ describe('Task Runner', () => { expect(mockUsageCounter.incrementCounter).not.toHaveBeenCalled(); }); - test('rescheduled the rule if the schedule has update during a task run', async () => { - const taskRunner = new TaskRunner({ - ruleType, - internalSavedObjectsRepository, - taskInstance: mockedTaskInstance, - context: taskRunnerFactoryInitializerParams, - inMemoryMetrics, - }); - expect(AlertingEventLogger).toHaveBeenCalled(); - rulesClient.getAlertFromRaw.mockReturnValue(mockedRuleTypeSavedObject as Rule); - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue({ - ...mockedRawRuleSO, - attributes: { ...mockedRawRuleSO.attributes, schedule: { interval: '30s' } }, - }); - - const runnerResult = await taskRunner.run(); - expect(runnerResult).toEqual( - generateRunnerResult({ state: true, interval: '30s', history: [true] }) - ); - expect(mockUsageCounter.incrementCounter).not.toHaveBeenCalled(); - }); - test('should set unexpected errors as framework-error', async () => { jest.spyOn(getExecutorServicesModule, 'getExecutorServices').mockImplementation(() => { throw new Error('test'); @@ -2874,7 +2852,7 @@ describe('Task Runner', () => { await taskRunner.run(); expect(internalSavedObjectsRepository.update).toHaveBeenCalledWith( ...generateSavedObjectParams({ - nextRun: '1970-01-01T00:00:50.000Z', + nextRun: '1970-01-01T00:00:10.000Z', }) ); }); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index c394d5b16f2965..409427bb34ca25 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -678,10 +678,7 @@ export class TaskRunner< await withAlertingSpan('alerting:run', () => this.runRule(validatedRuleData)) ); - // fetch the rule again to ensure we return the correct schedule as it may have - // changed during the task execution - const data = await getDecryptedRule(this.context, ruleId, spaceId); - schedule = asOk(data.rawRule.schedule); + schedule = asOk(validatedRuleData.rule.schedule); } catch (err) { stateWithMetrics = asErr(err); schedule = asErr(err); diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts index be3965fd1c26b7..adface75dbced5 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts @@ -123,10 +123,10 @@ const createElasticAssistantRequestContextMock = ( () => clients.elasticAssistant.getAIAssistantKnowledgeBaseDataClient ) as unknown as jest.MockInstance< Promise, - [], + [boolean | undefined], unknown > & - (() => Promise), + ((v2KnowledgeBaseEnabled?: boolean) => Promise), getCurrentUser: jest.fn(), getServerBasePath: jest.fn(), getSpaceId: jest.fn(), diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts index 97060a0f48aa61..304a5a54a737fb 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts @@ -51,7 +51,7 @@ export const createKnowledgeBaseEntry = async ({ }); } catch (err) { logger.error( - `Error creating Knowledge Base Entry: ${err} with kbResource: ${knowledgeBaseEntry.metadata.kbResource}` + `Error creating Knowledge Base Entry: ${err} with kbResource: ${knowledgeBaseEntry.name}` ); throw err; } @@ -61,22 +61,37 @@ export const transformToCreateSchema = ( createdAt: string, spaceId: string, user: AuthenticatedUser, - { metadata, text }: KnowledgeBaseEntryCreateProps + entry: KnowledgeBaseEntryCreateProps ): CreateKnowledgeBaseEntrySchema => { - return { + const base = { '@timestamp': createdAt, created_at: createdAt, created_by: user.profile_uid ?? 'unknown', updated_at: createdAt, updated_by: user.profile_uid ?? 'unknown', + namespace: spaceId, users: [ { id: user.profile_uid, name: user.username, }, ], - namespace: spaceId, - metadata, - text, }; + + if (entry.type === 'index') { + const { inputSchema, outputFields, queryDescription, ...restEntry } = entry; + return { + ...base, + ...restEntry, + query_description: queryDescription, + input_schema: + entry.inputSchema?.map((schema) => ({ + field_name: schema.fieldName, + field_type: schema.fieldType, + description: schema.description, + })) ?? undefined, + output_fields: outputFields ?? undefined, + }; + } + return { ...base, ...entry, vector: undefined }; }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts index 16b5b35a9b2bb9..0712664bbfeedb 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts @@ -88,3 +88,141 @@ export const knowledgeBaseFieldMap: FieldMap = { required: false, }, } as const; + +export const knowledgeBaseFieldMapV2: FieldMap = { + // Base fields + '@timestamp': { + type: 'date', + array: false, + required: false, + }, + id: { + type: 'keyword', + array: false, + required: true, + }, + created_at: { + type: 'date', + array: false, + required: false, + }, + created_by: { + type: 'keyword', + array: false, + required: false, + }, + updated_at: { + type: 'date', + array: false, + required: false, + }, + updated_by: { + type: 'keyword', + array: false, + required: false, + }, + users: { + type: 'nested', + array: true, + required: false, + }, + 'users.id': { + type: 'keyword', + array: false, + required: true, + }, + 'users.name': { + type: 'keyword', + array: false, + required: false, + }, + name: { + type: 'keyword', + array: false, + required: false, + }, + // Discriminator: 'document' | 'index' + type: { + type: 'keyword', + array: false, + required: true, + }, + // Document Entry fields + kb_resource: { + type: 'keyword', + array: false, + required: false, + }, + required: { + type: 'boolean', + array: false, + required: false, + }, + source: { + type: 'keyword', + array: false, + required: false, + }, + text: { + type: 'text', + array: false, + required: false, + }, + // Embeddings field + vector: { + type: 'object', + array: false, + required: false, + }, + 'vector.tokens': { + type: 'rank_features', + array: false, + required: false, + }, + // Index Entry fields + index: { + type: 'keyword', + array: false, + required: false, + }, + field: { + type: 'keyword', + array: false, + required: false, + }, + description: { + type: 'text', + array: false, + required: false, + }, + query_description: { + type: 'text', + array: false, + required: false, + }, + input_schema: { + type: 'nested', + array: true, + required: false, + }, + 'input_schema.field_name': { + type: 'keyword', + array: false, + required: true, + }, + 'input_schema.field_type': { + type: 'keyword', + array: false, + required: true, + }, + 'input_schema.description': { + type: 'text', + array: false, + required: true, + }, + output_fields: { + type: 'keyword', + array: true, + required: false, + }, +} as const; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts index 839ac3e559ba12..f0d87b8b14cffc 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts @@ -5,9 +5,13 @@ * 2.0. */ +import { z } from '@kbn/zod'; +import { DynamicStructuredTool } from '@langchain/core/tools'; import { errors } from '@elastic/elasticsearch'; -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { QueryDslQueryContainer, SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import { AuthenticatedUser } from '@kbn/core-security-common'; +import { IndexEntry } from '@kbn/elastic-assistant-common'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; export const isModelAlreadyExistsError = (error: Error) => { return ( @@ -18,7 +22,7 @@ export const isModelAlreadyExistsError = (error: Error) => { }; /** - * Returns an Elasticsearch query DSL that performs a vector search against the Knowledge Base for the given query/user/filter. + * Returns an Elasticsearch query DSL that performs a vector search against the Knowledge Base for the given query/user/filter. Searches only for DocumentEntries, not IndexEntries as they have no content. * * @param filter - Optional filter to apply to the search * @param kbResource - Specific resource tag to filter for, e.g. 'esql' or 'user' @@ -26,6 +30,7 @@ export const isModelAlreadyExistsError = (error: Error) => { * @param query - The search query provided by the user * @param required - Whether to only include required entries * @param user - The authenticated user + * @param v2KnowledgeBaseEnabled whether the new v2 KB is enabled * @returns */ export const getKBVectorSearchQuery = ({ @@ -35,6 +40,7 @@ export const getKBVectorSearchQuery = ({ query, required, user, + v2KnowledgeBaseEnabled = false, }: { filter?: QueryDslQueryContainer | undefined; kbResource?: string | undefined; @@ -42,12 +48,15 @@ export const getKBVectorSearchQuery = ({ query: string; required?: boolean | undefined; user: AuthenticatedUser; + v2KnowledgeBaseEnabled: boolean; }): QueryDslQueryContainer => { + const kbResourceKey = v2KnowledgeBaseEnabled ? 'kb_resource' : 'metadata.kbResource'; + const requiredKey = v2KnowledgeBaseEnabled ? 'required' : 'metadata.required'; const resourceFilter = kbResource ? [ { term: { - 'metadata.kbResource': kbResource, + [kbResourceKey]: kbResource, }, }, ] @@ -56,7 +65,7 @@ export const getKBVectorSearchQuery = ({ ? [ { term: { - 'metadata.required': required, + [requiredKey]: required, }, }, ] @@ -100,3 +109,110 @@ export const getKBVectorSearchQuery = ({ }, }; }; + +/** + * Returns a StructuredTool for a given IndexEntry + */ +export const getStructuredToolForIndexEntry = ({ + indexEntry, + esClient, + logger, + elserId, +}: { + indexEntry: IndexEntry; + esClient: ElasticsearchClient; + logger: Logger; + elserId: string; +}): DynamicStructuredTool => { + const inputSchema = indexEntry.inputSchema?.reduce((prev, input) => { + const fieldType = + input.fieldType === 'string' + ? z.string() + : input.fieldType === 'number' + ? z.number() + : input.fieldType === 'boolean' + ? z.boolean() + : z.any(); + return { ...prev, [input.fieldName]: fieldType.describe(input.description) }; + }, {}); + + return new DynamicStructuredTool({ + name: indexEntry.name.replaceAll(' ', ''), // Tool names cannot contain spaces, further sanitization possibly needed + description: indexEntry.description, + schema: z.object({ + query: z.string().describe(indexEntry.queryDescription), + ...inputSchema, + }), + func: async (input, _, cbManager) => { + logger.debug( + () => `Generated ${indexEntry.name} Tool:input\n ${JSON.stringify(input, null, 2)}` + ); + + // Generate filters for inputSchema fields + const filter = + indexEntry.inputSchema?.reduce((prev, i) => { + return [ + ...prev, + // @ts-expect-error Possible to override types with dynamic input schema? + { term: { [`${i.fieldName}`]: input?.[i.fieldName] } }, + ]; + }, [] as Array<{ term: { [key: string]: string } }>) ?? []; + + const params: SearchRequest = { + index: indexEntry.index, + size: 10, + retriever: { + standard: { + query: { + nested: { + path: 'semantic_text.inference.chunks', + query: { + sparse_vector: { + inference_id: elserId, + field: `${indexEntry.field}.inference.chunks.embeddings`, + query: input.query, + }, + }, + inner_hits: { + size: 2, + name: `${indexEntry.name}.${indexEntry.field}`, + _source: [`${indexEntry.field}.inference.chunks.text`], + }, + }, + }, + filter, + }, + }, + }; + + try { + const result = await esClient.search(params); + + const kbDocs = result.hits.hits.map((hit) => { + if (indexEntry.outputFields && indexEntry.outputFields.length > 0) { + return indexEntry.outputFields.reduce((prev, field) => { + // @ts-expect-error + return { ...prev, [field]: hit._source[field] }; + }, {}); + } + return { + text: (hit._source as { text: string }).text, + }; + }); + + logger.debug(() => `Similarity Search Params:\n ${JSON.stringify(params)}`); + logger.debug(() => `Similarity Search Results:\n ${JSON.stringify(result)}`); + logger.debug(() => `Similarity Text Extract Results:\n ${JSON.stringify(kbDocs)}`); + + return `###\nBelow are all relevant documents in JSON format:\n${JSON.stringify( + kbDocs + )}\n###`; + } catch (e) { + logger.error(`Error performing IndexEntry KB Similarity Search: ${e.message}`); + return `I'm sorry, but I was unable to find any information in the knowledge base. Perhaps this error would be useful to deliver to the user. Be sure to print it below your response and in a codeblock so it is rendered nicely: ${e.message}`; + } + }, + tags: ['knowledge-base'], + // TODO: Remove after ZodAny is fixed https://github.com/langchain-ai/langchainjs/blob/main/langchain-core/src/tools.ts + }) as unknown as DynamicStructuredTool; +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts index 5fff839b497bba..38852dc8a91fc8 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts @@ -14,21 +14,30 @@ import type { KibanaRequest } from '@kbn/core-http-server'; import { Document } from 'langchain/document'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { + DocumentEntryType, + IndexEntry, KnowledgeBaseEntryCreateProps, KnowledgeBaseEntryResponse, Metadata, } from '@kbn/elastic-assistant-common'; import pRetry from 'p-retry'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { StructuredTool } from '@langchain/core/tools'; +import { ElasticsearchClient } from '@kbn/core/server'; import { AIAssistantDataClient, AIAssistantDataClientParams } from '..'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { loadESQL } from '../../lib/langchain/content_loaders/esql_loader'; -import { GetElser } from '../../types'; +import { AssistantToolParams, GetElser } from '../../types'; import { createKnowledgeBaseEntry, transformToCreateSchema } from './create_knowledge_base_entry'; -import { EsKnowledgeBaseEntrySchema } from './types'; +import { EsDocumentEntry, EsIndexEntry, EsKnowledgeBaseEntrySchema } from './types'; import { transformESSearchToKnowledgeBaseEntry } from './transforms'; import { ESQL_DOCS_LOADED_QUERY } from '../../routes/knowledge_base/constants'; -import { getKBVectorSearchQuery, isModelAlreadyExistsError } from './helpers'; +import { + getKBVectorSearchQuery, + getStructuredToolForIndexEntry, + isModelAlreadyExistsError, +} from './helpers'; +import { getKBUserFilter } from '../../routes/knowledge_base/entries/utils'; interface KnowledgeBaseDataClientParams extends AIAssistantDataClientParams { ml: MlPluginSetup; @@ -36,6 +45,7 @@ interface KnowledgeBaseDataClientParams extends AIAssistantDataClientParams { getIsKBSetupInProgress: () => boolean; ingestPipelineResourceName: string; setIsKBSetupInProgress: (isInProgress: boolean) => void; + v2KnowledgeBaseEnabled: boolean; } export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { constructor(public readonly options: KnowledgeBaseDataClientParams) { @@ -46,6 +56,10 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { return this.options.getIsKBSetupInProgress(); } + public get isV2KnowledgeBaseEnabled() { + return this.options.v2KnowledgeBaseEnabled; + } + /** * Returns whether setup of the Knowledge Base can be performed (essentially an ML features check) * @@ -254,18 +268,30 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' ); } - // @ts-ignore const { errors, docs_created: docsCreated } = await writer.bulk({ - documentsToCreate: documents.map((doc) => - transformToCreateSchema(changedAt, this.spaceId, authenticatedUser, { - metadata: { - kbResource: doc.metadata.kbResource ?? 'unknown', - required: doc.metadata.required ?? false, - source: doc.metadata.source ?? 'unknown', - }, + documentsToCreate: documents.map((doc) => { + // v1 schema has metadata nested in a `metadata` object, and kbResource vs kb_resource + const body = this.options.v2KnowledgeBaseEnabled + ? { + kb_resource: doc.metadata.kbResource ?? 'unknown', + required: doc.metadata.required ?? false, + source: doc.metadata.source ?? 'unknown', + } + : { + metadata: { + kbResource: doc.metadata.kbResource ?? 'unknown', + required: doc.metadata.required ?? false, + source: doc.metadata.source ?? 'unknown', + }, + }; + // @ts-ignore Transform only explicitly supports v2 schema, but technically still supports v1 + return transformToCreateSchema(changedAt, this.spaceId, authenticatedUser, { + type: DocumentEntryType.value, + name: 'unknown', text: doc.pageContent, - }) - ), + ...body, + }); + }), authenticatedUser, }); const created = @@ -285,7 +311,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { /** * Performs similarity search to retrieve LangChain Documents from the knowledge base */ - public getKnowledgeBaseDocuments = async ({ + public getKnowledgeBaseDocumentEntries = async ({ filter, kbResource, query, @@ -313,22 +339,30 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { query, required, user, + v2KnowledgeBaseEnabled: this.options.v2KnowledgeBaseEnabled, }); try { - const result = await esClient.search({ + const result = await esClient.search({ index: this.indexTemplateAndPattern.alias, size: 10, query: vectorSearchQuery, }); - const results = result.hits.hits.map( - (hit) => - new Document({ - pageContent: hit?._source?.text ?? '', - metadata: hit?._source?.metadata ?? {}, - }) - ); + const results = result.hits.hits.map((hit) => { + const metadata = this.options.v2KnowledgeBaseEnabled + ? { + source: hit?._source?.source, + required: hit?._source?.required, + kbResource: hit?._source?.kb_resource, + } + : // @ts-ignore v1 schema has metadata nested in a `metadata` object and kbResource vs kb_resource + hit?._source?.metadata ?? {}; + return new Document({ + pageContent: hit?._source?.text ?? '', + metadata, + }); + }); this.options.logger.debug( () => @@ -364,7 +398,6 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' ); } - this.options.logger.debug( () => `Creating Knowledge Base Entry:\n ${JSON.stringify(knowledgeBaseEntry, null, 2)}` ); @@ -379,4 +412,58 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { knowledgeBaseEntry, }); }; + + /** + * Returns AssistantTools for any 'relevant' KB IndexEntries that exist in the knowledge base + */ + public getAssistantTools = async ({ + assistantToolParams, + esClient, + }: { + assistantToolParams: AssistantToolParams; + esClient: ElasticsearchClient; + }): Promise => { + const user = this.options.currentUser; + if (user == null) { + throw new Error( + 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' + ); + } + + try { + const elserId = await this.options.getElserId(); + const userFilter = getKBUserFilter(user); + const results = await this.findDocuments({ + // Note: This is a magic number to set some upward bound as to not blow the context with too + // many registered tools. As discussed in review, this will initially be mitigated by caps on + // the IndexEntries field lengths, context trimming at the graph layer (before compilation), + // and eventually some sort of tool discovery sub-graph or generic retriever to scale tool usage. + perPage: 23, + page: 1, + sortField: 'created_at', + sortOrder: 'asc', + filter: `${userFilter}${` AND type:index`}`, // TODO: Support global tools (no user filter), and filter by space as well + }); + this.options.logger.debug( + `kbDataClient.getAssistantTools() - results:\n${JSON.stringify(results, null, 2)}` + ); + + if (results) { + const entries = transformESSearchToKnowledgeBaseEntry(results.data) as IndexEntry[]; + return entries.map((indexEntry) => { + return getStructuredToolForIndexEntry({ + indexEntry, + esClient, + logger: this.options.logger, + elserId, + }); + }); + } + } catch (e) { + this.options.logger.error(`kbDataClient.getAssistantTools() - Failed to fetch IndexEntries`); + return []; + } + + return []; + }; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts index 170fa0342f9d9e..e11840b94e6602 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/ingest_pipeline.ts @@ -5,31 +5,21 @@ * 2.0. */ -import { IngestPutPipelineRequest } from '@elastic/elasticsearch/lib/api/types'; - -export const knowledgeBaseIngestPipeline = ({ - id, - modelId, -}: { - id: string; - modelId: string; -}): IngestPutPipelineRequest => ({ +// TODO: Ensure old pipeline is updated/replaced +export const knowledgeBaseIngestPipeline = ({ id, modelId }: { id: string; modelId: string }) => ({ id, description: 'Embedding pipeline for Elastic AI Assistant ELSER Knowledge Base', processors: [ { inference: { + if: 'ctx?.text != null', model_id: modelId, - target_field: 'vector', - field_map: { - text: 'text_field', - }, - inference_config: { - // @ts-expect-error - text_expansion: { - results_field: 'tokens', + input_output: [ + { + input_field: 'text', + output_field: 'vector.tokens', }, - }, + ], }, }, ], diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts index 475f9f880ee138..16ef4ffb0595ed 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/transforms.ts @@ -6,8 +6,14 @@ */ import { estypes } from '@elastic/elasticsearch'; -import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; -import { EsKnowledgeBaseEntrySchema } from './types'; +import { + DocumentEntry, + DocumentEntryType, + IndexEntry, + IndexEntryType, + KnowledgeBaseEntryResponse, +} from '@kbn/elastic-assistant-common'; +import { EsKnowledgeBaseEntrySchema, LegacyEsKnowledgeBaseEntrySchema } from './types'; export const transformESSearchToKnowledgeBaseEntry = ( response: estypes.SearchResponse @@ -17,41 +23,11 @@ export const transformESSearchToKnowledgeBaseEntry = ( .map((hit) => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const kbEntrySchema = hit._source!; - const kbEntry: KnowledgeBaseEntryResponse = { - timestamp: kbEntrySchema['@timestamp'], + return { + ...transformEsSchemaToEntry(kbEntrySchema), // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: hit._id!, - createdAt: kbEntrySchema.created_at, - createdBy: kbEntrySchema.created_by, - updatedAt: kbEntrySchema.updated_at, - updatedBy: kbEntrySchema.updated_by, - users: - kbEntrySchema.users?.map((user) => ({ - id: user.id, - name: user.name, - })) ?? [], - ...(kbEntrySchema.metadata - ? { - metadata: { - kbResource: kbEntrySchema.metadata.kbResource, - source: kbEntrySchema.metadata.source, - required: kbEntrySchema.metadata.required, - }, - } - : {}), - namespace: kbEntrySchema.namespace, - text: kbEntrySchema.text, - ...(kbEntrySchema.vector - ? { - vector: { - modelId: kbEntrySchema.vector.model_id, - tokens: kbEntrySchema.vector.tokens, - }, - } - : {}), }; - - return kbEntry; }); }; @@ -59,39 +35,108 @@ export const transformESToKnowledgeBase = ( response: EsKnowledgeBaseEntrySchema[] ): KnowledgeBaseEntryResponse[] => { return response.map((kbEntrySchema) => { - const kbEntry: KnowledgeBaseEntryResponse = { - timestamp: kbEntrySchema['@timestamp'], - id: kbEntrySchema.id, - createdAt: kbEntrySchema.created_at, - createdBy: kbEntrySchema.created_by, - updatedAt: kbEntrySchema.updated_at, - updatedBy: kbEntrySchema.updated_by, + return transformEsSchemaToEntry(kbEntrySchema); + }); +}; + +const transformEsSchemaToEntry = ( + esKbEntry: EsKnowledgeBaseEntrySchema +): DocumentEntry | IndexEntry => { + if (esKbEntry.type === DocumentEntryType.value) { + const documentEntry: DocumentEntry = { + id: esKbEntry.id, + createdAt: esKbEntry.created_at, + createdBy: esKbEntry.created_by, + updatedAt: esKbEntry.updated_at, + updatedBy: esKbEntry.updated_by, users: - kbEntrySchema.users?.map((user) => ({ + esKbEntry.users?.map((user) => ({ id: user.id, name: user.name, })) ?? [], - ...(kbEntrySchema.metadata - ? { - metadata: { - kbResource: kbEntrySchema.metadata.kbResource, - source: kbEntrySchema.metadata.source, - required: kbEntrySchema.metadata.required, - }, - } - : {}), - namespace: kbEntrySchema.namespace, - text: kbEntrySchema.text, - ...(kbEntrySchema.vector + + name: esKbEntry.name, + namespace: esKbEntry.namespace, + type: esKbEntry.type, + kbResource: esKbEntry.kb_resource, + source: esKbEntry.source, + required: esKbEntry.required, + text: esKbEntry.text, + ...(esKbEntry.vector ? { vector: { - modelId: kbEntrySchema.vector.model_id, - tokens: kbEntrySchema.vector.tokens, + modelId: esKbEntry.vector.model_id, + tokens: esKbEntry.vector.tokens, }, } : {}), }; + return documentEntry; + } else if (esKbEntry.type === IndexEntryType.value) { + const indexEntry: IndexEntry = { + id: esKbEntry.id, + createdAt: esKbEntry.created_at, + createdBy: esKbEntry.created_by, + updatedAt: esKbEntry.updated_at, + updatedBy: esKbEntry.updated_by, + users: + esKbEntry.users?.map((user) => ({ + id: user.id, + name: user.name, + })) ?? [], + name: esKbEntry.name, + namespace: esKbEntry.namespace, + // Document Entry Fields + type: esKbEntry.type, + index: esKbEntry.index, + field: esKbEntry.field, + description: esKbEntry.description, + queryDescription: esKbEntry.query_description, + inputSchema: + esKbEntry.input_schema?.map((schema) => ({ + fieldName: schema.field_name, + fieldType: schema.field_type, + description: schema.description, + })) ?? [], + outputFields: esKbEntry.output_fields ?? [], + }; + return indexEntry; + } - return kbEntry; - }); + // Parse Legacy KB Entry as a DocumentEntry + return getDocumentEntryFromLegacyKbEntry(esKbEntry); +}; + +const getDocumentEntryFromLegacyKbEntry = ( + legacyEsKbDoc: LegacyEsKnowledgeBaseEntrySchema +): DocumentEntry => { + const documentEntry: DocumentEntry = { + id: legacyEsKbDoc.id, + createdAt: legacyEsKbDoc.created_at, + createdBy: legacyEsKbDoc.created_by, + updatedAt: legacyEsKbDoc.updated_at, + updatedBy: legacyEsKbDoc.updated_by, + users: + legacyEsKbDoc.users?.map((user) => ({ + id: user.id, + name: user.name, + })) ?? [], + + name: legacyEsKbDoc.text, + namespace: legacyEsKbDoc.namespace, + type: DocumentEntryType.value, + kbResource: legacyEsKbDoc.metadata?.kbResource ?? 'unknown', + source: legacyEsKbDoc.metadata?.source ?? 'unknown', + required: legacyEsKbDoc.metadata?.required ?? false, + text: legacyEsKbDoc.text, + ...(legacyEsKbDoc.vector + ? { + vector: { + modelId: legacyEsKbDoc.vector.model_id, + tokens: legacyEsKbDoc.vector.tokens, + }, + } + : {}), + }; + return documentEntry; }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts index b3180d80223cea..ecf9260e999d27 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/types.ts @@ -5,7 +5,61 @@ * 2.0. */ -export interface EsKnowledgeBaseEntrySchema { +import type { DocumentEntryType, IndexEntryType } from '@kbn/elastic-assistant-common'; + +export type EsKnowledgeBaseEntrySchema = EsDocumentEntry | EsIndexEntry; + +export interface EsDocumentEntry { + '@timestamp': string; + id: string; + created_at: string; + created_by: string; + updated_at: string; + updated_by: string; + users?: Array<{ + id?: string; + name?: string; + }>; + name: string; + namespace: string; + type: DocumentEntryType; + kb_resource: string; + required: boolean; + source: string; + text: string; + vector?: { + tokens: Record; + model_id: string; + }; +} + +export interface EsIndexEntry { + '@timestamp': string; + id: string; + created_at: string; + created_by: string; + updated_at: string; + updated_by: string; + users?: Array<{ + id?: string; + name?: string; + }>; + name: string; + namespace: string; + type: IndexEntryType; + index: string; + field: string; + description: string; + query_description: string; + input_schema?: Array<{ + field_name: string; + field_type: string; + description: string; + }>; + output_fields?: string[]; +} + +export interface LegacyEsKnowledgeBaseEntrySchema { '@timestamp': string; id: string; created_at: string; @@ -40,15 +94,27 @@ export interface CreateKnowledgeBaseEntrySchema { id?: string; name?: string; }>; - metadata?: { - kbResource: string; - source: string; - required: boolean; - }; + name: string; namespace: string; - text: string; + type: string; + // Document Entry Fields + kb_resource?: string; + required?: boolean; + source?: string; + text?: string; vector?: { tokens: Record; model_id: string; }; + // Index Entry Fields + index?: string; + field?: string; + description?: string; + query_description?: string; + input_schema?: Array<{ + field_name: string; + field_type: string; + description: string; + }>; + output_fields?: string[]; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts index 3191e6844ea137..07da9303207123 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts @@ -81,6 +81,7 @@ export const createPipeline = async ({ return response.acknowledged; } catch (e) { + // TODO: log error or just use semantic_text already return false; } }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 6fff5f767154b8..ebdc5accec4630 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -76,6 +76,8 @@ export class AIAssistantService { private resourceInitializationHelper: ResourceInstallationHelper; private initPromise: Promise; private isKBSetupInProgress: boolean = false; + // Temporary 'feature flag' to determine if we should initialize the new kb mappings, toggled when accessing kbDataClient + private v2KnowledgeBaseEnabled: boolean = false; constructor(private readonly options: AIAssistantServiceOpts) { this.initialized = false; @@ -88,7 +90,7 @@ export class AIAssistantService { this.knowledgeBaseDataStream = this.createDataStream({ resource: 'knowledgeBase', kibanaVersion: options.kibanaVersion, - fieldMap: knowledgeBaseFieldMap, + fieldMap: knowledgeBaseFieldMap, // TODO: use v2 if FF is enabled }); this.promptsDataStream = this.createDataStream({ resource: 'prompts', @@ -182,7 +184,7 @@ export class AIAssistantService { esClient, id: this.resourceNames.pipelines.knowledgeBase, }); - if (!pipelineCreated) { + if (!pipelineCreated || this.v2KnowledgeBaseEnabled) { this.options.logger.debug( `Installing ingest pipeline - ${this.resourceNames.pipelines.knowledgeBase}` ); @@ -327,8 +329,15 @@ export class AIAssistantService { } public async createAIAssistantKnowledgeBaseDataClient( - opts: CreateAIAssistantClientParams + opts: CreateAIAssistantClientParams & { v2KnowledgeBaseEnabled: boolean } ): Promise { + // Note: Due to plugin lifecycle and feature flag registration timing, we need to pass in the feature flag here + // Remove this param and initialization when the `assistantKnowledgeBaseByDefault` feature flag is removed + if (opts.v2KnowledgeBaseEnabled) { + this.v2KnowledgeBaseEnabled = true; + await this.initializeResources(); + } + const res = await this.checkResourcesInstallation(opts); if (res === null) { @@ -347,6 +356,7 @@ export class AIAssistantService { ml: this.options.ml, setIsKBSetupInProgress: this.setIsKBSetupInProgress.bind(this), spaceId: opts.spaceId, + v2KnowledgeBaseEnabled: opts.v2KnowledgeBaseEnabled, }); } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.test.ts index b77e20a1030ff4..17938cbd4eb483 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.test.ts @@ -38,7 +38,7 @@ describe('addRequiredKbResourceMetadata', () => { }); }); - test('it adds the expected `required` metadata to each document', () => { + test('it adds the expected `required` metadata to each document, defaulting to true', () => { const transformedDocs = addRequiredKbResourceMetadata({ docs: mockExampleQueryDocsFromDirectoryLoader, kbResource, @@ -48,4 +48,18 @@ describe('addRequiredKbResourceMetadata', () => { expect(doc.metadata).toHaveProperty('required', true); }); }); + + test('it sets the `required` metadata to the provided value', () => { + const required = false; + + const transformedDocs = addRequiredKbResourceMetadata({ + docs: mockExampleQueryDocsFromDirectoryLoader, + kbResource, + required, + }); + + transformedDocs.forEach((doc) => { + expect(doc.metadata).toHaveProperty('required', required); + }); + }); }); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.ts index 43804cc344f5b0..b85904b517e278 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/add_required_kb_resource_metadata.ts @@ -22,15 +22,17 @@ import { Document } from 'langchain/document'; export const addRequiredKbResourceMetadata = ({ docs, kbResource, + required = true, }: { docs: Array>>; kbResource: string; + required?: boolean; }): Array>> => docs.map((doc) => ({ ...doc, metadata: { ...doc.metadata, kbResource, - required: true, // indicates that the document is required for searches on the kbResource topic + required, // indicates that the document is required for searches on the kbResource topic }, })); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.test.ts index 319e1ea3eedf80..56ae404e4a2dbc 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.test.ts @@ -56,8 +56,16 @@ describe('loadESQL', () => { it('loads ES|QL docs, language files, and example queries into the Knowledge Base', async () => { expect(esStore.addDocuments).toHaveBeenCalledWith([ - ...mockEsqlDocsFromDirectoryLoader, - ...mockEsqlLanguageDocsFromDirectoryLoader, + ...addRequiredKbResourceMetadata({ + docs: mockEsqlDocsFromDirectoryLoader, + kbResource: ESQL_RESOURCE, + required: false, + }), + ...addRequiredKbResourceMetadata({ + docs: mockEsqlLanguageDocsFromDirectoryLoader, + kbResource: ESQL_RESOURCE, + required: false, + }), ...addRequiredKbResourceMetadata({ docs: mockExampleQueryDocsFromDirectoryLoader, kbResource: ESQL_RESOURCE, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.ts index 3d4666cdf7540c..72882f771c5a1e 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/content_loaders/esql_loader.ts @@ -59,13 +59,26 @@ export const loadESQL = async (esStore: ElasticsearchStore, logger: Logger): Pro kbResource: ESQL_RESOURCE, }) as Array>; + // And make sure remaining docs have `kbResource:esql` + const docsWithMetadata = addRequiredKbResourceMetadata({ + docs, + kbResource: ESQL_RESOURCE, + required: false, + }) as Array>; + + const languageDocsWithMetadata = addRequiredKbResourceMetadata({ + docs: languageDocs, + kbResource: ESQL_RESOURCE, + required: false, + }) as Array>; + logger.info( - `Loading ${docs.length} ES|QL docs, ${languageDocs.length} language docs, and ${requiredExampleQueries.length} example queries into the Knowledge Base` + `Loading ${docsWithMetadata.length} ES|QL docs, ${languageDocsWithMetadata.length} language docs, and ${requiredExampleQueries.length} example queries into the Knowledge Base` ); const response = await esStore.addDocuments([ - ...docs, - ...languageDocs, + ...docsWithMetadata, + ...languageDocsWithMetadata, ...requiredExampleQueries, ]); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index f17accfc85d08e..d0fe4f5097dfe9 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -126,6 +126,17 @@ export const callAssistantGraph: AgentExecutor = async ({ (tool) => tool.getTool({ ...assistantToolParams, llm: createLlmInstance() }) ?? [] ); + // If KB enabled, fetch for any KB IndexEntries and generate a tool for each + if (isEnabledKnowledgeBase && dataClients?.kbDataClient?.isV2KnowledgeBaseEnabled) { + const kbTools = await dataClients?.kbDataClient?.getAssistantTools({ + assistantToolParams, + esClient, + }); + if (kbTools) { + tools.push(...kbTools); + } + } + const agentRunnable = isOpenAI ? await createOpenAIFunctionsAgent({ llm: createLlmInstance(), diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index 574ba5290ce33b..6cc8853d119dd6 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -33,7 +33,7 @@ import { RetrievalQAChain } from 'langchain/chains'; import { buildResponse } from '../../lib/build_response'; import { AssistantDataClients } from '../../lib/langchain/executors/types'; import { AssistantToolParams, ElasticAssistantRequestHandlerContext, GetElser } from '../../types'; -import { DEFAULT_PLUGIN_NAME, performChecks } from '../helpers'; +import { DEFAULT_PLUGIN_NAME, isV2KnowledgeBaseEnabled, performChecks } from '../helpers'; import { ESQL_RESOURCE } from '../knowledge_base/constants'; import { fetchLangSmithDataset } from './utils'; import { transformESSearchToAnonymizationFields } from '../../ai_assistant_data_clients/anonymization_fields/helpers'; @@ -90,6 +90,7 @@ export const postEvaluateRoute = ( const logger = assistantContext.logger.get('evaluate'); const telemetry = assistantContext.telemetry; const abortSignal = getRequestAbortedSignal(request.events.aborted$); + const v2KnowledgeBaseEnabled = isV2KnowledgeBaseEnabled({ context: ctx, request }); // Perform license, authenticated user and evaluation FF checks const checkResponse = performChecks({ @@ -155,7 +156,9 @@ export const postEvaluateRoute = ( const conversationsDataClient = (await assistantContext.getAIAssistantConversationsDataClient()) ?? undefined; const kbDataClient = - (await assistantContext.getAIAssistantKnowledgeBaseDataClient()) ?? undefined; + (await assistantContext.getAIAssistantKnowledgeBaseDataClient( + v2KnowledgeBaseEnabled + )) ?? undefined; const dataClients: AssistantDataClients = { anonymizationFieldsDataClient, conversationsDataClient, diff --git a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts index 422b33b560f8c8..fba788df5cc2ef 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts @@ -330,6 +330,8 @@ export const langChainExecute = async ({ const assistantTools = assistantContext .getRegisteredTools(pluginName) .filter((x) => x.id !== 'attack-discovery'); // We don't (yet) support asking the assistant for NEW attack discoveries from a conversation + const v2KnowledgeBaseEnabled = + assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; // get a scoped esClient for assistant memory const esClient = context.core.elasticsearch.client.asCurrentUser; @@ -345,7 +347,8 @@ export const langChainExecute = async ({ // Create an ElasticsearchStore for KB interactions const kbDataClient = - (await assistantContext.getAIAssistantKnowledgeBaseDataClient()) ?? undefined; + (await assistantContext.getAIAssistantKnowledgeBaseDataClient(v2KnowledgeBaseEnabled)) ?? + undefined; const bedrockChatEnabled = assistantContext.getRegisteredFeatures(pluginName).assistantBedrockChat; const esStore = new ElasticsearchStore( @@ -587,3 +590,26 @@ export const performChecks = ({ return undefined; }; + +/** + * Returns whether the v2 KB is enabled + * + * @param context - Route context + * @param request - Route KibanaRequest + + */ +export const isV2KnowledgeBaseEnabled = ({ + context, + request, +}: { + context: AwaitedProperties< + Pick + >; + request: KibanaRequest; +}): boolean => { + const pluginName = getPluginNameFromRequest({ + request, + defaultPluginName: DEFAULT_PLUGIN_NAME, + }); + return context.elasticAssistant.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; +}; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts index 4352c866a19c1d..427bca2da3dcc1 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/delete_knowledge_base.ts @@ -22,6 +22,7 @@ import { ElasticAssistantRequestHandlerContext } from '../../types'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_RESOURCE } from './constants'; import { getKbResource } from './get_kb_resource'; +import { isV2KnowledgeBaseEnabled } from '../helpers'; /** * Delete Knowledge Base index, pipeline, and resources (collection of documents) @@ -49,16 +50,20 @@ export const deleteKnowledgeBaseRoute = ( }, async (context, request: KibanaRequest, response) => { const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; - const logger = assistantContext.logger; + const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']); + const assistantContext = ctx.elasticAssistant; + const logger = ctx.elasticAssistant.logger; const telemetry = assistantContext.telemetry; + // FF Check for V2 KB + const v2KnowledgeBaseEnabled = isV2KnowledgeBaseEnabled({ context: ctx, request }); + try { const kbResource = getKbResource(request); const esClient = (await context.core).elasticsearch.client.asInternalUser; const knowledgeBaseDataClient = - await assistantContext.getAIAssistantKnowledgeBaseDataClient(); + await assistantContext.getAIAssistantKnowledgeBaseDataClient(v2KnowledgeBaseEnabled); if (!knowledgeBaseDataClient) { return response.custom({ body: { success: false }, statusCode: 500 }); } diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/bulk_actions_route.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/bulk_actions_route.ts index 22543a21973ce0..af6bf559376adb 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/bulk_actions_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/bulk_actions_route.ts @@ -166,7 +166,9 @@ export const bulkActionKnowledgeBaseEntriesRoute = (router: ElasticAssistantPlug // subscribing to completed$, because it handles both cases when request was completed and aborted. // when route is finished by timeout, aborted$ is not getting fired request.events.completed$.subscribe(() => abortController.abort()); - const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient(); + const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient( + true + ); const spaceId = ctx.elasticAssistant.getSpaceId(); // Authenticated user null check completed in `performChecks()` above const authenticatedUser = ctx.elasticAssistant.getCurrentUser() as AuthenticatedUser; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts index 009ad189708aa2..cf7c31d980ac8d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/create_route.ts @@ -15,9 +15,7 @@ import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/ import { KnowledgeBaseEntryCreateProps, KnowledgeBaseEntryResponse, - Metadata, -} from '@kbn/elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen'; -import type { Document } from 'langchain/document'; +} from '@kbn/elastic-assistant-common/impl/schemas/knowledge_base/entries/common_attributes.gen'; import { ElasticAssistantPluginRouter } from '../../../types'; import { buildResponse } from '../../utils'; import { performChecks } from '../../helpers'; @@ -60,15 +58,15 @@ export const createKnowledgeBaseEntryRoute = (router: ElasticAssistantPluginRout return checkResponse; } + // Check mappings and upgrade if necessary -- this route only supports v2 KB, so always `true` + const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient( + true + ); + logger.debug(() => `Creating KB Entry:\n${JSON.stringify(request.body)}`); - const documents: Array> = [ - { - metadata: request.body.metadata, - pageContent: request.body.text, - }, - ]; - const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient(); - const createResponse = await kbDataClient?.addKnowledgeBaseDocuments({ documents }); + const createResponse = await kbDataClient?.createKnowledgeBaseEntry({ + knowledgeBaseEntry: request.body, + }); if (createResponse == null) { return assistantResponse.error({ @@ -76,7 +74,7 @@ export const createKnowledgeBaseEntryRoute = (router: ElasticAssistantPluginRout statusCode: 400, }); } - return response.ok({ body: KnowledgeBaseEntryResponse.parse(createResponse[0]) }); + return response.ok({ body: createResponse }); } catch (err) { const error = transformError(err as Error); return assistantResponse.error({ diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/find_route.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/find_route.ts index e939eae1eb3ad5..25d4bbb195d68c 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/find_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/find_route.ts @@ -21,6 +21,7 @@ import { buildResponse } from '../../utils'; import { performChecks } from '../../helpers'; import { transformESSearchToKnowledgeBaseEntry } from '../../../ai_assistant_data_clients/knowledge_base/transforms'; import { EsKnowledgeBaseEntrySchema } from '../../../ai_assistant_data_clients/knowledge_base/types'; +import { getKBUserFilter } from './utils'; export const findKnowledgeBaseEntriesRoute = (router: ElasticAssistantPluginRouter) => { router.versioned @@ -63,16 +64,19 @@ export const findKnowledgeBaseEntriesRoute = (router: ElasticAssistantPluginRout return checkResponse; } - const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient(); + const kbDataClient = await ctx.elasticAssistant.getAIAssistantKnowledgeBaseDataClient( + true + ); const currentUser = ctx.elasticAssistant.getCurrentUser(); - + const userFilter = getKBUserFilter(currentUser); const additionalFilter = query.filter ? ` AND ${query.filter}` : ''; + const result = await kbDataClient?.findDocuments({ perPage: query.per_page, page: query.page, sortField: query.sort_field, sortOrder: query.sort_order, - filter: `users:{ id: "${currentUser?.profile_uid}" }${additionalFilter}`, // TODO: Update filter to include non-user system entries + filter: `${userFilter}${additionalFilter}`, fields: query.fields, }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/utils.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/utils.ts new file mode 100644 index 00000000000000..6ca137d64e7a3a --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/entries/utils.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AuthenticatedUser } from '@kbn/core-security-common'; + +export const getKBUserFilter = (user: AuthenticatedUser | null) => { + return user?.profile_uid ? `users.id: "${user?.profile_uid}" or NOT users: *` : 'NOT users: *'; +}; diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts index 4907263d3713be..404e489d796066 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts @@ -20,6 +20,7 @@ import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantPluginRouter, GetElser } from '../../types'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { ESQL_DOCS_LOADED_QUERY, ESQL_RESOURCE } from './constants'; +import { isV2KnowledgeBaseEnabled } from '../helpers'; /** * Get the status of the Knowledge Base index, pipeline, and resources (collection of documents) @@ -50,8 +51,9 @@ export const getKnowledgeBaseStatusRoute = ( }, async (context, request: KibanaRequest, response) => { const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; - const logger = assistantContext.logger; + const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']); + const assistantContext = ctx.elasticAssistant; + const logger = ctx.elasticAssistant.logger; const telemetry = assistantContext.telemetry; try { @@ -60,7 +62,12 @@ export const getKnowledgeBaseStatusRoute = ( const elserId = await getElser(); const kbResource = getKbResource(request); - const kbDataClient = await assistantContext.getAIAssistantKnowledgeBaseDataClient(); + // FF Check for V2 KB + const v2KnowledgeBaseEnabled = isV2KnowledgeBaseEnabled({ context: ctx, request }); + + const kbDataClient = await assistantContext.getAIAssistantKnowledgeBaseDataClient( + v2KnowledgeBaseEnabled + ); if (!kbDataClient) { return response.custom({ body: { success: false }, statusCode: 500 }); } @@ -89,9 +96,14 @@ export const getKnowledgeBaseStatusRoute = ( pipeline_exists: pipelineExists, }; - if (kbResource === ESQL_RESOURCE) { + if (indexExists && kbResource === ESQL_RESOURCE) { const esqlExists = - indexExists && (await esStore.similaritySearch(ESQL_DOCS_LOADED_QUERY)).length > 0; + ( + await kbDataClient.getKnowledgeBaseDocumentEntries({ + query: ESQL_DOCS_LOADED_QUERY, + required: true, + }) + ).length > 0; return response.ok({ body: { ...body, esql_exists: esqlExists } }); } diff --git a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts index c6bc89da345b91..36ea1e867eb7d2 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts @@ -17,6 +17,7 @@ import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantPluginRouter, GetElser } from '../../types'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { getKbResource } from './get_kb_resource'; +import { isV2KnowledgeBaseEnabled } from '../helpers'; // Since we're awaiting on ELSER setup, this could take a bit (especially if ML needs to autoscale) // Consider just returning if attempt was successful, and switch to client polling @@ -57,17 +58,21 @@ export const postKnowledgeBaseRoute = ( response ): Promise> => { const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; - const logger = assistantContext.logger; + const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']); + const assistantContext = ctx.elasticAssistant; + const logger = ctx.elasticAssistant.logger; const telemetry = assistantContext.telemetry; const elserId = await getElser(); - const core = await context.core; + const core = ctx.core; const esClient = core.elasticsearch.client.asInternalUser; const soClient = core.savedObjects.getClient(); + // FF Check for V2 KB + const v2KnowledgeBaseEnabled = isV2KnowledgeBaseEnabled({ context: ctx, request }); + try { const knowledgeBaseDataClient = - await assistantContext.getAIAssistantKnowledgeBaseDataClient(); + await assistantContext.getAIAssistantKnowledgeBaseDataClient(v2KnowledgeBaseEnabled); if (!knowledgeBaseDataClient) { return response.custom({ body: { success: false }, statusCode: 500 }); } diff --git a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts index b98ddfc6ac8f97..3d004994b32364 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -81,12 +81,15 @@ export class RequestContextFactory implements IRequestContextFactory { telemetry: core.analytics, - getAIAssistantKnowledgeBaseDataClient: memoize(() => { + // Note: Due to plugin lifecycle and feature flag registration timing, we need to pass in the feature flag here + // Remove `initializeKnowledgeBase` once 'assistantKnowledgeBaseByDefault' feature flag is removed + getAIAssistantKnowledgeBaseDataClient: memoize((v2KnowledgeBaseEnabled = false) => { const currentUser = getCurrentUser(); return this.assistantService.createAIAssistantKnowledgeBaseDataClient({ spaceId: getSpaceId(), logger: this.logger, currentUser, + v2KnowledgeBaseEnabled, }); }), diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 6581a2aa4c0f5e..6885b07a42c30f 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -119,7 +119,9 @@ export interface ElasticAssistantApiRequestHandlerContext { getSpaceId: () => string; getCurrentUser: () => AuthenticatedUser | null; getAIAssistantConversationsDataClient: () => Promise; - getAIAssistantKnowledgeBaseDataClient: () => Promise; + getAIAssistantKnowledgeBaseDataClient: ( + v2KnowledgeBaseEnabled?: boolean + ) => Promise; getAttackDiscoveryDataClient: () => Promise; getAIAssistantPromptsDataClient: () => Promise; getAIAssistantAnonymizationFieldsDataClient: () => Promise; diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index da2f19445b2992..c210253af04a45 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -47,6 +47,7 @@ "@kbn/security-plugin", "@kbn/apm-utils", "@kbn/std", + "@kbn/zod", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/embeddable_enhanced/public/actions/index.ts b/x-pack/plugins/embeddable_enhanced/public/actions/index.ts index 0973fb30ac1751..c351935bbf8bbb 100644 --- a/x-pack/plugins/embeddable_enhanced/public/actions/index.ts +++ b/x-pack/plugins/embeddable_enhanced/public/actions/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export * from './panel_notifications_action'; export * from './drilldown_grouping'; diff --git a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts deleted file mode 100644 index 3d099150115f3f..00000000000000 --- a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { EmbeddableApiContext, PublishesWritableViewMode } from '@kbn/presentation-publishing'; -import { - DynamicActionManager, - SerializedEvent, -} from '@kbn/ui-actions-enhanced-plugin/public/dynamic_actions'; -import { BehaviorSubject } from 'rxjs'; -import { DynamicActionsSerializedState } from '../plugin'; -import { - PanelNotificationsAction, - PanelNotificationsActionApi, -} from './panel_notifications_action'; - -const createContext = (events: SerializedEvent[] = []): EmbeddableApiContext => { - const dynamicActionsState$ = new BehaviorSubject({ - dynamicActions: { events }, - }); - const viewMode$ = new BehaviorSubject(ViewMode.VIEW); - - return { - embeddable: { - enhancements: { - dynamicActions: {} as unknown as DynamicActionManager, - }, - setDynamicActions: (value: DynamicActionsSerializedState['enhancements']) => { - dynamicActionsState$.next(value); - }, - dynamicActionsState$, - viewMode: viewMode$, - setViewMode: (value: ViewMode) => viewMode$.next(value), - } as PanelNotificationsActionApi & PublishesWritableViewMode, - } as EmbeddableApiContext; -}; - -describe('PanelNotificationsAction', () => { - describe('getDisplayName', () => { - test('returns "0" if embeddable has no events', async () => { - const context = createContext(); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayName(context); - expect(name).toBe('0'); - }); - - test('returns "2" if embeddable has two events', async () => { - const context = createContext([{}, {}] as SerializedEvent[]); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayName(context); - expect(name).toBe('2'); - }); - - test('updates display name when dynamic actions is updated', async () => { - const context = createContext([{}, {}] as SerializedEvent[]); - const action = new PanelNotificationsAction(); - - (context.embeddable as PanelNotificationsActionApi).setDynamicActions({ - dynamicActions: { events: [{}, {}, {}] as SerializedEvent[] }, - }); - - const name = action.getDisplayName(context); - expect(name).toBe('3'); - }); - }); - - describe('getDisplayNameTooltip', () => { - test('returns empty string if embeddable has no event', async () => { - const context = createContext(); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayNameTooltip(context); - expect(name).toBe(''); - }); - - test('returns "1 drilldown" if embeddable has one event', async () => { - const context = createContext([{} as SerializedEvent]); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayNameTooltip(context); - expect(name).toBe('Panel has 1 drilldown'); - }); - - test('returns "2 drilldowns" if embeddable has two events', async () => { - const context = createContext([{}, {}] as SerializedEvent[]); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayNameTooltip(context); - expect(name).toBe('Panel has 2 drilldowns'); - }); - - test('returns "3 drilldowns" if embeddable has three events', async () => { - const context = createContext([{}, {}, {}] as SerializedEvent[]); - const action = new PanelNotificationsAction(); - - const name = action.getDisplayNameTooltip(context); - expect(name).toBe('Panel has 3 drilldowns'); - }); - - test('updates tooltip when dynamic actions is updated', async () => { - const context = createContext([{}, {}, {}] as SerializedEvent[]); - const action = new PanelNotificationsAction(); - - (context.embeddable as PanelNotificationsActionApi).setDynamicActions({ - dynamicActions: { events: [{}, {}] as SerializedEvent[] }, - }); - - const name = action.getDisplayNameTooltip(context); - expect(name).toBe('Panel has 2 drilldowns'); - }); - }); - - describe('isCompatible', () => { - test('returns false if not in "edit" mode', async () => { - const context = createContext([{} as SerializedEvent]); - const action = new PanelNotificationsAction(); - - const result = await action.isCompatible(context); - expect(result).toBe(false); - }); - - test('returns true when switching to "edit" mode', async () => { - const context = createContext([{} as SerializedEvent]); - - const action = new PanelNotificationsAction(); - (context.embeddable as PublishesWritableViewMode).setViewMode(ViewMode.EDIT); - const result = await action.isCompatible(context); - expect(result).toBe(true); - }); - - test('returns false when in edit mode but embeddable has no events', async () => { - const context = createContext([]); - (context.embeddable as PublishesWritableViewMode).setViewMode(ViewMode.EDIT); - - const action = new PanelNotificationsAction(); - - const result = await action.isCompatible(context); - expect(result).toBe(false); - }); - }); -}); diff --git a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts deleted file mode 100644 index d245624117fbf2..00000000000000 --- a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { i18n } from '@kbn/i18n'; -import { - apiCanAccessViewMode, - CanAccessViewMode, - EmbeddableApiContext, - getInheritedViewMode, - getViewModeSubject, -} from '@kbn/presentation-publishing'; -import { UiActionsActionDefinition as ActionDefinition } from '@kbn/ui-actions-plugin/public'; - -import { BehaviorSubject, merge } from 'rxjs'; -import { - apiHasDynamicActions, - HasDynamicActions, -} from '../embeddables/interfaces/has_dynamic_actions'; - -export const txtOneDrilldown = i18n.translate( - 'xpack.embeddableEnhanced.actions.panelNotifications.oneDrilldown', - { - defaultMessage: 'Panel has 1 drilldown', - } -); - -export const txtManyDrilldowns = (count: number) => - i18n.translate('xpack.embeddableEnhanced.actions.panelNotifications.manyDrilldowns', { - defaultMessage: 'Panel has {count} drilldowns', - values: { - count: String(count), - }, - }); - -export const ACTION_PANEL_NOTIFICATIONS = 'ACTION_PANEL_NOTIFICATIONS'; - -export type PanelNotificationsActionApi = CanAccessViewMode & Required; - -const isApiCompatible = (api: unknown | null): api is PanelNotificationsActionApi => - apiHasDynamicActions(api) && apiCanAccessViewMode(api); - -/** - * This action renders in "edit" mode number of events (dynamic action) a panel - * has attached to it. - */ -export class PanelNotificationsAction implements ActionDefinition { - public readonly id = ACTION_PANEL_NOTIFICATIONS; - public type = ACTION_PANEL_NOTIFICATIONS; - - private getEventCount({ embeddable }: EmbeddableApiContext): number { - return isApiCompatible(embeddable) - ? (embeddable.dynamicActionsState$.getValue()?.dynamicActions.events ?? []).length - : 0; - } - - public getIconType = () => ''; - - public readonly getDisplayName = ({ embeddable }: EmbeddableApiContext) => { - return String(this.getEventCount({ embeddable })); - }; - - public couldBecomeCompatible({ embeddable }: EmbeddableApiContext) { - return isApiCompatible(embeddable); - } - - public subscribeToCompatibilityChanges = ( - { embeddable }: EmbeddableApiContext, - onChange: (isCompatible: boolean, action: PanelNotificationsAction) => void - ) => { - if (!isApiCompatible(embeddable)) return; - const viewModeSubject = getViewModeSubject(embeddable) ?? new BehaviorSubject(ViewMode.VIEW); - return merge(embeddable.dynamicActionsState$, viewModeSubject).subscribe(() => { - onChange( - getInheritedViewMode(embeddable) === ViewMode.EDIT && - this.getEventCount({ embeddable }) > 0, - this - ); - }); - }; - - public readonly getDisplayNameTooltip = ({ embeddable }: EmbeddableApiContext) => { - const count = this.getEventCount({ embeddable }); - return !count ? '' : count === 1 ? txtOneDrilldown : txtManyDrilldowns(count); - }; - - public readonly isCompatible = async ({ embeddable }: EmbeddableApiContext) => { - return ( - isApiCompatible(embeddable) && - getInheritedViewMode(embeddable) === ViewMode.EDIT && - this.getEventCount({ embeddable }) > 0 - ); - }; - - public readonly execute = async () => {}; -} diff --git a/x-pack/plugins/embeddable_enhanced/public/plugin.ts b/x-pack/plugins/embeddable_enhanced/public/plugin.ts index e4faf031c3627c..f05982af789476 100644 --- a/x-pack/plugins/embeddable_enhanced/public/plugin.ts +++ b/x-pack/plugins/embeddable_enhanced/public/plugin.ts @@ -16,7 +16,6 @@ import { EmbeddableSetup, EmbeddableStart, IEmbeddable, - PANEL_NOTIFICATION_TRIGGER, } from '@kbn/embeddable-plugin/public'; import { apiHasUniqueId, @@ -32,7 +31,6 @@ import { } from '@kbn/ui-actions-enhanced-plugin/public'; import deepEqual from 'react-fast-compare'; import { BehaviorSubject, distinctUntilChanged } from 'rxjs'; -import { PanelNotificationsAction } from './actions'; import { DynamicActionStorage, type DynamicActionStorageApi, @@ -82,9 +80,6 @@ export class EmbeddableEnhancedPlugin public setup(core: CoreSetup, plugins: SetupDependencies): SetupContract { this.setCustomEmbeddableFactoryProvider(plugins); - const panelNotificationAction = new PanelNotificationsAction(); - plugins.uiActionsEnhanced.registerAction(panelNotificationAction); - plugins.uiActionsEnhanced.attachAction(PANEL_NOTIFICATION_TRIGGER, panelNotificationAction.id); return {}; } diff --git a/x-pack/plugins/fleet/common/constants/epm.ts b/x-pack/plugins/fleet/common/constants/epm.ts index 6509786f2c53e0..f55a7294c0273d 100644 --- a/x-pack/plugins/fleet/common/constants/epm.ts +++ b/x-pack/plugins/fleet/common/constants/epm.ts @@ -10,6 +10,7 @@ import { ElasticsearchAssetType, KibanaSavedObjectType } from '../types/models'; export const PACKAGES_SAVED_OBJECT_TYPE = 'epm-packages'; export const ASSETS_SAVED_OBJECT_TYPE = 'epm-packages-assets'; export const MAX_TIME_COMPLETE_INSTALL = 30 * 60 * 1000; // 30 minutes +export const MAX_REINSTALL_RETRIES = 3; export const FLEET_SYSTEM_PACKAGE = 'system'; export const FLEET_ELASTIC_AGENT_PACKAGE = 'elastic_agent'; diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index fb5ef4ca3ae8df..522af87e56015c 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -27,6 +27,7 @@ const _allowedExperimentalValues = { advancedPolicySettings: true, useSpaceAwareness: false, enableReusableIntegrationPolicies: true, + asyncDeployPolicies: true, }; /** diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx index 9ea3db4e148516..e91002c12ad0ce 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx @@ -25,6 +25,7 @@ export async function getAgentAndPolicyCountForOutput(output: Output) { kuery: agentPolicyKuery, page: 1, perPage: SO_SEARCH_LIMIT, + noAgentCount: true, }); if (agentPolicies.error) { diff --git a/x-pack/plugins/fleet/scripts/create_agent_policies/create_agent_policies.ts b/x-pack/plugins/fleet/scripts/create_agent_policies/create_agent_policies.ts index 83838b3443e905..db47c056ce12d0 100644 --- a/x-pack/plugins/fleet/scripts/create_agent_policies/create_agent_policies.ts +++ b/x-pack/plugins/fleet/scripts/create_agent_policies/create_agent_policies.ts @@ -7,9 +7,13 @@ import { ToolingLog } from '@kbn/tooling-log'; import yargs from 'yargs'; +import { chunk } from 'lodash'; +import { LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../common/constants'; import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../common'; +import { packagePolicyFixture } from './fixtures'; + const logger = new ToolingLog({ level: 'info', writeTo: process.stdout, @@ -26,13 +30,17 @@ const printUsage = () => const INDEX_BULK_OP = '{ "index":{ "_id": "{{id}}" } }\n'; -async function createAgentPoliciesDocsBulk(size: number) { +function getPolicyId(idx: number | string) { + return `test-policy-${idx}`; +} + +async function createAgentPoliciesDocsBulk(range: number[]) { const auth = 'Basic ' + Buffer.from(ES_SUPERUSER + ':' + ES_PASSWORD).toString('base64'); - const body = Array.from({ length: size }, (_, index) => index + 1) + const body = range .flatMap((idx) => [ INDEX_BULK_OP.replace( /{{id}}/, - `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}:test-policy-${idx}` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}:${getPolicyId(idx)}` ), JSON.stringify({ [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]: { @@ -79,9 +87,9 @@ async function createAgentPoliciesDocsBulk(size: number) { return data; } -async function createEnrollmentToken(size: number) { +async function createEnrollmentToken(range: number[]) { const auth = 'Basic ' + Buffer.from(ES_SUPERUSER + ':' + ES_PASSWORD).toString('base64'); - const body = Array.from({ length: size }, (_, index) => index + 1) + const body = range .flatMap((idx) => [ INDEX_BULK_OP.replace(/{{id}}/, `test-enrollment-token-${idx}`), JSON.stringify({ @@ -89,7 +97,7 @@ async function createEnrollmentToken(size: number) { api_key_id: 'faketest123', api_key: 'test==', name: `Test Policy ${idx}`, - policy_id: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}:test-policy-${idx}`, + policy_id: `${getPolicyId(idx)}`, namespaces: [], created_at: new Date().toISOString(), }) + '\n', @@ -113,6 +121,41 @@ async function createEnrollmentToken(size: number) { return data; } +async function createPackagePolicies(range: number[]) { + const auth = 'Basic ' + Buffer.from(ES_SUPERUSER + ':' + ES_PASSWORD).toString('base64'); + const body = range + .flatMap((idx) => [ + INDEX_BULK_OP.replace( + /{{id}}/, + `${LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE}:test-policy-${idx}` + ), + JSON.stringify( + packagePolicyFixture({ + idx, + agentPolicyId: getPolicyId(idx), + }) + ) + '\n', + ]) + .join(''); + + const res = await fetch(`${ES_URL}/.kibana_ingest/_bulk`, { + method: 'post', + body, + headers: { + Authorization: auth, + 'Content-Type': 'application/x-ndjson', + }, + }); + + const data = await res.json(); + + if (!data.items) { + logger.error('Error creating agent policies docs: ' + JSON.stringify(data)); + process.exit(1); + } + return data; +} + export async function run() { const { size: sizeArg = 500, @@ -129,6 +172,15 @@ export async function run() { const size = Number(sizeArg).valueOf(); logger.info(`Creating ${size} policies`); - await Promise.all([createAgentPoliciesDocsBulk(size), createEnrollmentToken(size)]); + + const range = Array.from({ length: size }, (_ignore, index) => index + 1); + + for (const rangePart of chunk(range, 200)) { + await Promise.all([ + createAgentPoliciesDocsBulk(rangePart), + createEnrollmentToken(rangePart), + createPackagePolicies(rangePart), + ]); + } logger.info(`Succesfuly created ${size} policies`); } diff --git a/x-pack/plugins/fleet/scripts/create_agent_policies/fixtures.ts b/x-pack/plugins/fleet/scripts/create_agent_policies/fixtures.ts new file mode 100644 index 00000000000000..b10f412ac43fee --- /dev/null +++ b/x-pack/plugins/fleet/scripts/create_agent_policies/fixtures.ts @@ -0,0 +1,800 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const packagePolicyFixture = ({ + agentPolicyId, + idx, +}: { + idx: number; + agentPolicyId: string; +}) => ({ + 'ingest-package-policies': { + name: `system-test-${idx}`, + namespace: '', + description: '', + package: { + name: 'system', + title: 'System', + version: '1.60.3', + requires_root: true, + }, + enabled: true, + policy_id: agentPolicyId, + policy_ids: [agentPolicyId], + inputs: [ + { + type: 'logfile', + policy_template: 'system', + enabled: true, + streams: [ + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'system.auth', + }, + vars: { + ignore_older: { + value: '72h', + type: 'text', + }, + paths: { + value: ['/var/log/auth.log*', '/var/log/secure*'], + type: 'text', + }, + preserve_original_event: { + value: false, + type: 'bool', + }, + tags: { + value: ['system-auth'], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'logfile-system.auth-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + ignore_older: '72h', + paths: ['/var/log/auth.log*', '/var/log/secure*'], + exclude_files: [`\.gz$`], + multiline: { + pattern: `^\s`, + match: 'after', + }, + tags: ['system-auth'], + processors: [ + { + add_locale: null, + }, + { + rename: { + fields: [ + { + from: 'message', + to: 'event.original', + }, + ], + ignore_missing: true, + fail_on_error: false, + }, + }, + { + syslog: { + field: 'event.original', + ignore_missing: true, + ignore_failure: true, + }, + }, + ], + }, + }, + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'system.syslog', + }, + vars: { + paths: { + value: ['/var/log/messages*', '/var/log/syslog*', '/var/log/system*'], + type: 'text', + }, + preserve_original_event: { + value: false, + type: 'bool', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + ignore_older: { + value: '72h', + type: 'text', + }, + exclude_files: { + value: [`\.gz$`], + type: 'text', + }, + }, + id: 'logfile-system.syslog-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + paths: ['/var/log/messages*', '/var/log/syslog*', '/var/log/system*'], + exclude_files: [`\.gz$`], + multiline: { + pattern: `^\s`, + match: 'after', + }, + processors: [ + { + add_locale: null, + }, + ], + tags: null, + ignore_older: '72h', + }, + }, + ], + }, + { + type: 'winlog', + policy_template: 'system', + enabled: true, + streams: [ + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'system.application', + }, + vars: { + preserve_original_event: { + value: false, + type: 'bool', + }, + event_id: { + type: 'text', + }, + ignore_older: { + value: '72h', + type: 'text', + }, + language: { + value: 0, + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + custom: { + value: `# Winlog configuration example +#batch_read_size: 100`, + type: 'yaml', + }, + }, + id: 'winlog-system.application-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + name: 'Application', + condition: "${host.platform} == 'windows'", + ignore_older: '72h', + }, + }, + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'system.security', + }, + vars: { + preserve_original_event: { + value: false, + type: 'bool', + }, + event_id: { + type: 'text', + }, + ignore_older: { + value: '72h', + type: 'text', + }, + language: { + value: 0, + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + custom: { + value: `# Winlog configuration example +#batch_read_size: 100`, + type: 'yaml', + }, + }, + id: 'winlog-system.security-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + name: 'Security', + condition: "${host.platform} == 'windows'", + ignore_older: '72h', + }, + }, + { + enabled: true, + data_stream: { + type: 'logs', + dataset: 'system.system', + }, + vars: { + preserve_original_event: { + value: false, + type: 'bool', + }, + event_id: { + type: 'text', + }, + ignore_older: { + value: '72h', + type: 'text', + }, + language: { + value: 0, + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + custom: { + value: `# Winlog configuration example +#batch_read_size: 100`, + type: 'yaml', + }, + }, + id: 'winlog-system.system-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + name: 'System', + condition: "${host.platform} == 'windows'", + ignore_older: '72h', + }, + }, + ], + }, + { + type: 'system/metrics', + policy_template: 'system', + enabled: true, + streams: [ + { + enabled: false, + data_stream: { + type: 'metrics', + dataset: 'system.core', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + 'core.metrics': { + value: ['percentages'], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.core-1f70ab3b-5631-4239-9f87-2881e3986a0a', + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.cpu', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + 'cpu.metrics': { + value: ['percentages', 'normalized_percentages'], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.cpu-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['cpu'], + 'cpu.metrics': ['percentages', 'normalized_percentages'], + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.diskio', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + 'diskio.include_devices': { + value: [], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.diskio-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['diskio'], + 'diskio.include_devices': null, + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.filesystem', + }, + vars: { + period: { + value: '1m', + type: 'text', + }, + 'filesystem.ignore_types': { + value: [], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + value: `- drop_event.when.regexp: + system.filesystem.mount_point: ^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)`, + type: 'yaml', + }, + }, + id: 'system/metrics-system.filesystem-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['filesystem'], + period: '1m', + processors: [ + { + 'drop_event.when.regexp': { + 'system.filesystem.mount_point': + '^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)', + }, + }, + ], + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.fsstat', + }, + vars: { + period: { + value: '1m', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + value: `- drop_event.when.regexp: + system.fsstat.mount_point: ^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)`, + type: 'yaml', + }, + }, + id: 'system/metrics-system.fsstat-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['fsstat'], + period: '1m', + processors: [ + { + 'drop_event.when.regexp': { + 'system.fsstat.mount_point': '^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)', + }, + }, + ], + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.load', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.load-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['load'], + condition: "${host.platform} != 'windows'", + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.memory', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.memory-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['memory'], + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.network', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + 'network.interfaces': { + value: [], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.network-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['network'], + period: '10s', + 'network.interfaces': null, + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.process', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + 'process.include_top_n.by_cpu': { + value: 5, + type: 'integer', + }, + 'process.include_top_n.by_memory': { + value: 5, + type: 'integer', + }, + 'process.cmdline.cache.enabled': { + value: true, + type: 'bool', + }, + 'process.cgroups.enabled': { + value: false, + type: 'bool', + }, + 'process.env.whitelist': { + value: [], + type: 'text', + }, + 'process.include_cpu_ticks': { + value: false, + type: 'bool', + }, + processes: { + value: ['.*'], + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.process-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['process'], + period: '10s', + 'process.include_top_n.by_cpu': 5, + 'process.include_top_n.by_memory': 5, + 'process.cmdline.cache.enabled': true, + 'process.cgroups.enabled': false, + 'process.include_cpu_ticks': false, + processes: ['.*'], + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.process.summary', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.process.summary-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['process_summary'], + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.socket_summary', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.socket_summary-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['socket_summary'], + period: '10s', + }, + }, + { + enabled: true, + data_stream: { + type: 'metrics', + dataset: 'system.uptime', + }, + vars: { + period: { + value: '10s', + type: 'text', + }, + tags: { + value: [], + type: 'text', + }, + processors: { + type: 'yaml', + }, + }, + id: 'system/metrics-system.uptime-1f70ab3b-5631-4239-9f87-2881e3986a0a', + compiled_stream: { + metricsets: ['uptime'], + period: '10s', + }, + }, + ], + vars: { + 'system.hostfs': { + type: 'text', + }, + }, + }, + { + type: 'httpjson', + policy_template: 'system', + enabled: false, + streams: [ + { + enabled: false, + data_stream: { + type: 'logs', + dataset: 'system.application', + }, + vars: { + interval: { + value: '10s', + type: 'text', + }, + search: { + value: 'search sourcetype="XmlWinEventLog:Application"', + type: 'text', + }, + tags: { + value: ['forwarded'], + type: 'text', + }, + }, + id: 'httpjson-system.application-1f70ab3b-5631-4239-9f87-2881e3986a0a', + }, + { + enabled: false, + data_stream: { + type: 'logs', + dataset: 'system.security', + }, + vars: { + interval: { + value: '10s', + type: 'text', + }, + search: { + value: 'search sourcetype="XmlWinEventLog:Security"', + type: 'text', + }, + tags: { + value: ['forwarded'], + type: 'text', + }, + }, + id: 'httpjson-system.security-1f70ab3b-5631-4239-9f87-2881e3986a0a', + }, + { + enabled: false, + data_stream: { + type: 'logs', + dataset: 'system.system', + }, + vars: { + interval: { + value: '10s', + type: 'text', + }, + search: { + value: 'search sourcetype="XmlWinEventLog:System"', + type: 'text', + }, + tags: { + value: ['forwarded'], + type: 'text', + }, + }, + id: 'httpjson-system.system-1f70ab3b-5631-4239-9f87-2881e3986a0a', + }, + ], + vars: { + url: { + value: 'https://server.example.com:8089', + type: 'text', + }, + enable_request_tracer: { + type: 'bool', + }, + username: { + type: 'text', + }, + password: { + type: 'password', + }, + token: { + type: 'password', + }, + preserve_original_event: { + value: false, + type: 'bool', + }, + ssl: { + value: `#certificate_authorities: +# - | +# -----BEGIN CERTIFICATE----- +# MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF +# ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 +# MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB +# BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n +# fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl +# 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t +# /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP +# PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 +# CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O +# BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux +# 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D +# 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw +# 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA +# H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu +# 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 +# yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk +# sxSmbIUfc2SGJGCJD4I= +# -----END CERTIFICATE----- +`, + type: 'yaml', + }, + }, + }, + ], + output_id: null, + revision: 1, + created_at: '2024-08-30T13:45:51.197Z', + created_by: 'system', + updated_at: '2024-08-30T13:45:51.197Z', + updated_by: 'system', + }, + type: 'ingest-package-policies', + references: [], + managed: false, + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '10.14.0', + updated_at: '2024-08-30T13:45:51.197Z', + created_at: '2024-08-30T13:45:51.197Z', +}); diff --git a/x-pack/plugins/fleet/server/constants/index.ts b/x-pack/plugins/fleet/server/constants/index.ts index 7751a8f23a59b6..73a62a3cbfb069 100644 --- a/x-pack/plugins/fleet/server/constants/index.ts +++ b/x-pack/plugins/fleet/server/constants/index.ts @@ -71,6 +71,7 @@ export { // EPM USER_SETTINGS_TEMPLATE_SUFFIX, PACKAGE_TEMPLATE_SUFFIX, + MAX_REINSTALL_RETRIES, // Download sources DEFAULT_DOWNLOAD_SOURCE_URI, DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts index 8b472b8b4dfbbd..c2451005ecb4a5 100644 --- a/x-pack/plugins/fleet/server/plugin.ts +++ b/x-pack/plugins/fleet/server/plugin.ts @@ -131,6 +131,7 @@ import { FleetMetricsTask } from './services/metrics/fleet_metrics_task'; import { fetchAgentMetrics } from './services/metrics/fetch_agent_metrics'; import { registerIntegrationFieldsExtractor } from './services/register_integration_fields_extractor'; import { registerUpgradeManagedPackagePoliciesTask } from './services/setup/managed_package_policies'; +import { registerDeployAgentPoliciesTask } from './services/agent_policies/deploy_agent_policies_task'; export interface FleetSetupDeps { security: SecurityPluginSetup; @@ -600,6 +601,8 @@ export class FleetPlugin this.telemetryEventsSender.setup(deps.telemetry); // Register task registerUpgradeManagedPackagePoliciesTask(deps.taskManager); + registerDeployAgentPoliciesTask(deps.taskManager); + this.bulkActionsResolver = new BulkActionsResolver(deps.taskManager, core); this.checkDeletedFilesTask = new CheckDeletedFilesTask({ core, diff --git a/x-pack/plugins/fleet/server/services/agent_policies/deploy_agent_policies_task.ts b/x-pack/plugins/fleet/server/services/agent_policies/deploy_agent_policies_task.ts new file mode 100644 index 00000000000000..1dc1b4a1d7a79c --- /dev/null +++ b/x-pack/plugins/fleet/server/services/agent_policies/deploy_agent_policies_task.ts @@ -0,0 +1,91 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + ConcreteTaskInstance, + TaskManagerSetupContract, + TaskManagerStartContract, +} from '@kbn/task-manager-plugin/server'; +import { v4 as uuidv4 } from 'uuid'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; + +import { agentPolicyService, appContextService } from '..'; +import { runWithCache } from '../epm/packages/cache'; + +const TASK_TYPE = 'fleet:deploy_agent_policies'; + +export function registerDeployAgentPoliciesTask(taskManagerSetup: TaskManagerSetupContract) { + taskManagerSetup.registerTaskDefinitions({ + [TASK_TYPE]: { + title: 'Fleet Deploy policies', + timeout: '5m', + maxAttempts: 3, + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { + const agentPolicyIdsWithSpace: Array<{ id: string; spaceId?: string }> = + taskInstance.params.agentPolicyIdsWithSpace; + let cancelled = false; + return { + async run() { + if (!agentPolicyIdsWithSpace.length) { + return; + } + appContextService + .getLogger() + .debug(`Deploying ${agentPolicyIdsWithSpace.length} policies`); + const agentPoliciesIdsIndexedBySpace = agentPolicyIdsWithSpace.reduce( + (acc, { id, spaceId = DEFAULT_SPACE_ID }) => { + if (!acc[spaceId]) { + acc[spaceId] = []; + } + + acc[spaceId].push(id); + + return acc; + }, + {} as { [k: string]: string[] } + ); + + await runWithCache(async () => { + for (const [spaceId, agentPolicyIds] of Object.entries( + agentPoliciesIdsIndexedBySpace + )) { + if (cancelled) { + throw new Error('Task has been cancelled'); + } + await agentPolicyService.deployPolicies( + appContextService.getInternalUserSOClientForSpaceId(spaceId), + agentPolicyIds + ); + } + }); + }, + async cancel() { + cancelled = true; + }, + }; + }, + }, + }); +} + +export async function scheduleDeployAgentPoliciesTask( + taskManagerStart: TaskManagerStartContract, + agentPolicyIdsWithSpace: Array<{ id: string; spaceId?: string }> +) { + if (!agentPolicyIdsWithSpace.length) { + return; + } + + await taskManagerStart.ensureScheduled({ + id: `${TASK_TYPE}:${uuidv4()}`, + scope: ['fleet'], + params: { agentPolicyIdsWithSpace }, + taskType: TASK_TYPE, + runAt: new Date(Date.now() + 3 * 1000), + state: {}, + }); +} diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index b5f885b6743bfb..38c785520b5109 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -112,6 +112,7 @@ import { createSoFindIterable } from './utils/create_so_find_iterable'; import { isAgentlessEnabled } from './utils/agentless'; import { validatePolicyNamespaceForSpace } from './spaces/policy_namespaces'; import { isSpaceAwarenessEnabled } from './spaces/helpers'; +import { scheduleDeployAgentPoliciesTask } from './agent_policies/deploy_agent_policies_task'; const KEY_EDITABLE_FOR_MANAGED_POLICIES = ['namespace']; @@ -585,29 +586,36 @@ class AgentPolicyService { } } - const agentPolicies = await pMap( - agentPoliciesSO.saved_objects, - async (agentPolicySO) => { - const agentPolicy = mapAgentPolicySavedObjectToAgentPolicy(agentPolicySO); - if (withPackagePolicies) { - agentPolicy.package_policies = - (await packagePolicyService.findAllForAgentPolicy(soClient, agentPolicySO.id)) || []; - } - if (options.withAgentCount) { - await getAgentsByKuery(appContextService.getInternalUserESClient(), soClient, { - showInactive: true, - perPage: 0, - page: 1, - kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id}`, - }).then(({ total }) => (agentPolicy.agents = total)); - } else { - agentPolicy.agents = 0; - } + const agentPolicies = agentPoliciesSO.saved_objects.map((agentPolicySO) => { + const agentPolicy = mapAgentPolicySavedObjectToAgentPolicy(agentPolicySO); + agentPolicy.agents = 0; + return agentPolicy; + }); - return agentPolicy; - }, - { concurrency: 50 } - ); + if (options.withAgentCount || withPackagePolicies) { + await pMap( + agentPolicies, + async (agentPolicy) => { + if (withPackagePolicies) { + agentPolicy.package_policies = + (await packagePolicyService.findAllForAgentPolicy(soClient, agentPolicy.id)) || []; + } + if (options.withAgentCount) { + await getAgentsByKuery(appContextService.getInternalUserESClient(), soClient, { + showInactive: true, + perPage: 0, + page: 1, + kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id}`, + }).then(({ total }) => (agentPolicy.agents = total)); + } else { + agentPolicy.agents = 0; + } + + return agentPolicy; + }, + { concurrency: 50 } + ); + } for (const agentPolicy of agentPolicies) { auditLoggingService.writeCustomSoAuditLog({ @@ -972,14 +980,24 @@ class AgentPolicyService { } ); - await pMap( - savedObjectsResults, - (policy) => - this.triggerAgentPolicyUpdatedEvent(esClient, 'updated', policy.id, { + if (appContextService.getExperimentalFeatures().asyncDeployPolicies) { + await scheduleDeployAgentPoliciesTask( + appContextService.getTaskManagerStart()!, + savedObjectsResults.map((policy) => ({ + id: policy.id, spaceId: policy.namespaces?.[0], - }), - { concurrency: 50 } - ); + })) + ); + } else { + await pMap( + savedObjectsResults, + (policy) => + this.triggerAgentPolicyUpdatedEvent(esClient, 'updated', policy.id, { + spaceId: policy.namespaces?.[0], + }), + { concurrency: 50 } + ); + } return res; } @@ -1221,7 +1239,7 @@ class AgentPolicyService { agentPolicy: agentPolicies?.find((policy) => policy.id === agentPolicyId), }), { - concurrency: 50, + concurrency: 20, } ); @@ -1593,10 +1611,21 @@ class AgentPolicyService { const config = appContextService.getConfig(); const batchSize = config?.setup?.agentPolicySchemaUpgradeBatchSize ?? 100; const policyIds = updatedPoliciesSuccess.map((policy) => policy.id); - await asyncForEach( - chunk(policyIds, batchSize), - async (policyIdsBatch) => await this.deployPolicies(soClient, policyIdsBatch) - ); + + if (appContextService.getExperimentalFeatures().asyncDeployPolicies) { + await scheduleDeployAgentPoliciesTask( + appContextService.getTaskManagerStart()!, + updatedPoliciesSuccess.map((policy) => ({ + id: policy.id, + spaceId: policy.namespaces?.[0], + })) + ); + } else { + await asyncForEach( + chunk(policyIds, batchSize), + async (policyIdsBatch) => await this.deployPolicies(soClient, policyIdsBatch) + ); + } return { updatedPolicies: updatedPoliciesSuccess, failedPolicies }; } diff --git a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts index 0117595bd984ed..8f4397883eb059 100644 --- a/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/kibana/assets/install.ts @@ -269,7 +269,7 @@ export async function installKibanaAssetsAndReferences({ // This is where the memory consumption is rising up in the first place const kibanaAssets = getKibanaAssets(packageInstallContext); if (installedPkg) { - await deleteKibanaSavedObjectsAssets({ savedObjectsClient, installedPkg, spaceId }); + await deleteKibanaSavedObjectsAssets({ installedPkg, spaceId }); } let installedKibanaAssetsRefs: KibanaAssetReference[] = []; if (!installAsAdditionalSpace) { @@ -344,7 +344,7 @@ export async function deleteKibanaAssetsAndReferencesForSpace({ 'Impossible to delete kibana assets from the space where the package was installed, you must uninstall the package.' ); } - await deleteKibanaSavedObjectsAssets({ savedObjectsClient, installedPkg, spaceId }); + await deleteKibanaSavedObjectsAssets({ installedPkg, spaceId }); await saveKibanaAssetsRefs(savedObjectsClient, pkgName, [], true); } diff --git a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts index c8c7a8d9e3d037..43563682094c46 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts @@ -52,6 +52,7 @@ import { withPackageSpan } from './utils'; import { clearLatestFailedAttempts } from './install_errors_helpers'; import { installIndexTemplatesAndPipelines } from './install_index_template_pipeline'; +// TODO: when installByUpload and installBundle are migrated, remove this function in favor of _state_machine_package_install // this is only exported for testing // use a leading underscore to indicate it's not the supported path // only the more explicit `installPackage*` functions should be used diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts index c6692b55b7efe9..afd368d61497e3 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.test.ts @@ -613,7 +613,7 @@ describe('handleInstallPackageFailure', () => { expect(install._installPackage).not.toBeCalled(); }); - it('Should rollback on upgrade on FleetError', async () => { + it('should rollback on upgrade on FleetError', async () => { const installedPkg: SavedObject = { id: 'test-package', references: [], @@ -642,7 +642,7 @@ describe('handleInstallPackageFailure', () => { expect(mockedLogger.error).toBeCalledTimes(1); expect(mockedLogger.error).toBeCalledWith( - 'rolling back to test_package-1.0.0 after error installing test_package-2.0.0' + 'Rolling back to test_package-1.0.0 after error installing test_package-2.0.0' ); expect(installStateMachine._stateMachineInstallPackage).toBeCalledTimes(1); expect(installStateMachine._stateMachineInstallPackage).toBeCalledWith( @@ -655,51 +655,240 @@ describe('handleInstallPackageFailure', () => { jest.mocked(getInstallationObject).mockReset(); }); - it('Should update the installation status to: install_failed on rollback error', async () => { - jest - .mocked(installStateMachine._stateMachineInstallPackage) - .mockRejectedValue(new Error('test error')); + describe('when installtype is update', () => { + it('should update the installation status to: install_failed on rollback error', async () => { + jest + .mocked(installStateMachine._stateMachineInstallPackage) + .mockRejectedValue(new Error('test error')); - const installedPkg: SavedObject = { - id: 'test-package', - references: [], - attributes: { - name: pkgName, - version: '1.0.0', - install_version: '1.0.0', - format_version: '1.0.0', - title: 'Test Package', - description: 'A package for testing', - owner: { - github: 'elastic', + const installedPkg: SavedObject = { + id: 'test-package', + references: [], + attributes: { + name: pkgName, + version: '1.0.0', + install_version: '1.0.0', + format_version: '1.0.0', + title: 'Test Package', + description: 'A package for testing', + owner: { + github: 'elastic', + }, }, - }, - } as any; + } as any; - await handleInstallPackageFailure({ - savedObjectsClient, - error: new Error('test 123'), - esClient: {} as ElasticsearchClient, - installedPkg, - pkgName, - pkgVersion: '2.0.0', - spaceId: 'default', + await handleInstallPackageFailure({ + savedObjectsClient, + error: new Error('test 123'), + esClient: {} as ElasticsearchClient, + installedPkg, + pkgName, + pkgVersion: '2.0.0', + spaceId: 'default', + }); + + expect(mockedLogger.error).toBeCalledWith( + 'Rolling back to test_package-1.0.0 after error installing test_package-2.0.0' + ); + expect(mockedLogger.error).toBeCalledWith( + 'Uninstalling test_package-1.0.0 after error installing: [Error: test error] with install type: install' + ); + expect(mockedLogger.error).toBeCalledWith( + expect.stringMatching(/Failed to uninstall or rollback package after installation error/) + ); + expect(installStateMachine._stateMachineInstallPackage).toBeCalledTimes(1); + expect(installStateMachine._stateMachineInstallPackage).toBeCalledWith( + expect.objectContaining({ + packageInstallContext: expect.objectContaining({ + packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), + }), + }) + ); }); + }); - expect(mockedLogger.error).toBeCalledWith( - 'rolling back to test_package-1.0.0 after error installing test_package-2.0.0' - ); - expect(mockedLogger.error).toBeCalledWith( - expect.stringMatching(/failed to uninstall or rollback package after installation error/) - ); - expect(installStateMachine._stateMachineInstallPackage).toBeCalledTimes(1); - expect(installStateMachine._stateMachineInstallPackage).toBeCalledWith( - expect.objectContaining({ - packageInstallContext: expect.objectContaining({ - packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), - }), - }) - ); + describe('when installtype is install', () => { + it('should do nothing when installedPkg is not present', async () => { + jest + .mocked(installStateMachine._stateMachineInstallPackage) + .mockRejectedValue(new Error('test error')); + + await handleInstallPackageFailure({ + savedObjectsClient, + error: new Error('test 123'), + esClient: {} as ElasticsearchClient, + installedPkg: undefined as any, + pkgName, + pkgVersion: '1.0.0', + spaceId: 'default', + }); + expect(mockedLogger.error).toBeCalledWith( + 'Uninstalling test_package-1.0.0 after error installing: [Error: test 123] with install type: install' + ); + expect(mockedLogger.error).toBeCalledWith( + `Failed to uninstall or rollback package after installation error PackageRemovalError: test_package is not installed` + ); + }); + }); + + describe('when installtype is reinstall', () => { + it('should retry install from previous failed state', async () => { + jest + .mocked(installStateMachine._stateMachineInstallPackage) + .mockRejectedValue(new Error('test error')); + + const installedPkg: SavedObject = { + id: 'test-package', + references: [], + attributes: { + name: pkgName, + version: '2.0.0', + install_version: '2.0.0', + format_version: '2.0.0', + title: 'Test Package', + description: 'A package for testing', + owner: { + github: 'elastic', + }, + }, + } as any; + + await handleInstallPackageFailure({ + savedObjectsClient, + error: new Error('test installing'), + esClient: {} as ElasticsearchClient, + installedPkg, + pkgName, + pkgVersion: '2.0.0', + spaceId: 'default', + }); + expect(mockedLogger.error).toBeCalledWith( + 'Error installing test_package-2.0.0: [Error: test installing]' + ); + expect(mockedLogger.debug).toBeCalledWith( + expect.stringMatching( + /Retrying install of test_package-2.0.0 with install type: reinstall - Attempt 1/ + ) + ); + expect(mockedLogger.debug).toBeCalledWith( + 'Kicking off install of test_package-2.0.0 from registry' + ); + expect(installStateMachine._stateMachineInstallPackage).toBeCalledTimes(1); + expect(installStateMachine._stateMachineInstallPackage).toBeCalledWith( + expect.objectContaining({ + retryFromLastState: true, + packageInstallContext: expect.objectContaining({ + packageInfo: expect.objectContaining({ + name: pkgName, + version: '2.0.0', + }), + }), + }) + ); + }); + + it('should retry install from previous failed state when MAX_REINSTALL_RETRIES is not reached', async () => { + jest + .mocked(installStateMachine._stateMachineInstallPackage) + .mockRejectedValue(new Error('test error')); + + const installedPkg: SavedObject = { + id: 'test-package', + references: [], + attributes: { + name: pkgName, + version: '2.0.0', + install_version: '2.0.0', + format_version: '2.0.0', + title: 'Test Package', + description: 'A package for testing', + owner: { + github: 'elastic', + }, + latest_install_failed_attempts: [ + { + created_at: '2024-01-24T15:21:13.389Z', + target_version: '2.0.0', + error: { name: 'error', message: 'test error' }, + }, + ], + }, + } as any; + + await handleInstallPackageFailure({ + savedObjectsClient, + error: new Error('test installing'), + esClient: {} as ElasticsearchClient, + installedPkg, + pkgName, + pkgVersion: '2.0.0', + spaceId: 'default', + }); + + expect(installStateMachine._stateMachineInstallPackage).toBeCalledTimes(1); + expect(installStateMachine._stateMachineInstallPackage).toBeCalledWith( + expect.objectContaining({ + retryFromLastState: true, + packageInstallContext: expect.objectContaining({ + packageInfo: expect.objectContaining({ + name: pkgName, + version: '2.0.0', + }), + }), + }) + ); + }); + + it('should not retry install from previous failed state and when 3 attempts have been done', async () => { + jest + .mocked(installStateMachine._stateMachineInstallPackage) + .mockRejectedValue(new Error('test error')); + + const installedPkg: SavedObject = { + id: 'test-package', + references: [], + attributes: { + name: pkgName, + version: '2.0.0', + install_version: '2.0.0', + format_version: '2.0.0', + title: 'Test Package', + description: 'A package for testing', + owner: { + github: 'elastic', + }, + latest_install_failed_attempts: [ + { + created_at: '2024-01-24T15:21:13.389Z', + target_version: '2.0.0', + error: { name: 'error', message: 'test error' }, + }, + { + created_at: '2024-01-24T18:21:19.389Z', + target_version: '2.0.0', + error: { name: 'error', message: 'test error 1' }, + }, + { + created_at: '2024-01-24T19:25:13.379Z', + target_version: '2.0.0', + error: { name: 'error', message: 'test error' }, + }, + ], + }, + } as any; + + await handleInstallPackageFailure({ + savedObjectsClient, + error: new Error('test installing'), + esClient: {} as ElasticsearchClient, + installedPkg, + pkgName, + pkgVersion: '2.0.0', + spaceId: 'default', + }); + + expect(installStateMachine._stateMachineInstallPackage).not.toBeCalled(); + }); }); }); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts index 8311cba09b8ffa..7b49158712f6a4 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts @@ -61,7 +61,11 @@ import { PackageNotFoundError, FleetTooManyRequestsError, } from '../../../errors'; -import { PACKAGES_SAVED_OBJECT_TYPE, MAX_TIME_COMPLETE_INSTALL } from '../../../constants'; +import { + PACKAGES_SAVED_OBJECT_TYPE, + MAX_TIME_COMPLETE_INSTALL, + MAX_REINSTALL_RETRIES, +} from '../../../constants'; import { dataStreamService, licenseService } from '../..'; import { appContextService } from '../../app_context'; import * as Registry from '../registry'; @@ -82,7 +86,6 @@ import { _stateMachineInstallPackage } from './install_state_machine/_state_mach import { formatVerificationResultForSO } from './package_verification'; import { getInstallation, getInstallationObject } from './get'; -import { removeInstallation } from './remove'; import { getInstalledPackageWithAssets, getPackageSavedObjects } from './get'; import { _installPackage } from './_install_package'; import { removeOldAssets } from './cleanup'; @@ -97,6 +100,7 @@ import { addErrorToLatestFailedAttempts } from './install_errors_helpers'; import { installIndexTemplatesAndPipelines } from './install_index_template_pipeline'; import { optimisticallyAddEsAssetReferences } from './es_assets_reference'; import { setLastUploadInstallCache, getLastUploadInstallCache } from './utils'; +import { removeInstallation } from './remove'; export const UPLOAD_RETRY_AFTER_MS = 10000; // 10s const MAX_ENSURE_INSTALL_TIME = 60 * 1000; @@ -274,15 +278,12 @@ export async function handleInstallPackageFailure({ createdAt: new Date().toISOString(), latestAttempts: installedPkg?.attributes.latest_install_failed_attempts, }); - - // if there is an unknown server error, uninstall any package assets or reinstall the previous version if update + // if there is an unknown server error, check the installType and do the following actions try { const installType = getInstallType({ pkgVersion, installedPkg }); - if (installType === 'install') { - logger.error(`uninstalling ${pkgkey} after error installing: [${error.toString()}]`); - await removeInstallation({ savedObjectsClient, pkgName, pkgVersion, esClient }); - return; - } + const attemptNumber = installedPkg?.attributes?.latest_install_failed_attempts?.length + ? installedPkg.attributes.latest_install_failed_attempts.length + 1 + : 1; await updateInstallStatusToFailed({ logger, @@ -291,20 +292,43 @@ export async function handleInstallPackageFailure({ status: 'install_failed', latestInstallFailedAttempts, }); - - if (installType === 'reinstall') { - logger.error(`Failed to reinstall ${pkgkey}: [${error.toString()}]`, { error }); + // in case of install, uninstall any package assets + if (installType === 'install') { + logger.error( + `Uninstalling ${pkgkey} after error installing: [${error.toString()}] with install type: ${installType}` + ); + await removeInstallation({ savedObjectsClient, pkgName, pkgVersion, esClient }); + return; } + // in case of reinstall, restart install where it left off + // retry MAX_REINSTALL_RETRIES times before exiting, in case the error persists + if (installType === 'reinstall' && attemptNumber <= MAX_REINSTALL_RETRIES) { + logger.error(`Error installing ${pkgkey}: [${error.toString()}]`); + logger.debug( + `Retrying install of ${pkgkey} with install type: ${installType} - Attempt ${attemptNumber} ` + ); + await installPackage({ + installSource: 'registry', + savedObjectsClient, + pkgkey, + esClient, + spaceId, + authorizationHeader, + retryFromLastState: true, + }); + return; + } + // In case of update, reinstall the previous version if (installType === 'update') { if (!installedPkg) { logger.error( - `failed to rollback package after installation error ${error} because saved object was undefined` + `Failed to rollback package with install type: ${installType} after installation error ${error} because saved object was undefined` ); return; } const prevVersion = `${pkgName}-${installedPkg.attributes.version}`; - logger.error(`rolling back to ${prevVersion} after error installing ${pkgkey}`); + logger.error(`Rolling back to ${prevVersion} after error installing ${pkgkey}`); await installPackage({ installSource: 'registry', savedObjectsClient, @@ -331,7 +355,7 @@ export async function handleInstallPackageFailure({ }) : [], }); - logger.error(`failed to uninstall or rollback package after installation error ${e}`); + logger.error(`Failed to uninstall or rollback package after installation error ${e}`); } } @@ -354,6 +378,7 @@ interface InstallRegistryPackageParams { authorizationHeader?: HTTPAuthorizationHeader | null; ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; + retryFromLastState?: boolean; } export interface CustomPackageDatasetConfiguration { @@ -416,6 +441,7 @@ async function installPackageFromRegistry({ prerelease = false, ignoreMappingUpdateErrors = false, skipDataStreamRollover = false, + retryFromLastState = false, }: InstallRegistryPackageParams): Promise { const logger = appContextService.getLogger(); // TODO: change epm API to /packageName/version so we don't need to do this @@ -482,7 +508,7 @@ async function installPackageFromRegistry({ }` ); } - return await installPackageWitStateMachine({ + return await installPackageWithStateMachine({ pkgName, pkgVersion, installSource, @@ -498,6 +524,7 @@ async function installPackageFromRegistry({ authorizationHeader, ignoreMappingUpdateErrors, skipDataStreamRollover, + retryFromLastState, }); } catch (e) { sendEvent({ @@ -518,6 +545,7 @@ function getElasticSubscription(packageInfo: ArchivePackage) { return subscription || packageInfo.license || 'basic'; } +// TODO: when installByUpload and installBundle are migrated, remove this function in favor of installWithStateMachine async function installPackageCommon(options: { pkgName: string; pkgVersion: string; @@ -678,7 +706,7 @@ async function installPackageCommon(options: { } } -async function installPackageWitStateMachine(options: { +async function installPackageWithStateMachine(options: { pkgName: string; pkgVersion: string; installSource: InstallSource; @@ -695,6 +723,7 @@ async function installPackageWitStateMachine(options: { authorizationHeader?: HTTPAuthorizationHeader | null; ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; + retryFromLastState?: boolean; }): Promise { const packageInfo = options.packageInstallContext.packageInfo; @@ -713,6 +742,7 @@ async function installPackageWitStateMachine(options: { ignoreMappingUpdateErrors, skipDataStreamRollover, packageInstallContext, + retryFromLastState, } = options; let { telemetryEvent } = options; const logger = appContextService.getLogger(); @@ -809,6 +839,7 @@ async function installPackageWitStateMachine(options: { force, ignoreMappingUpdateErrors, skipDataStreamRollover, + retryFromLastState, }) .then(async (assets) => { logger.debug(`Removing old assets from previous versions of ${pkgName}`); @@ -964,6 +995,7 @@ async function installPackageByUpload({ export type InstallPackageParams = { spaceId: string; neverIgnoreVerificationError?: boolean; + retryFromLastState?: boolean; } & ( | ({ installSource: Extract } & InstallRegistryPackageParams) | ({ installSource: Extract } & InstallUploadedArchiveParams) @@ -971,6 +1003,9 @@ export type InstallPackageParams = { | ({ installSource: Extract } & InstallCustomPackageParams) ); +/** + * Entrypoint function for installing packages; this function gets also called by the POST epm/packages handler + */ export async function installPackage(args: InstallPackageParams): Promise { if (!('installSource' in args)) { throw new FleetError('installSource is required'); @@ -991,6 +1026,7 @@ export async function installPackage(args: InstallPackageParams): Promise; -const mockedInstallKibanaAssetsAndReferences = - installKibanaAssetsAndReferencesMultispace as jest.MockedFunction< - typeof installKibanaAssetsAndReferencesMultispace - >; +const mockCleanupLatestExecutedState = cleanupLatestExecutedState as jest.MockedFunction< + typeof cleanupLatestExecutedState +>; +const mockHandleState = handleState as jest.MockedFunction; function sleep(millis: number) { return new Promise((resolve) => setTimeout(resolve, millis)); @@ -79,24 +75,21 @@ describe('_stateMachineInstallPackage', () => { soClient.get.mockImplementation(async (type, id) => { return { id, attributes: {} } as any; }); - esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; appContextService.start(createAppContextStartContractMock()); - jest.mocked(installILMPolicy).mockReset(); - jest.mocked(installIlmForDataStream).mockReset(); - jest.mocked(installIlmForDataStream).mockResolvedValue({ - esReferences: [], - installedIlms: [], - }); jest.mocked(saveArchiveEntriesFromAssetsMap).mockResolvedValue({ saved_objects: [], }); - jest.mocked(restartInstallation).mockReset(); }); - it('Handles errors from installKibanaAssets', async () => { + afterEach(() => { + mockedInstallIndexTemplatesAndPipelines.mockReset(); + mockHandleState.mockClear(); + }); + + it('Handles errors coming from handleState', async () => { // force errors from this function - mockedInstallKibanaAssetsAndReferences.mockImplementation(async () => { + mockHandleState.mockImplementation(async () => { throw new Error('mocked async error A: should be caught'); }); @@ -141,121 +134,17 @@ describe('_stateMachineInstallPackage', () => { await expect(installationPromise).rejects.toThrow('should be caught'); }); - it('Do not install ILM policies if disabled in config', async () => { - appContextService.start( - createAppContextStartContractMock({ - internal: { - disableILMPolicies: true, - fleetServerStandalone: false, - onlyAllowAgentUpgradeToKnownVersions: false, - retrySetupOnBoot: false, - registry: { - kibanaVersionCheckEnabled: true, - capabilities: [], - excludePackages: [], - }, - }, - }) - ); - // force errors from this function - mockedInstallKibanaAssetsAndReferences.mockResolvedValue([]); - // pick any function between when those are called and when await Promise.all is defined later - // and force it to take long enough for the errors to occur - // @ts-expect-error about call signature - mockedUpdateCurrentWriteIndices.mockImplementation(async () => await sleep(1000)); - mockedInstallIndexTemplatesAndPipelines.mockResolvedValue({ - installedTemplates: [], - esReferences: [], - }); - await _stateMachineInstallPackage({ - savedObjectsClient: soClient, - // @ts-ignore - savedObjectsImporter: jest.fn(), - esClient, - logger: loggerMock.create(), - packageInstallContext: { - assetsMap: new Map(), - paths: [], - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - }, - }, - installType: 'install', - installSource: 'registry', - spaceId: DEFAULT_SPACE_ID, - }); - - expect(installILMPolicy).not.toBeCalled(); - expect(installIlmForDataStream).not.toBeCalled(); - }); - - it('Installs ILM policies if not disabled in config', async () => { - appContextService.start( - createAppContextStartContractMock({ - internal: { - disableILMPolicies: false, - fleetServerStandalone: false, - onlyAllowAgentUpgradeToKnownVersions: false, - retrySetupOnBoot: false, - registry: { - kibanaVersionCheckEnabled: true, - capabilities: [], - excludePackages: [], - }, - }, - }) - ); - // force errors from this function - mockedInstallKibanaAssetsAndReferences.mockResolvedValue([]); - // pick any function between when those are called and when await Promise.all is defined later - // and force it to take long enough for the errors to occur - // @ts-expect-error about call signature - mockedUpdateCurrentWriteIndices.mockImplementation(async () => await sleep(1000)); - mockedInstallIndexTemplatesAndPipelines.mockResolvedValue({ - installedTemplates: [], - esReferences: [], + describe('With flag retryFromLastState = true', () => { + beforeEach(() => { + mockHandleState.mockImplementation(() => + Promise.resolve({ installedKibanaAssetsRefs: [], esReferences: [] }) + ); }); - await _stateMachineInstallPackage({ - savedObjectsClient: soClient, - // @ts-ignore - savedObjectsImporter: jest.fn(), - esClient, - logger: loggerMock.create(), - packageInstallContext: { - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - } as any, - assetsMap: new Map(), - paths: [], - }, - installType: 'install', - installSource: 'registry', - spaceId: DEFAULT_SPACE_ID, + afterEach(() => { + mockCleanupLatestExecutedState.mockReset(); + mockHandleState.mockClear(); }); - expect(installILMPolicy).toBeCalled(); - expect(installIlmForDataStream).toBeCalled(); - }); - - describe('When package is stuck in `installing`', () => { const mockInstalledPackageSo: SavedObject = { id: 'mocked-package', attributes: { @@ -274,124 +163,143 @@ describe('_stateMachineInstallPackage', () => { references: [], }; - beforeEach(() => { - appContextService.start( - createAppContextStartContractMock({ - internal: { - disableILMPolicies: true, - fleetServerStandalone: false, - onlyAllowAgentUpgradeToKnownVersions: false, - retrySetupOnBoot: false, - registry: { - kibanaVersionCheckEnabled: true, - capabilities: [], - excludePackages: [], - }, + it('If there is no latest_executed_state in SO, start from create_restart_installation', async () => { + await _stateMachineInstallPackage({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, }, - }) + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + }); + expect(mockCleanupLatestExecutedState).not.toBeCalled(); + expect(mockHandleState).toBeCalledWith( + 'create_restart_installation', + expect.any(Object), + expect.any(Object) ); }); - describe('When timeout is reached', () => { - it('restarts installation', async () => { - await _stateMachineInstallPackage({ - installSource: 'registry', - installType: 'install', - spaceId: 'default', - savedObjectsClient: soClient, - esClient, - logger: loggerMock.create(), - packageInstallContext: { - paths: [], - assetsMap: new Map(), - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, + it('If force is passed, always start from create_restart_installation', async () => { + await _stateMachineInstallPackage({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, }, - installedPkg: { - ...mockInstalledPackageSo, - attributes: { - ...mockInstalledPackageSo.attributes, - install_started_at: new Date( - Date.now() - MAX_TIME_COMPLETE_INSTALL * 2 - ).toISOString(), + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + force: true, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + install_started_at: new Date(Date.now() - 1000).toISOString(), + latest_executed_state: { + name: 'install_index_template_pipelines' as any, + error: 'Some error', + started_at: new Date(Date.now() - 100).toISOString(), }, }, - }); - - expect(restartInstallation).toBeCalled(); + }, }); + expect(mockCleanupLatestExecutedState).not.toBeCalled(); + expect(mockHandleState).toBeCalledWith( + 'create_restart_installation', + expect.any(Object), + expect.any(Object) + ); }); - describe('When timeout is not reached', () => { - describe('With no force flag', () => { - it('throws concurrent installation error', async () => { - const installPromise = _stateMachineInstallPackage({ - installSource: 'registry', - installType: 'install', - spaceId: 'default', - savedObjectsClient: soClient, - esClient, - logger: loggerMock.create(), - packageInstallContext: { - paths: [], - assetsMap: new Map(), - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, - }, - installedPkg: { - ...mockInstalledPackageSo, - attributes: { - ...mockInstalledPackageSo.attributes, - install_started_at: new Date(Date.now() - 1000).toISOString(), - }, - }, - }); - - await expect(installPromise).rejects.toThrowError(ConcurrentInstallOperationError); - }); - }); - - describe('With force flag provided', () => { - it('restarts installation', async () => { - await _stateMachineInstallPackage({ - installSource: 'registry', - installType: 'install', - spaceId: 'default', - savedObjectsClient: soClient, - esClient, - logger: loggerMock.create(), - packageInstallContext: { - paths: [], - assetsMap: new Map(), - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, - }, - installedPkg: { - ...mockInstalledPackageSo, - attributes: { - ...mockInstalledPackageSo.attributes, - install_started_at: new Date(Date.now() - 1000).toISOString(), - }, + it('If there is latest_executed_state in SO, start from latest failed state', async () => { + await _stateMachineInstallPackage({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + install_started_at: new Date(Date.now() - 1000).toISOString(), + latest_executed_state: { + name: 'install_index_template_pipelines' as any, + error: 'Some error', + started_at: new Date(Date.now() - 100).toISOString(), }, - force: true, - }); - - expect(restartInstallation).toBeCalled(); - }); + }, + }, }); + expect(mockCleanupLatestExecutedState).toBeCalled(); + expect(mockHandleState).toBeCalledWith( + 'remove_legacy_templates', + expect.any(Object), + expect.any(Object) + ); }); }); it('Surfaces saved object conflicts error', async () => { + mockHandleState.mockRejectedValueOnce(new PackageSavedObjectConflictError('test')); + appContextService.start( createAppContextStartContractMock({ internal: { @@ -408,10 +316,6 @@ describe('_stateMachineInstallPackage', () => { }) ); - mockedInstallKibanaAssetsAndReferences.mockRejectedValueOnce( - new PackageSavedObjectConflictError('test') - ); - const installPromise = _stateMachineInstallPackage({ savedObjectsClient: soClient, // @ts-ignore diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts index afad28d28a4616..1f10d40feba384 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/_state_machine_package_install.ts @@ -30,6 +30,8 @@ import type { AssetReference, } from '../../../../types'; +import { appContextService } from '../../..'; + import { stepCreateRestartInstallation, stepInstallKibanaAssets, @@ -44,8 +46,15 @@ import { stepResolveKibanaPromise, stepSaveSystemObject, updateLatestExecutedState, + cleanupLatestExecutedState, + cleanUpKibanaAssetsStep, + cleanupILMPoliciesStep, + cleanUpMlModelStep, + cleanupIndexTemplatePipelinesStep, + cleanupTransformsStep, + cleanupArchiveEntriesStep, } from './steps'; -import type { StateMachineDefinition } from './state_machine'; +import type { StateMachineDefinition, StateMachineStates } from './state_machine'; import { handleState } from './state_machine'; export interface InstallContext extends StateContext { @@ -62,6 +71,8 @@ export interface InstallContext extends StateContext { authorizationHeader?: HTTPAuthorizationHeader | null; ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; + retryFromLastState?: boolean; + initialState?: INSTALL_STATES; indexTemplates?: IndexTemplateEntry[]; packageAssetRefs?: PackageAssetReference[]; @@ -69,6 +80,78 @@ export interface InstallContext extends StateContext { esReferences?: EsAssetReference[]; kibanaAssetPromise?: Promise; } +/** + * This data structure defines the sequence of the states and the transitions + */ +const statesDefinition: StateMachineStates = { + create_restart_installation: { + nextState: INSTALL_STATES.INSTALL_KIBANA_ASSETS, + onTransition: stepCreateRestartInstallation, + onPostTransition: updateLatestExecutedState, + }, + install_kibana_assets: { + onPreTransition: cleanUpKibanaAssetsStep, + onTransition: stepInstallKibanaAssets, + nextState: INSTALL_STATES.INSTALL_ILM_POLICIES, + onPostTransition: updateLatestExecutedState, + }, + install_ilm_policies: { + onPreTransition: cleanupILMPoliciesStep, + onTransition: stepInstallILMPolicies, + nextState: INSTALL_STATES.INSTALL_ML_MODEL, + onPostTransition: updateLatestExecutedState, + }, + install_ml_model: { + onPreTransition: cleanUpMlModelStep, + onTransition: stepInstallMlModel, + nextState: INSTALL_STATES.INSTALL_INDEX_TEMPLATE_PIPELINES, + onPostTransition: updateLatestExecutedState, + }, + install_index_template_pipelines: { + onPreTransition: cleanupIndexTemplatePipelinesStep, + onTransition: stepInstallIndexTemplatePipelines, + nextState: INSTALL_STATES.REMOVE_LEGACY_TEMPLATES, + onPostTransition: updateLatestExecutedState, + }, + remove_legacy_templates: { + onTransition: stepRemoveLegacyTemplates, + nextState: INSTALL_STATES.UPDATE_CURRENT_WRITE_INDICES, + onPostTransition: updateLatestExecutedState, + }, + update_current_write_indices: { + onTransition: stepUpdateCurrentWriteIndices, + nextState: INSTALL_STATES.INSTALL_TRANSFORMS, + onPostTransition: updateLatestExecutedState, + }, + install_transforms: { + onPreTransition: cleanupTransformsStep, + onTransition: stepInstallTransforms, + nextState: INSTALL_STATES.DELETE_PREVIOUS_PIPELINES, + onPostTransition: updateLatestExecutedState, + }, + delete_previous_pipelines: { + onTransition: stepDeletePreviousPipelines, + nextState: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, + onPostTransition: updateLatestExecutedState, + }, + save_archive_entries_from_assets_map: { + onPreTransition: cleanupArchiveEntriesStep, + onTransition: stepSaveArchiveEntries, + nextState: INSTALL_STATES.RESOLVE_KIBANA_PROMISE, + onPostTransition: updateLatestExecutedState, + }, + resolve_kibana_promise: { + onTransition: stepResolveKibanaPromise, + nextState: INSTALL_STATES.UPDATE_SO, + onPostTransition: updateLatestExecutedState, + }, + update_so: { + onTransition: stepSaveSystemObject, + nextState: 'end', + onPostTransition: updateLatestExecutedState, + }, +}; + /* * _stateMachineInstallPackage installs packages using the generic state machine in ./state_machine * installStates is the data structure providing the state machine definition @@ -79,80 +162,39 @@ export interface InstallContext extends StateContext { export async function _stateMachineInstallPackage( context: InstallContext ): Promise { + const { installedPkg, retryFromLastState, force } = context; + const logger = appContextService.getLogger(); + let initialState = INSTALL_STATES.CREATE_RESTART_INSTALLATION; + + // if retryFromLastState, restart install from last install state + // if force is passed, the install should be executed from the beginning + if (retryFromLastState && !force && installedPkg?.attributes?.latest_executed_state?.name) { + initialState = findNextState( + installedPkg.attributes.latest_executed_state.name, + statesDefinition + ); + logger.debug( + `Install with retryFromLastState option - Initial installation state: ${initialState}` + ); + // we need to clean up latest_executed_state or it won't be refreshed + await cleanupLatestExecutedState(context); + } const installStates: StateMachineDefinition = { - context, - states: { - create_restart_installation: { - nextState: 'install_kibana_assets', - onTransition: stepCreateRestartInstallation, - onPostTransition: updateLatestExecutedState, - }, - install_kibana_assets: { - onTransition: stepInstallKibanaAssets, - nextState: 'install_ilm_policies', - onPostTransition: updateLatestExecutedState, - }, - install_ilm_policies: { - onTransition: stepInstallILMPolicies, - nextState: 'install_ml_model', - onPostTransition: updateLatestExecutedState, - }, - install_ml_model: { - onTransition: stepInstallMlModel, - nextState: 'install_index_template_pipelines', - onPostTransition: updateLatestExecutedState, - }, - install_index_template_pipelines: { - onTransition: stepInstallIndexTemplatePipelines, - nextState: 'remove_legacy_templates', - onPostTransition: updateLatestExecutedState, - }, - remove_legacy_templates: { - onTransition: stepRemoveLegacyTemplates, - nextState: 'update_current_write_indices', - onPostTransition: updateLatestExecutedState, - }, - update_current_write_indices: { - onTransition: stepUpdateCurrentWriteIndices, - nextState: 'install_transforms', - onPostTransition: updateLatestExecutedState, - }, - install_transforms: { - onTransition: stepInstallTransforms, - nextState: 'delete_previous_pipelines', - onPostTransition: updateLatestExecutedState, - }, - delete_previous_pipelines: { - onTransition: stepDeletePreviousPipelines, - nextState: 'save_archive_entries_from_assets_map', - onPostTransition: updateLatestExecutedState, - }, - save_archive_entries_from_assets_map: { - onTransition: stepSaveArchiveEntries, - nextState: 'resolve_kibana_promise', - onPostTransition: updateLatestExecutedState, - }, - resolve_kibana_promise: { - onTransition: stepResolveKibanaPromise, - nextState: 'update_so', - onPostTransition: updateLatestExecutedState, - }, - update_so: { - onTransition: stepSaveSystemObject, - nextState: 'end', - onPostTransition: updateLatestExecutedState, - }, - }, + // inject initial state inside context + context: { ...context, initialState }, + states: statesDefinition, }; + try { const { installedKibanaAssetsRefs, esReferences } = await handleState( - INSTALL_STATES.CREATE_RESTART_INSTALLATION, + initialState!, installStates, installStates.context ); + return [ - ...(installedKibanaAssetsRefs as KibanaAssetReference[]), - ...(esReferences as EsAssetReference[]), + ...(installedKibanaAssetsRefs ? (installedKibanaAssetsRefs as KibanaAssetReference[]) : []), + ...(esReferences ? (esReferences as EsAssetReference[]) : []), ]; } catch (err) { const { packageInfo } = installStates.context.packageInstallContext; @@ -171,3 +213,7 @@ export async function _stateMachineInstallPackage( } } } + +const findNextState = (latestExecutedState: StateNames, states: StateMachineStates) => { + return states[latestExecutedState].nextState! as StateNames; +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.test.ts index 795440025c7fd4..efba719a84cf77 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.test.ts @@ -382,10 +382,6 @@ describe('handleState', () => { expect(mockPreTransition).toHaveBeenCalled(); expect(mockOnTransition1).toHaveBeenCalled(); - - expect(mockContract.logger?.debug).toHaveBeenCalledWith( - 'Executing pre transition function: mockConstructor' - ); }); it('should execute preTransition function before the transition gets executed passing the updated context', async () => { @@ -462,9 +458,6 @@ describe('handleState', () => { expect(mockPostTransition).toHaveBeenCalled(); expect(mockOnTransition3).toHaveBeenCalled(); expect(mockPostTransition).toHaveBeenCalled(); - expect(mockContract.logger?.debug).toHaveBeenCalledWith( - 'Executing post transition function: mockConstructor' - ); }); it('should execute postTransition function after the transition passing the updated context', async () => { @@ -500,9 +493,6 @@ describe('handleState', () => { }) ); expect(mockPostTransition).toHaveBeenCalledWith(updatedContext); - expect(mockContract.logger?.debug).toHaveBeenCalledWith( - 'Executing post transition function: mockConstructor' - ); }); it('should execute postTransition correctly also when a transition throws', async () => { diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.ts index 4817dccc300a3d..43cdb22fa1655e 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/state_machine.ts @@ -142,7 +142,6 @@ async function executePostTransition( if (typeof currentState.onPostTransition === 'function') { try { await currentState.onPostTransition.call(undefined, updatedContext); - logger.debug(`Executing post transition function: ${currentState.onPostTransition.name}`); } catch (error) { logger.warn(`Error during execution of post transition function: ${error.message}`); } @@ -160,7 +159,6 @@ async function executePreTransition( if (typeof currentState.onPreTransition === 'function') { try { await currentState.onPreTransition.call(undefined, updatedContext); - logger.debug(`Executing pre transition function: ${currentState.onPreTransition.name}`); } catch (error) { logger.warn(`Error during execution of pre transition function: ${error.message}`); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts index 9323841daba00d..2b653728d65748 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_create_restart_installation.test.ts @@ -45,154 +45,200 @@ describe('stepCreateRestartInstallation', () => { let soClient: jest.Mocked; let esClient: jest.Mocked; const logger = loggingSystemMock.createLogger(); - const mockInstalledPackageSo: SavedObject = { - id: 'mocked-package', - attributes: { - name: 'test-package', - version: '1.0.0', - install_status: 'installing', - install_version: '1.0.0', - install_started_at: new Date().toISOString(), - install_source: 'registry', - verification_status: 'verified', - installed_kibana: [] as any, - installed_es: [] as any, - es_index_patterns: {}, - }, - type: PACKAGES_SAVED_OBJECT_TYPE, - references: [], - }; - - beforeEach(async () => { - soClient = savedObjectsClientMock.create(); - esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - appContextService.start(createAppContextStartContractMock()); - }); - afterEach(() => { - mockedAuditLoggingService.writeCustomSoAuditLog.mockReset(); - soClient.update.mockReset(); - // mockedCreateInstallation.mockReset(); - }); - it('Should call createInstallation if no installedPkg is available', async () => { - await stepCreateRestartInstallation({ - savedObjectsClient: soClient, - // @ts-ignore - savedObjectsImporter: jest.fn(), - esClient, - logger, - packageInstallContext: { - assetsMap: new Map(), - paths: [], - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - }, + describe('When package is stuck in `installing`', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, }, - latestExecutedState: { - name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, - started_at: new Date(Date.now() - MAX_TIME_COMPLETE_INSTALL * 2).toISOString(), - }, - installType: 'install', - installSource: 'registry', - spaceId: DEFAULT_SPACE_ID, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(() => { + mockedAuditLoggingService.writeCustomSoAuditLog.mockReset(); + soClient.update.mockReset(); }); - expect(logger.debug).toHaveBeenCalledWith(`Package install - Create installation`); - expect(mockedCreateInstallation).toHaveBeenCalledTimes(1); - }); - it('Should call restartInstallation if installedPkg is available and force = true', async () => { - await stepCreateRestartInstallation({ - savedObjectsClient: soClient, - // @ts-ignore - savedObjectsImporter: jest.fn(), - esClient, - logger, - packageInstallContext: { - assetsMap: new Map(), - paths: [], - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, + it('Should call createInstallation if no installedPkg is available', async () => { + await stepCreateRestartInstallation({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger, + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + }, }, - }, - installedPkg: { - ...mockInstalledPackageSo, - attributes: { - ...mockInstalledPackageSo.attributes, - install_started_at: new Date(Date.now() - 1000).toISOString(), + latestExecutedState: { + name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, + started_at: new Date(Date.now() - MAX_TIME_COMPLETE_INSTALL * 2).toISOString(), }, - }, - force: true, - latestExecutedState: { - name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, - started_at: new Date(Date.now() - MAX_TIME_COMPLETE_INSTALL * 2).toISOString(), - }, - installType: 'install', - installSource: 'registry', - spaceId: DEFAULT_SPACE_ID, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + }); + expect(logger.debug).toHaveBeenCalledWith(`Package install - Create installation`); + expect(mockedCreateInstallation).toHaveBeenCalledTimes(1); }); - expect(mockedRestartInstallation).toHaveBeenCalledTimes(1); - }); - it('Should call restartInstallation and throw if installedPkg is available and force is not provided', async () => { - const promise = stepCreateRestartInstallation({ - savedObjectsClient: soClient, - // @ts-ignore - savedObjectsImporter: jest.fn(), - esClient, - logger, - packageInstallContext: { - assetsMap: new Map(), - paths: [], - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - }, - }, - installedPkg: { - ...mockInstalledPackageSo, - attributes: { - ...mockInstalledPackageSo.attributes, - install_started_at: new Date(Date.now() - 1000).toISOString(), - }, - }, - latestExecutedState: { - name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, - started_at: new Date(Date.now() - MAX_TIME_COMPLETE_INSTALL * 2).toISOString(), - }, - installType: 'install', - installSource: 'registry', - spaceId: DEFAULT_SPACE_ID, + describe('When timeout is not reached', () => { + it('Should throw if installedPkg is available and force is not provided', async () => { + const promise = stepCreateRestartInstallation({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger, + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + }, + }, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + latestExecutedState: { + name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, + started_at: new Date(Date.now() - 1000).toISOString(), + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + }); + + await expect(promise).rejects.toThrowError( + 'Concurrent installation or upgrade of xyz-4.5.6 detected, aborting.' + ); + }); + + it('Should call restartInstallation if installedPkg is available and force = true', async () => { + await stepCreateRestartInstallation({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger, + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + }, + }, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + force: true, + latestExecutedState: { + name: INSTALL_STATES.SAVE_ARCHIVE_ENTRIES, + started_at: new Date(Date.now() - MAX_TIME_COMPLETE_INSTALL * 2).toISOString(), + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + }); + expect(mockedRestartInstallation).toHaveBeenCalledTimes(1); + }); }); - await expect(promise).rejects.toThrowError( - 'Concurrent installation or upgrade of xyz-4.5.6 detected, aborting.' - ); + describe('When timeout is reached', () => { + it('Should call restartInstallation', async () => { + await stepCreateRestartInstallation({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger, + packageInstallContext: { + assetsMap: new Map(), + paths: [], + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + }, + }, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + install_started_at: new Date( + Date.now() - MAX_TIME_COMPLETE_INSTALL * 2 + ).toISOString(), + }, + }, + + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + }); + + expect(mockedRestartInstallation).toBeCalled(); + }); + }); }); - expect(mockedRestartInstallation).toHaveBeenCalledTimes(0); }); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts index 210a6b882ceed7..2cf9b23bb9adbf 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.test.ts @@ -22,16 +22,46 @@ import { createAppContextStartContractMock } from '../../../../../mocks'; import { installILMPolicy } from '../../../elasticsearch/ilm/install'; import { installIlmForDataStream } from '../../../elasticsearch/datastream_ilm/install'; import { ElasticsearchAssetType } from '../../../../../types'; +import { deleteILMPolicies, deletePrerequisiteAssets } from '../../remove'; + +import { stepInstallILMPolicies, cleanupILMPoliciesStep } from './step_install_ilm_policies'; jest.mock('../../../archive/storage'); jest.mock('../../../elasticsearch/ilm/install'); jest.mock('../../../elasticsearch/datastream_ilm/install'); +jest.mock('../../../elasticsearch/index/update_settings'); +jest.mock('../../remove', () => { + return { + ...jest.requireActual('../../remove'), + deletePrerequisiteAssets: jest.fn(), + deleteILMPolicies: jest.fn(), + }; +}); +const mockDeleteILMPolicies = deleteILMPolicies as jest.MockedFunction; +const mockDeletePrerequisiteAssets = deletePrerequisiteAssets as jest.MockedFunction< + typeof deletePrerequisiteAssets +>; -import { stepInstallILMPolicies } from './step_install_ilm_policies'; +const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + } as any, + assetsMap: new Map(), + paths: [], +}; +let soClient: jest.Mocked; +let esClient: jest.Mocked; describe('stepInstallILMPolicies', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; const mockInstalledPackageSo: SavedObject = { id: 'mocked-package', attributes: { @@ -58,23 +88,6 @@ describe('stepInstallILMPolicies', () => { type: PACKAGES_SAVED_OBJECT_TYPE, references: [], }; - const packageInstallContext = { - packageInfo: { - title: 'title', - name: 'xyz', - version: '4.5.6', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - } as any, - assetsMap: new Map(), - paths: [], - }; - beforeEach(async () => { soClient = savedObjectsClientMock.create(); esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -117,7 +130,7 @@ describe('stepInstallILMPolicies', () => { expect(installIlmForDataStream).not.toBeCalled(); }); - it('Should not install ILM policies if disabled in config and should return esReferences form installedPkg', async () => { + it('should not install ILM policies if disabled in config and should return esReferences form installedPkg', async () => { appContextService.start( createAppContextStartContractMock({ internal: { @@ -176,7 +189,7 @@ describe('stepInstallILMPolicies', () => { ]); }); - it('Should installs ILM policies if not disabled in config', async () => { + it('should install ILM policies if not disabled in config', async () => { appContextService.start( createAppContextStartContractMock({ internal: { @@ -372,3 +385,217 @@ describe('stepInstallILMPolicies', () => { ]); }); }); + +describe('cleanupILMPoliciesStep', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockDeleteILMPolicies.mockReset(); + mockDeletePrerequisiteAssets.mockReset(); + }); + const installedEs = [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ]; + + it('should clean up prerequisite assets', async () => { + await cleanupILMPoliciesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_ilm_policies' as any, + }); + + expect(mockDeletePrerequisiteAssets).toBeCalledWith( + { + indexAssets: [ + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ], + transformAssets: [ + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + ], + indexTemplatesAndPipelines: [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + ], + }, + esClient + ); + expect(mockDeleteILMPolicies).toBeCalledWith(installedEs, esClient); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanupILMPoliciesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'install_ilm_policies' as any, + }); + + expect(mockDeleteILMPolicies).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanupILMPoliciesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'install_ilm_policies' as any, + }); + + expect(mockDeleteILMPolicies).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != install_ilm_policies', async () => { + await cleanupILMPoliciesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockDeleteILMPolicies).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanupILMPoliciesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_ilm_policies' as any, + }); + + expect(mockDeleteILMPolicies).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.ts index 0e0d4ca2779f2d..c16ef3e296e27a 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_ilm_policies.ts @@ -13,6 +13,8 @@ import { installILMPolicy } from '../../../elasticsearch/ilm/install'; import { withPackageSpan } from '../../utils'; import type { InstallContext } from '../_state_machine_package_install'; +import { deletePrerequisiteAssets, splitESAssets, deleteILMPolicies } from '../../remove'; +import { INSTALL_STATES } from '../../../../../../common/types'; export async function stepInstallILMPolicies(context: InstallContext) { const { logger, packageInstallContext, esClient, savedObjectsClient, installedPkg } = context; @@ -43,3 +45,38 @@ export async function stepInstallILMPolicies(context: InstallContext) { // always return esReferences even when isILMPoliciesDisabled is false as it's the first time we are writing to it return { esReferences }; } + +export async function cleanupILMPoliciesStep(context: InstallContext) { + const { logger, esClient, installedPkg, retryFromLastState, force, initialState } = context; + + // In case of retry clean up previous installed assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.INSTALL_ILM_POLICIES && + installedPkg?.attributes?.installed_es && + installedPkg.attributes.installed_es.length > 0 + ) { + const { installed_es: installedEs } = installedPkg.attributes; + const { indexTemplatesAndPipelines, indexAssets, transformAssets } = splitESAssets(installedEs); + + logger.debug('Retry transition - clean up prerequisite ES assets first'); + await withPackageSpan('Retry transition - clean up prerequisite ES assets first', async () => { + await deletePrerequisiteAssets( + { + indexAssets, + transformAssets, + indexTemplatesAndPipelines, + }, + esClient + ); + }); + logger.debug('Retry transition - clean up ilm Policies and datastream ilm policies'); + await withPackageSpan( + 'Retry transition - clean up ilm Policies and datastream ilm policies', + async () => { + await deleteILMPolicies(installedEs, esClient); + } + ); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts index 92a76eada06ecf..d258747edc6efb 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.test.ts @@ -20,18 +20,35 @@ import type { EsAssetReference, Installation } from '../../../../../../common'; import { appContextService } from '../../../../app_context'; import { createAppContextStartContractMock } from '../../../../../mocks'; import { installIndexTemplatesAndPipelines } from '../../install_index_template_pipeline'; +import { deletePrerequisiteAssets, cleanupComponentTemplate } from '../../remove'; jest.mock('../../install_index_template_pipeline'); +jest.mock('../../remove', () => { + return { + ...jest.requireActual('../../remove'), + deletePrerequisiteAssets: jest.fn(), + cleanupComponentTemplate: jest.fn(), + }; +}); +const mockCleanupComponentTemplate = cleanupComponentTemplate as jest.MockedFunction< + typeof cleanupComponentTemplate +>; +const mockDeletePrerequisiteAssets = deletePrerequisiteAssets as jest.MockedFunction< + typeof deletePrerequisiteAssets +>; -import { stepInstallIndexTemplatePipelines } from './step_install_index_template_pipelines'; +import { + stepInstallIndexTemplatePipelines, + cleanupIndexTemplatePipelinesStep, +} from './step_install_index_template_pipelines'; const mockedInstallIndexTemplatesAndPipelines = installIndexTemplatesAndPipelines as jest.MockedFunction< typeof installIndexTemplatesAndPipelines >; +let soClient: jest.Mocked; +let esClient: jest.Mocked; describe('stepInstallIndexTemplatePipelines', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; const getMockInstalledPackageSo = ( installedEs: EsAssetReference[] = [] ): SavedObject => { @@ -590,3 +607,258 @@ describe('stepInstallIndexTemplatePipelines', () => { expect(mockedInstallIndexTemplatesAndPipelines).not.toBeCalled(); }); }); + +describe('cleanupIndexTemplatePipelinesStep', () => { + const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'xyz', + version: '4.5.6', + description: 'test', + type: 'input', + categories: ['cloud'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + policy_templates: [ + { + name: 'template_0001', + title: 'Template 1', + description: 'Template 1', + inputs: [ + { + type: 'logs', + title: 'Log', + description: 'Log Input', + vars: [ + { + name: 'path', + type: 'text', + }, + { + name: 'path_2', + type: 'text', + }, + ], + }, + ], + }, + ], + } as any, + assetsMap: new Map(), + paths: [], + }; + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockCleanupComponentTemplate.mockReset(); + mockDeletePrerequisiteAssets.mockReset(); + }); + const installedEs = [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ]; + + it('should clean up prerequisite assets', async () => { + await cleanupIndexTemplatePipelinesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_index_template_pipelines' as any, + }); + + expect(mockDeletePrerequisiteAssets).toBeCalledWith( + { + indexAssets: [ + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ], + transformAssets: [ + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + ], + indexTemplatesAndPipelines: [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + ], + }, + esClient + ); + expect(mockCleanupComponentTemplate).toBeCalledWith(installedEs, esClient); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanupIndexTemplatePipelinesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'install_index_template_pipelines' as any, + }); + + expect(mockCleanupComponentTemplate).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanupIndexTemplatePipelinesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'install_ilm_policies' as any, + }); + + expect(mockCleanupComponentTemplate).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != install_index_template_pipelines', async () => { + await cleanupIndexTemplatePipelinesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockCleanupComponentTemplate).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanupIndexTemplatePipelinesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: {} as any, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_index_template_pipelines' as any, + }); + + expect(mockCleanupComponentTemplate).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.ts index 18c0956da31c90..a0a97651d47948 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_index_template_pipelines.ts @@ -11,6 +11,8 @@ import { installIndexTemplatesAndPipelines } from '../../install_index_template_ import type { InstallContext } from '../_state_machine_package_install'; import { withPackageSpan } from '../../utils'; +import { deletePrerequisiteAssets, splitESAssets, cleanupComponentTemplate } from '../../remove'; +import { INSTALL_STATES } from '../../../../../../common/types'; export async function stepInstallIndexTemplatePipelines(context: InstallContext) { const { esClient, savedObjectsClient, packageInstallContext, logger, installedPkg } = context; @@ -71,3 +73,35 @@ export async function stepInstallIndexTemplatePipelines(context: InstallContext) } } } + +export async function cleanupIndexTemplatePipelinesStep(context: InstallContext) { + const { logger, esClient, installedPkg, retryFromLastState, force, initialState } = context; + + // In case of retry clean up previous installed assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.INSTALL_INDEX_TEMPLATE_PIPELINES && + installedPkg?.attributes?.installed_es && + installedPkg.attributes.installed_es.length > 0 + ) { + const { installed_es: installedEs } = installedPkg.attributes; + const { indexTemplatesAndPipelines, indexAssets, transformAssets } = splitESAssets(installedEs); + + logger.debug('Retry transition - clean up prerequisite ES assets first'); + await withPackageSpan('Retry transition - clean up prerequisite ES assets first', async () => { + await deletePrerequisiteAssets( + { + indexAssets, + transformAssets, + indexTemplatesAndPipelines, + }, + esClient + ); + }); + logger.debug('Retry transition - clean up component template'); + await withPackageSpan('Retry transition - clean up component template', async () => { + await cleanupComponentTemplate(installedEs, esClient); + }); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts index 7d466f03d52fe5..52c93c61c16e17 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.test.ts @@ -5,27 +5,62 @@ * 2.0. */ -import type { SavedObjectsClientContract, ElasticsearchClient } from '@kbn/core/server'; +import type { + SavedObjectsClientContract, + ElasticsearchClient, + SavedObject, +} from '@kbn/core/server'; import { savedObjectsClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { loggerMock } from '@kbn/logging-mocks'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; +import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../../../common/constants'; + import { appContextService } from '../../../../app_context'; import { createAppContextStartContractMock } from '../../../../../mocks'; import { installKibanaAssetsAndReferencesMultispace } from '../../../kibana/assets/install'; +import { deleteKibanaAssets } from '../../remove'; -jest.mock('../../../kibana/assets/install'); +import { KibanaSavedObjectType, type Installation } from '../../../../../types'; + +import { stepInstallKibanaAssets, cleanUpKibanaAssetsStep } from './step_install_kibana_assets'; -import { stepInstallKibanaAssets } from './step_install_kibana_assets'; +jest.mock('../../../kibana/assets/install'); +jest.mock('../../remove', () => { + return { + ...jest.requireActual('../../remove'), + deleteKibanaAssets: jest.fn(), + }; +}); const mockedInstallKibanaAssetsAndReferencesMultispace = jest.mocked( installKibanaAssetsAndReferencesMultispace ); +const mockedDeleteKibanaAssets = deleteKibanaAssets as jest.MockedFunction< + typeof deleteKibanaAssets +>; -describe('stepInstallKibanaAssets', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; +let soClient: jest.Mocked; +let esClient: jest.Mocked; +const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'test-package', + version: '1.0.0', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + } as any, + paths: ['some/path/1', 'some/path/2'], + assetsMap: new Map(), +}; + +describe('stepInstallKibanaAssets', () => { beforeEach(async () => { soClient = savedObjectsClientMock.create(); @@ -108,3 +143,162 @@ describe('stepInstallKibanaAssets', () => { await expect(installationPromise).resolves.not.toThrowError(); }); }); + +describe('cleanUpKibanaAssetsStep', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockedDeleteKibanaAssets.mockReset(); + }); + const installedKibana = [{ type: KibanaSavedObjectType.dashboard, id: 'dashboard-1' }]; + + it('should clean up kibana assets previously installed', async () => { + await cleanUpKibanaAssetsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_kibana: installedKibana as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_kibana_assets' as any, + }); + + expect(mockedDeleteKibanaAssets).toBeCalledWith({ + installedObjects: installedKibana, + spaceId: 'default', + packageInfo: packageInstallContext.packageInfo, + }); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanUpKibanaAssetsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_kibana: installedKibana as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'install_kibana_assets' as any, + }); + + expect(mockedDeleteKibanaAssets).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanUpKibanaAssetsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_kibana: installedKibana as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'install_kibana_assets' as any, + }); + + expect(mockedDeleteKibanaAssets).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != install_kibana_assets', async () => { + await cleanUpKibanaAssetsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_kibana: installedKibana as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockedDeleteKibanaAssets).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanUpKibanaAssetsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_kibana_assets' as any, + }); + + expect(mockedDeleteKibanaAssets).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts index 2db6f622d32815..b5a1fff91d3b89 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_kibana_assets.ts @@ -10,6 +10,8 @@ import { installKibanaAssetsAndReferencesMultispace } from '../../../kibana/asse import { withPackageSpan } from '../../utils'; import type { InstallContext } from '../_state_machine_package_install'; +import { deleteKibanaAssets } from '../../remove'; +import { INSTALL_STATES } from '../../../../../../common/types'; export async function stepInstallKibanaAssets(context: InstallContext) { const { savedObjectsClient, logger, installedPkg, packageInstallContext, spaceId } = context; @@ -34,3 +36,32 @@ export async function stepInstallKibanaAssets(context: InstallContext) { return { kibanaAssetPromise }; } + +export async function cleanUpKibanaAssetsStep(context: InstallContext) { + const { + logger, + installedPkg, + packageInstallContext, + spaceId, + retryFromLastState, + force, + initialState, + } = context; + const { packageInfo } = packageInstallContext; + + // In case of retry clean up previous installed kibana assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.INSTALL_KIBANA_ASSETS && + installedPkg?.attributes?.installed_kibana && + installedPkg.attributes.installed_kibana.length > 0 + ) { + const { installed_kibana: installedObjects } = installedPkg.attributes; + logger.debug('Retry transition - clean up Kibana assets first'); + + await withPackageSpan('Retry transition - clean up Kibana assets first', async () => { + await deleteKibanaAssets({ installedObjects, spaceId, packageInfo }); + }); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts index ac67f8abfaccbc..1afb436eb43615 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.test.ts @@ -20,16 +20,44 @@ import type { EsAssetReference, Installation } from '../../../../../../common'; import { appContextService } from '../../../../app_context'; import { createAppContextStartContractMock } from '../../../../../mocks'; import { installMlModel } from '../../../elasticsearch/ml_model'; +import { deleteMLModels, deletePrerequisiteAssets } from '../../remove'; -import { stepInstallMlModel } from './step_install_mlmodel'; +import { stepInstallMlModel, cleanUpMlModelStep } from './step_install_mlmodel'; jest.mock('../../../elasticsearch/ml_model'); +jest.mock('../../remove', () => { + return { + ...jest.requireActual('../../remove'), + deletePrerequisiteAssets: jest.fn(), + deleteMLModels: jest.fn(), + }; +}); const mockedInstallMlModel = installMlModel as jest.MockedFunction; +const mockDeleteMLModels = deleteMLModels as jest.MockedFunction; +const mockDeletePrerequisiteAssets = deletePrerequisiteAssets as jest.MockedFunction< + typeof deletePrerequisiteAssets +>; +const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'test-package', + version: '1.0.0', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + } as any, + paths: ['some/path/1', 'some/path/2'], + assetsMap: new Map(), +}; +let soClient: jest.Mocked; +let esClient: jest.Mocked; describe('stepInstallMlModel', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; const getMockInstalledPackageSo = ( installedEs: EsAssetReference[] = [] ): SavedObject => { @@ -60,22 +88,6 @@ describe('stepInstallMlModel', () => { jest.mocked(mockedInstallMlModel).mockReset(); }); - const packageInstallContext = { - packageInfo: { - title: 'title', - name: 'test-package', - version: '1.0.0', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - } as any, - paths: ['some/path/1', 'some/path/2'], - assetsMap: new Map(), - }; appContextService.start( createAppContextStartContractMock({ internal: { @@ -153,3 +165,217 @@ describe('stepInstallMlModel', () => { ]); }); }); + +describe('cleanUpMlModelStep', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockDeleteMLModels.mockReset(); + mockDeletePrerequisiteAssets.mockReset(); + }); + const installedEs = [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ]; + + it('should clean up prerequisite assets', async () => { + await cleanUpMlModelStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_ml_model' as any, + }); + + expect(mockDeletePrerequisiteAssets).toBeCalledWith( + { + indexAssets: [ + { + id: '.metrics-endpoint.metadata_united_default', + type: ElasticsearchAssetType.index, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ], + transformAssets: [ + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + ], + indexTemplatesAndPipelines: [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + ], + }, + esClient + ); + expect(mockDeleteMLModels).toBeCalledWith(installedEs, esClient); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanUpMlModelStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'install_ml_model' as any, + }); + + expect(mockDeleteMLModels).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanUpMlModelStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'install_ml_model' as any, + }); + + expect(mockDeleteMLModels).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != install_ml_model', async () => { + await cleanUpMlModelStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockDeleteMLModels).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanUpMlModelStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_ml_model' as any, + }); + + expect(mockDeleteMLModels).not.toBeCalled(); + expect(mockDeletePrerequisiteAssets).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.ts index 31d571fee45053..1df4d99b592c42 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_mlmodel.ts @@ -5,14 +5,16 @@ * 2.0. */ +import { INSTALL_STATES } from '../../../../../../common/types'; import { installMlModel } from '../../../elasticsearch/ml_model'; - +import { deletePrerequisiteAssets, splitESAssets, deleteMLModels } from '../../remove'; import { withPackageSpan } from '../../utils'; import type { InstallContext } from '../_state_machine_package_install'; export async function stepInstallMlModel(context: InstallContext) { const { logger, packageInstallContext, esClient, savedObjectsClient } = context; + let esReferences = context.esReferences ?? []; esReferences = await withPackageSpan('Install ML models', () => @@ -20,3 +22,35 @@ export async function stepInstallMlModel(context: InstallContext) { ); return { esReferences }; } + +export async function cleanUpMlModelStep(context: InstallContext) { + const { logger, esClient, installedPkg, retryFromLastState, force, initialState } = context; + + // In case of retry clean up previous installed assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.INSTALL_ML_MODEL && + installedPkg?.attributes?.installed_es && + installedPkg.attributes.installed_es.length > 0 + ) { + const { installed_es: installedEs } = installedPkg.attributes; + const { indexTemplatesAndPipelines, indexAssets, transformAssets } = splitESAssets(installedEs); + + logger.debug('Retry transition - clean up prerequisite ES assets first'); + await withPackageSpan('Retry transition - clean up prerequisite ES assets first', async () => { + await deletePrerequisiteAssets( + { + indexAssets, + transformAssets, + indexTemplatesAndPipelines, + }, + esClient + ); + }); + logger.debug('Retry transition - clean up ML model'); + await withPackageSpan('Retry transition - clean up ML model', async () => { + await deleteMLModels(installedEs, esClient); + }); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts index 63ea9c203bf430..1ac2383950b053 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.test.ts @@ -20,16 +20,41 @@ import type { EsAssetReference, Installation } from '../../../../../../common'; import { appContextService } from '../../../../app_context'; import { createAppContextStartContractMock } from '../../../../../mocks'; import { installTransforms } from '../../../elasticsearch/transform/install'; +import { cleanupTransforms } from '../../remove'; -import { stepInstallTransforms } from './step_install_transforms'; +import { stepInstallTransforms, cleanupTransformsStep } from './step_install_transforms'; jest.mock('../../../elasticsearch/transform/install'); - +jest.mock('../../remove', () => { + return { + ...jest.requireActual('../../remove'), + cleanupTransforms: jest.fn(), + }; +}); const mockedInstallTransforms = installTransforms as jest.MockedFunction; +const mockCleanupTransforms = cleanupTransforms as jest.MockedFunction; + +let soClient: jest.Mocked; +let esClient: jest.Mocked; + +const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'test-package', + version: '1.0.0', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + } as any, + paths: ['some/path/1', 'some/path/2'], + assetsMap: new Map(), +}; describe('stepInstallTransforms', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; const getMockInstalledPackageSo = ( installedEs: EsAssetReference[] = [] ): SavedObject => { @@ -60,22 +85,6 @@ describe('stepInstallTransforms', () => { jest.mocked(mockedInstallTransforms).mockReset(); }); - const packageInstallContext = { - packageInfo: { - title: 'title', - name: 'test-package', - version: '1.0.0', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - } as any, - paths: ['some/path/1', 'some/path/2'], - assetsMap: new Map(), - }; appContextService.start( createAppContextStartContractMock({ internal: { @@ -159,3 +168,180 @@ describe('stepInstallTransforms', () => { ]); }); }); + +describe('cleanupTransformsStep', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockCleanupTransforms.mockReset(); + }); + const installedEs = [ + { + id: 'metrics-endpoint.policy-0.1.0-dev.0', + type: ElasticsearchAssetType.ingestPipeline, + }, + { + id: 'endpoint.metadata_current-default-0.1.0', + type: ElasticsearchAssetType.transform, + }, + { + id: 'logs-endpoint.metadata_current-template', + type: ElasticsearchAssetType.indexTemplate, + version: '0.2.0', + }, + { + id: 'endpoint.metadata_current-default-0.2.0', + type: ElasticsearchAssetType.transform, + }, + { + id: '.metrics-endpoint.metadata_united_default-1', + type: ElasticsearchAssetType.index, + }, + ]; + + it('should clean up transforms already installed', async () => { + await cleanupTransformsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_transforms' as any, + }); + + expect(mockCleanupTransforms).toBeCalledWith(installedEs, esClient); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanupTransformsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'install_transforms' as any, + }); + + expect(mockCleanupTransforms).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanupTransformsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'install_transforms' as any, + }); + + expect(mockCleanupTransforms).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != install_transforms', async () => { + await cleanupTransformsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + installed_es: installedEs as any, + install_started_at: new Date(Date.now() - 1000).toISOString(), + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockCleanupTransforms).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanupTransformsStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'install_transforms' as any, + }); + + expect(mockCleanupTransforms).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.ts index cd7d7404db5ada..f91f9fd32dcf97 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_install_transforms.ts @@ -10,6 +10,8 @@ import { installTransforms } from '../../../elasticsearch/transform/install'; import { withPackageSpan } from '../../utils'; import type { InstallContext } from '../_state_machine_package_install'; +import { cleanupTransforms } from '../../remove'; +import { INSTALL_STATES } from '../../../../../../common/types'; export async function stepInstallTransforms(context: InstallContext) { const { @@ -35,3 +37,23 @@ export async function stepInstallTransforms(context: InstallContext) { )); return { esReferences }; } + +export async function cleanupTransformsStep(context: InstallContext) { + const { logger, esClient, installedPkg, retryFromLastState, force, initialState } = context; + + // In case of retry clean up previous installed assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.INSTALL_TRANSFORMS && + installedPkg?.attributes?.installed_es && + installedPkg.attributes.installed_es.length > 0 + ) { + const { installed_es: installedEs } = installedPkg.attributes; + + logger.debug('Retry transition - clean up transforms'); + await withPackageSpan('Retry transition - clean up ilm transforms', async () => { + await cleanupTransforms(installedEs, esClient); + }); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts index 3515fd304b356b..b03c1466404880 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.test.ts @@ -19,39 +19,72 @@ import { ElasticsearchAssetType } from '../../../../../types'; import type { EsAssetReference, Installation } from '../../../../../../common'; import { appContextService } from '../../../../app_context'; import { createAppContextStartContractMock } from '../../../../../mocks'; -import { saveArchiveEntriesFromAssetsMap } from '../../../archive/storage'; +import { saveArchiveEntriesFromAssetsMap, removeArchiveEntries } from '../../../archive/storage'; -import { stepSaveArchiveEntries } from './step_save_archive_entries'; +import { stepSaveArchiveEntries, cleanupArchiveEntriesStep } from './step_save_archive_entries'; -jest.mock('../../../archive/storage'); +jest.mock('../../../archive/storage', () => { + return { + ...jest.requireActual('../../../archive/storage'), + saveArchiveEntriesFromAssetsMap: jest.fn(), + removeArchiveEntries: jest.fn(), + }; +}); const mockedSaveArchiveEntriesFromAssetsMap = saveArchiveEntriesFromAssetsMap as jest.MockedFunction; -describe('stepSaveArchiveEntries', () => { - let soClient: jest.Mocked; - let esClient: jest.Mocked; - const getMockInstalledPackageSo = ( - installedEs: EsAssetReference[] = [] - ): SavedObject => { - return { - id: 'mocked-package', - attributes: { - name: 'test-package', - version: '1.0.0', - install_status: 'installing', - install_version: '1.0.0', - install_started_at: new Date().toISOString(), - install_source: 'registry', - verification_status: 'verified', - installed_kibana: [] as any, - installed_es: installedEs, - es_index_patterns: {}, - }, - type: PACKAGES_SAVED_OBJECT_TYPE, - references: [], - }; +const mockedRemoveArchiveEntries = removeArchiveEntries as jest.MockedFunction< + typeof removeArchiveEntries +>; +let soClient: jest.Mocked; +let esClient: jest.Mocked; + +const packageInstallContext = { + packageInfo: { + title: 'title', + name: 'test-package', + version: '1.0.0', + description: 'test', + type: 'integration', + categories: ['cloud', 'custom'], + format_version: 'string', + release: 'experimental', + conditions: { kibana: { version: 'x.y.z' } }, + owner: { github: 'elastic/fleet' }, + } as any, + paths: ['some/path/1', 'some/path/2'], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', + Buffer.from('{"content": "data"}'), + ], + ]), +}; +const getMockInstalledPackageSo = ( + installedEs: EsAssetReference[] = [] +): SavedObject => { + return { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: installedEs, + es_index_patterns: {}, + package_assets: [], + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], }; +}; + +describe('stepSaveArchiveEntries', () => { beforeEach(async () => { soClient = savedObjectsClientMock.create(); esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -61,27 +94,6 @@ describe('stepSaveArchiveEntries', () => { jest.mocked(mockedSaveArchiveEntriesFromAssetsMap).mockReset(); }); - const packageInstallContext = { - packageInfo: { - title: 'title', - name: 'test-package', - version: '1.0.0', - description: 'test', - type: 'integration', - categories: ['cloud', 'custom'], - format_version: 'string', - release: 'experimental', - conditions: { kibana: { version: 'x.y.z' } }, - owner: { github: 'elastic/fleet' }, - } as any, - paths: ['some/path/1', 'some/path/2'], - assetsMap: new Map([ - [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', - Buffer.from('{"content": "data"}'), - ], - ]), - }; appContextService.start( createAppContextStartContractMock({ internal: { @@ -182,3 +194,161 @@ describe('stepSaveArchiveEntries', () => { }); }); }); + +describe('cleanupArchiveEntriesStep', () => { + const mockInstalledPackageSo: SavedObject = { + id: 'mocked-package', + attributes: { + name: 'test-package', + version: '1.0.0', + install_status: 'installing', + install_version: '1.0.0', + install_started_at: new Date().toISOString(), + install_source: 'registry', + verification_status: 'verified', + installed_kibana: [] as any, + installed_es: [] as any, + es_index_patterns: {}, + }, + type: PACKAGES_SAVED_OBJECT_TYPE, + references: [], + }; + + beforeEach(async () => { + soClient = savedObjectsClientMock.create(); + esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + appContextService.start(createAppContextStartContractMock()); + }); + afterEach(async () => { + mockedRemoveArchiveEntries.mockReset(); + }); + const packageAssets = [ + { + id: 'asset1', + type: 'epm-packages-assets', + }, + ]; + it('should clean up archive entries', async () => { + await cleanupArchiveEntriesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + package_assets: packageAssets as any, + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'save_archive_entries_from_assets_map' as any, + }); + + expect(mockedRemoveArchiveEntries).toBeCalledWith({ + savedObjectsClient: expect.anything(), + refs: packageAssets, + }); + }); + + it('should not clean up assets if force is passed', async () => { + await cleanupArchiveEntriesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + package_assets: packageAssets as any, + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + force: true, + retryFromLastState: true, + initialState: 'save_archive_entries_from_assets_map' as any, + }); + + expect(mockedRemoveArchiveEntries).not.toBeCalled(); + }); + + it('should not clean up assets if retryFromLastState is not passed', async () => { + await cleanupArchiveEntriesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + package_assets: packageAssets as any, + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + initialState: 'save_archive_entries_from_assets_map' as any, + }); + + expect(mockedRemoveArchiveEntries).not.toBeCalled(); + }); + + it('should not clean up assets if initialState != save_archive_entries_from_assets_map', async () => { + await cleanupArchiveEntriesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + attributes: { + ...mockInstalledPackageSo.attributes, + package_assets: packageAssets as any, + }, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'create_restart_install' as any, + }); + + expect(mockedRemoveArchiveEntries).not.toBeCalled(); + }); + + it('should not clean up assets if attributes are not present', async () => { + await cleanupArchiveEntriesStep({ + savedObjectsClient: soClient, + // @ts-ignore + savedObjectsImporter: jest.fn(), + esClient, + logger: loggerMock.create(), + packageInstallContext, + installedPkg: { + ...mockInstalledPackageSo, + }, + installType: 'install', + installSource: 'registry', + spaceId: DEFAULT_SPACE_ID, + retryFromLastState: true, + initialState: 'save_archive_entries_from_assets_map' as any, + }); + + expect(mockedRemoveArchiveEntries).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts index ca65b04e553030..b0d5bb67627a67 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/step_save_archive_entries.ts @@ -8,11 +8,12 @@ import { ASSETS_SAVED_OBJECT_TYPE } from '../../../../../constants'; import type { PackageAssetReference } from '../../../../../types'; -import { saveArchiveEntriesFromAssetsMap } from '../../../archive/storage'; +import { removeArchiveEntries, saveArchiveEntriesFromAssetsMap } from '../../../archive/storage'; import { withPackageSpan } from '../../utils'; import type { InstallContext } from '../_state_machine_package_install'; +import { INSTALL_STATES } from '../../../../../../common/types'; export async function stepSaveArchiveEntries(context: InstallContext) { const { packageInstallContext, savedObjectsClient, installSource } = context; @@ -37,3 +38,24 @@ export async function stepSaveArchiveEntries(context: InstallContext) { return { packageAssetRefs }; } + +export async function cleanupArchiveEntriesStep(context: InstallContext) { + const { logger, savedObjectsClient, installedPkg, retryFromLastState, force, initialState } = + context; + + // In case of retry clean up previous installed assets + if ( + !force && + retryFromLastState && + initialState === INSTALL_STATES.SAVE_ARCHIVE_ENTRIES && + installedPkg?.attributes?.package_assets && + installedPkg.attributes.package_assets.length > 0 + ) { + const { package_assets: packageAssets } = installedPkg.attributes; + + logger.debug('Retry transition - clean up package archive assets'); + await withPackageSpan('Retry transition - clean up package archive assets', async () => { + await removeArchiveEntries({ savedObjectsClient, refs: packageAssets }); + }); + } +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.ts b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.ts index 17854f69454e94..09ef396591d925 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install_state_machine/steps/update_latest_executed_state.ts @@ -45,3 +45,25 @@ export const updateLatestExecutedState = async (context: InstallContext) => { } } }; + +export const cleanupLatestExecutedState = async (context: InstallContext) => { + const { logger, savedObjectsClient, packageInstallContext } = context; + const { packageInfo } = packageInstallContext; + const { name: pkgName } = packageInfo; + + try { + auditLoggingService.writeCustomSoAuditLog({ + action: 'update', + id: pkgName, + savedObjectType: PACKAGES_SAVED_OBJECT_TYPE, + }); + logger.debug(`Cleaning up latest executed state`); + return await withPackageSpan('Clean up latest executed state', () => + savedObjectsClient.update(PACKAGES_SAVED_OBJECT_TYPE, pkgName, { + latest_executed_state: {}, + }) + ); + } catch (err) { + logger.error(`Failed to clean up latest executed state: ${err}`); + } +}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts index 08f83aa8286321..ac3f5def5d09c9 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts @@ -95,7 +95,7 @@ export async function removeInstallation(options: { // Delete the installed assets. Don't include installation.package_assets. Those are irrelevant to users const installedAssets = [...installation.installed_kibana, ...installation.installed_es]; - await deleteAssets(installation, savedObjectsClient, esClient); + await deleteAssets(installation, esClient); // Delete the manager saved object with references to the asset objects // could also update with [] or some other state @@ -133,7 +133,7 @@ export async function removeInstallation(options: { * generally better to delete assets directly if the package is known to be * installed in 8.x or later. */ -async function deleteKibanaAssets({ +export async function deleteKibanaAssets({ installedObjects, packageInfo, spaceId = DEFAULT_SPACE_ID, @@ -207,7 +207,7 @@ async function bulkDeleteSavedObjects( } } -function deleteESAssets( +export function deleteESAssets( installedObjects: EsAssetReference[], esClient: ElasticsearchClient ): Array> { @@ -230,25 +230,9 @@ function deleteESAssets( } }); } +type Tuple = [EsAssetReference[], EsAssetReference[], EsAssetReference[], EsAssetReference[]]; -async function deleteAssets( - { - installed_es: installedEs, - installed_kibana: installedKibana, - installed_kibana_space_id: spaceId = DEFAULT_SPACE_ID, - additional_spaces_installed_kibana: installedInAdditionalSpacesKibana = {}, - name, - version, - }: Installation, - savedObjectsClient: SavedObjectsClientContract, - esClient: ElasticsearchClient -) { - const logger = appContextService.getLogger(); - // must unset default_pipelines settings in indices first, or pipelines associated with an index cannot not be deleted - // must delete index templates first, or component templates which reference them cannot be deleted - // must delete ingestPipelines first, or ml models referenced in them cannot be deleted. - // separate the assets into Index Templates and other assets. - type Tuple = [EsAssetReference[], EsAssetReference[], EsAssetReference[], EsAssetReference[]]; +export const splitESAssets = (installedEs: EsAssetReference[]) => { const [indexTemplatesAndPipelines, indexAssets, transformAssets, otherAssets] = installedEs.reduce( ( @@ -277,6 +261,30 @@ async function deleteAssets( }, [[], [], [], []] ); + return { indexTemplatesAndPipelines, indexAssets, transformAssets, otherAssets }; +}; + +/** + * deletePrerequisiteAssets removes the ES assets that need to be deleted first and in a certain order. + * All the other assets can be deleted after these (see deleteAssets) + */ +export async function deletePrerequisiteAssets( + { + indexAssets, + transformAssets, + indexTemplatesAndPipelines, + }: { + indexAssets: EsAssetReference[]; + transformAssets: EsAssetReference[]; + indexTemplatesAndPipelines: EsAssetReference[]; + }, + esClient: ElasticsearchClient +) { + const logger = appContextService.getLogger(); + // must unset default_pipelines settings in indices first, or pipelines associated with an index cannot not be deleted + // must delete index templates first, or component templates which reference them cannot be deleted + // must delete ingestPipelines first, or ml models referenced in them cannot be deleted. + // separate the assets into Index Templates and other assets. try { // must first unset any default pipeline associated with any existing indices @@ -285,15 +293,48 @@ async function deleteAssets( indexAssets.map((asset) => updateIndexSettings(esClient, asset.id, { default_pipeline: '' })) ); - // in case transform's destination index contains any pipline, + // in case transform's destination index contains any pipeline, // we should delete the transforms first await Promise.all(deleteESAssets(transformAssets, esClient)); // then delete index templates and pipelines await Promise.all(deleteESAssets(indexTemplatesAndPipelines, esClient)); + } catch (err) { + // in the rollback case, partial installs are likely, so missing assets are not an error + if (!SavedObjectsErrorHelpers.isNotFoundError(err)) { + logger.error(err); + } + } +} + +async function deleteAssets( + { + installed_es: installedEs, + installed_kibana: installedKibana, + installed_kibana_space_id: spaceId = DEFAULT_SPACE_ID, + additional_spaces_installed_kibana: installedInAdditionalSpacesKibana = {}, + name, + version, + }: Installation, + esClient: ElasticsearchClient +) { + const logger = appContextService.getLogger(); + const { indexTemplatesAndPipelines, indexAssets, transformAssets, otherAssets } = + splitESAssets(installedEs); + + // delete assets that need to be deleted first + await deletePrerequisiteAssets( + { + indexAssets, + transformAssets, + indexTemplatesAndPipelines, + }, + esClient + ); + // delete the other asset types + try { const packageInfo = await Registry.fetchInfo(name, version); - // then the other asset types await Promise.all([ ...deleteESAssets(otherAssets, esClient), deleteKibanaAssets({ installedObjects: installedKibana, spaceId, packageInfo }), @@ -336,11 +377,9 @@ async function deleteComponentTemplate(esClient: ElasticsearchClient, name: stri } export async function deleteKibanaSavedObjectsAssets({ - savedObjectsClient, installedPkg, spaceId, }: { - savedObjectsClient: SavedObjectsClientContract; installedPkg: SavedObject; spaceId?: string; }) { @@ -380,3 +419,47 @@ export async function deleteKibanaSavedObjectsAssets({ } } } + +export function deleteILMPolicies( + installedObjects: EsAssetReference[], + esClient: ElasticsearchClient +) { + const idsToDelete = installedObjects + .filter( + (asset) => + asset.type === ElasticsearchAssetType.dataStreamIlmPolicy || + asset.type === ElasticsearchAssetType.ilmPolicy + ) + .map((asset) => asset.id); + return deleteIlms(esClient, idsToDelete); +} + +export function deleteMLModels( + installedObjects: EsAssetReference[], + esClient: ElasticsearchClient +) { + const idsToDelete = installedObjects + .filter((asset) => asset.type === ElasticsearchAssetType.mlModel) + .map((asset) => asset.id); + return deleteMlModel(esClient, idsToDelete); +} + +export function cleanupComponentTemplate( + installedObjects: EsAssetReference[], + esClient: ElasticsearchClient +) { + const idsToDelete = installedObjects + .filter((asset) => asset.type === ElasticsearchAssetType.mlModel) + .map((asset) => asset.id); + return deleteComponentTemplate(esClient, idsToDelete[0]); +} + +export function cleanupTransforms( + installedObjects: EsAssetReference[], + esClient: ElasticsearchClient +) { + const idsToDelete = installedObjects + .filter((asset) => asset.type === ElasticsearchAssetType.transform) + .map((asset) => asset.id); + return deleteTransforms(esClient, idsToDelete); +} diff --git a/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.test.ts b/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.test.ts index 3a90fb5a90fa3a..07ec6593ec9e53 100644 --- a/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.test.ts +++ b/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.test.ts @@ -29,6 +29,9 @@ describe('ensureAgentPoliciesFleetServerKeysAndPolicies', () => { jest.mocked(appContextService).getSecurity.mockReturnValue({ authc: { apiKeys: { areAPIKeysEnabled: async () => true } }, } as any); + jest.mocked(appContextService).getExperimentalFeatures.mockReturnValue({ + asyncDeployPolicies: false, + } as any); mockedEnsureDefaultEnrollmentAPIKeyForAgentPolicy.mockReset(); mockedAgentPolicyService.getLatestFleetPolicy.mockReset(); diff --git a/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts b/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts index 07f368c3e7400a..f5ed816d96e612 100644 --- a/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts +++ b/x-pack/plugins/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts @@ -12,6 +12,7 @@ import { agentPolicyService } from '../agent_policy'; import { ensureDefaultEnrollmentAPIKeyForAgentPolicy } from '../api_keys'; import { SO_SEARCH_LIMIT } from '../../constants'; import { appContextService } from '../app_context'; +import { scheduleDeployAgentPoliciesTask } from '../agent_policies/deploy_agent_policies_task'; export async function ensureAgentPoliciesFleetServerKeysAndPolicies({ logger, @@ -35,7 +36,7 @@ export async function ensureAgentPoliciesFleetServerKeysAndPolicies({ perPage: SO_SEARCH_LIMIT, }); - const outdatedAgentPolicyIds: string[] = []; + const outdatedAgentPolicyIds: Array<{ id: string; spaceId?: string }> = []; await pMap( agentPolicies, @@ -46,7 +47,7 @@ export async function ensureAgentPoliciesFleetServerKeysAndPolicies({ ]); if ((latestFleetPolicy?.revision_idx ?? -1) < agentPolicy.revision) { - outdatedAgentPolicyIds.push(agentPolicy.id); + outdatedAgentPolicyIds.push({ id: agentPolicy.id, spaceId: agentPolicy.space_ids?.[0] }); } }, { @@ -54,9 +55,23 @@ export async function ensureAgentPoliciesFleetServerKeysAndPolicies({ } ); - if (outdatedAgentPolicyIds.length) { - await agentPolicyService.deployPolicies(soClient, outdatedAgentPolicyIds).catch((error) => { - logger.warn(`Error deploying policies: ${error.message}`, { error }); - }); + if (!outdatedAgentPolicyIds.length) { + return; + } + + if (appContextService.getExperimentalFeatures().asyncDeployPolicies) { + return scheduleDeployAgentPoliciesTask( + appContextService.getTaskManagerStart()!, + outdatedAgentPolicyIds + ); + } else { + return agentPolicyService + .deployPolicies( + soClient, + outdatedAgentPolicyIds.map(({ id }) => id) + ) + .catch((error) => { + logger.warn(`Error deploying policies: ${error.message}`, { error }); + }); } } diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts new file mode 100644 index 00000000000000..b77f1fa77a1bbc --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.test.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Integration } from '../../common'; +import { renderPackageManifestYAML } from './build_integration'; +import yaml from 'js-yaml'; + +describe('renderPackageManifestYAML', () => { + test('generates the package manifest correctly', () => { + const integration: Integration = { + title: 'Sample Integration', + name: 'sample-integration', + description: + ' This is a sample integration\n\nWith multiple lines and weird spacing. \n\n And more lines ', + logo: 'some-logo.png', + dataStreams: [ + { + name: 'data-stream-1', + title: 'Data Stream 1', + description: 'This is data stream 1', + inputTypes: ['filestream'], + rawSamples: ['{field: "value"}'], + pipeline: { + processors: [], + }, + docs: [], + samplesFormat: { name: 'ndjson', multiline: false }, + }, + { + name: 'data-stream-2', + title: 'Data Stream 2', + description: + 'This is data stream 2\nWith multiple lines of description\nBut otherwise, nothing special', + inputTypes: ['aws-cloudwatch'], + pipeline: { + processors: [], + }, + rawSamples: ['field="value"'], + docs: [], + samplesFormat: { name: 'structured' }, + }, + ], + }; + + const manifestContent = renderPackageManifestYAML(integration); + + // The manifest content must be parseable as YAML. + const manifest = yaml.safeLoad(manifestContent); + + expect(manifest).toBeDefined(); + expect(manifest.title).toBe(integration.title); + expect(manifest.name).toBe(integration.name); + expect(manifest.type).toBe('integration'); + expect(manifest.description).toBe(integration.description); + expect(manifest.icons).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts index 62972f6141c642..73113f6bf7b049 100644 --- a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts @@ -9,6 +9,7 @@ import AdmZip from 'adm-zip'; import nunjucks from 'nunjucks'; import { getDataPath } from '@kbn/utils'; import { join as joinPath } from 'path'; +import { safeDump } from 'js-yaml'; import type { DataStream, Integration } from '../../common'; import { createSync, ensureDirSync, generateUniqueId, removeDirSync } from '../util'; import { createAgentInput } from './agent'; @@ -18,7 +19,7 @@ import { createPipeline } from './pipeline'; const initialVersion = '1.0.0'; -export async function buildPackage(integration: Integration): Promise { +function configureNunjucks() { const templateDir = joinPath(__dirname, '../templates'); const agentTemplates = joinPath(templateDir, 'agent'); const manifestTemplates = joinPath(templateDir, 'manifest'); @@ -26,6 +27,10 @@ export async function buildPackage(integration: Integration): Promise { nunjucks.configure([templateDir, agentTemplates, manifestTemplates, systemTestTemplates], { autoescape: false, }); +} + +export async function buildPackage(integration: Integration): Promise { + configureNunjucks(); const workingDir = joinPath(getDataPath(), `integration-assistant-${generateUniqueId()}`); const packageDirectoryName = `${integration.name}-${initialVersion}`; @@ -116,7 +121,82 @@ async function createZipArchive(workingDir: string, packageDirectoryName: string return buffer; } -function createPackageManifest(packageDir: string, integration: Integration): void { +/* eslint-disable @typescript-eslint/naming-convention */ +/** + * Creates a package manifest dictionary. + * + * @param format_version - The format version of the package. + * @param package_title - The title of the package. + * @param package_name - The name of the package. + * @param package_version - The version of the package. + * @param package_description - The description of the package. + * @param package_logo - The package logo file name, if present. + * @param package_owner - The owner of the package. + * @param min_version - The minimum version of Kibana required for the package. + * @param inputs - An array of unique input objects containing type, title, and description. + * @returns The package manifest dictionary. + */ +function createPackageManifestDict( + format_version: string, + package_title: string, + package_name: string, + package_version: string, + package_description: string, + package_logo: string | undefined, + package_owner: string, + min_version: string, + inputs: Array<{ type: string; title: string; description: string }> +): { [key: string]: string | object } { + const data: { [key: string]: string | object } = { + format_version, + name: package_name, + title: package_title, + version: package_version, + description: package_description, + type: 'integration', + categories: ['security', 'iam'], + conditions: { + kibana: { + version: min_version, + }, + }, + policy_templates: [ + { + name: package_name, + title: package_title, + description: package_description, + inputs: inputs.map((input) => ({ + type: input.type, + title: `${input.title} : ${input.type}`, + description: input.description, + })), + }, + ], + owner: { + github: package_owner, + type: 'elastic', + }, + }; + + if (package_logo !== undefined && package_logo !== '') { + data.icons = { + src: '/img/logo.svg', + title: `${package_title} Logo`, + size: '32x32', + type: 'image/svg+xml', + }; + } + return data; +} +/* eslint-enable @typescript-eslint/naming-convention */ + +/** + * Render the package manifest for an integration. + * + * @param integration - The integration object. + * @returns The package manifest YAML rendered into a string. + */ +export function renderPackageManifestYAML(integration: Integration): string { const uniqueInputs: { [key: string]: { type: string; title: string; description: string } } = {}; integration.dataStreams.forEach((dataStream: DataStream) => { @@ -133,17 +213,22 @@ function createPackageManifest(packageDir: string, integration: Integration): vo const uniqueInputsList = Object.values(uniqueInputs); - const packageManifest = nunjucks.render('package_manifest.yml.njk', { - format_version: '3.1.4', - package_title: integration.title, - package_name: integration.name, - package_version: initialVersion, - package_description: integration.description, - package_logo: integration.logo, - package_owner: '@elastic/custom-integrations', - min_version: '^8.13.0', - inputs: uniqueInputsList, - }); + const packageData = createPackageManifestDict( + '3.1.4', // format_version + integration.title, // package_title + integration.name, // package_name + initialVersion, // package_version + integration.description, // package_description + integration.logo, // package_logo + '@elastic/custom-integrations', // package_owner + '^8.13.0', // min_version + uniqueInputsList // inputs + ); + + return safeDump(packageData); +} +function createPackageManifest(packageDir: string, integration: Integration): void { + const packageManifest = renderPackageManifestYAML(integration); createSync(joinPath(packageDir, 'manifest.yml'), packageManifest); } diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk deleted file mode 100644 index fa7b8d8c662664..00000000000000 --- a/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk +++ /dev/null @@ -1,34 +0,0 @@ -format_version: "{{ format_version }}" -name: "{{ package_name }}" -title: | - {{ package_title }} -version: {{ package_version }} -description: | - {{ package_description }} -type: integration -categories: - - security - - iam -conditions: - kibana: - version: {{ min_version }} -{% if package_logo %}icons: - - src: /img/logo.svg - title: "{{ package_name }} Logo" - size: 32x32 - type: image/svg+xml{% endif %} -policy_templates: - - name: {{ package_name }} - title: | - {{ package_title }} - description: | - {{ package_description}} - inputs: {% for input in inputs %} - - type: {{ input.type }} - title: | - {{ input.title }} : {{ input.type }} - description: | - {{ input.description }} {% endfor %} -owner: - github: "{{ package_owner }}" - type: elastic \ No newline at end of file diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index bfca879d18d73c..c38bfb2cc86f0d 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -28,6 +28,7 @@ import { DropIllustration } from '@kbn/chart-icons'; import { useDragDropContext, DragDropIdentifier, Droppable } from '@kbn/dom-drag-drop'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { ChartSizeSpec, isChartSizeEvent } from '@kbn/chart-expressions-common'; +import { estypes } from '@elastic/elasticsearch'; import { trackUiCounterEvents } from '../../../lens_ui_telemetry'; import { getSearchWarningMessages } from '../../../utils'; import { @@ -192,6 +193,7 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ // NOTE: initialRenderTime is only set once when the component mounts const visualizationRenderStartTime = useRef(NaN); const dataReceivedTime = useRef(NaN); + const esTookTime = useRef(0); const onRender$ = useCallback(() => { if (renderDeps.current) { @@ -203,9 +205,12 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ eventName: 'lensVisualizationRenderTime', duration: currentTime - visualizationRenderStartTime.current, key1: 'time_to_data', - value1: dataReceivedTime.current - visualizationRenderStartTime.current, + value1: + dataReceivedTime.current - visualizationRenderStartTime.current - esTookTime.current, key2: 'time_to_render', value2: currentTime - dataReceivedTime.current, + key3: 'es_took', + value3: esTookTime.current, }); } const datasourceEvents = Object.values(renderDeps.current.datasourceMap).reduce( @@ -263,6 +268,13 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ searchService: plugins.data.search, } ); + esTookTime.current = adapters.requests.getRequests().reduce((maxTime, { response }) => { + const took = + (response?.json as { rawResponse: estypes.SearchResponse | undefined } | undefined) + ?.rawResponse?.took ?? 0; + + return Math.max(maxTime, took); + }, 0); } if (requestWarnings.length) { diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/index.tsx index 6c70f6e5091fb0..4e609b35935f1f 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/index.tsx @@ -20,6 +20,10 @@ import { ALL_DATASETS_LOCATOR_ID, } from '@kbn/deeplinks-observability/locators'; import { getLogsLocatorsFromUrlService } from '@kbn/logs-shared-plugin/common'; +import { + ASSET_DETAILS_LOCATOR_ID, + type AssetDetailsLocatorParams, +} from '@kbn/observability-shared-plugin/common'; import { isJavaAgentName } from '../../../../../../common/agent_name'; import { SERVICE_NODE_NAME } from '../../../../../../common/es_fields/apm'; import { useApmPluginContext } from '../../../../../context/apm_plugin/use_apm_plugin_context'; @@ -55,6 +59,8 @@ export function InstanceActionsMenu({ serviceName, serviceNodeName, kuery, onClo const allDatasetsLocator = share.url.locators.get(ALL_DATASETS_LOCATOR_ID)!; const { nodeLogsLocator } = getLogsLocatorsFromUrlService(share.url); + const assetDetailsLocator = + share.url.locators.get(ASSET_DETAILS_LOCATOR_ID); if (isPending(status)) { return ( @@ -95,6 +101,7 @@ export function InstanceActionsMenu({ serviceName, serviceNodeName, kuery, onClo metricsHref, allDatasetsLocator, nodeLogsLocator, + assetDetailsLocator, }); return ( diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/menu_sections.ts b/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/menu_sections.ts index a907a9c5c16706..7d7ced6c5a9905 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/menu_sections.ts +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_overview/service_overview_instances_table/instance_actions_menu/menu_sections.ts @@ -12,8 +12,8 @@ import { AllDatasetsLocatorParams } from '@kbn/deeplinks-observability/locators' import type { LocatorPublic } from '@kbn/share-plugin/public'; import { NodeLogsLocatorParams } from '@kbn/logs-shared-plugin/common'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; +import { type AssetDetailsLocator } from '@kbn/observability-shared-plugin/common'; import { APIReturnType } from '../../../../../services/rest/create_call_apm_api'; -import { getInfraHref } from '../../../../shared/links/infra_link'; import { Action, getNonEmptySections, @@ -25,14 +25,14 @@ type InstaceDetails = function getInfraMetricsQuery(timestamp?: string) { if (!timestamp) { - return { from: 0, to: 0 }; + return undefined; } const timeInMilliseconds = new Date(timestamp).getTime(); const fiveMinutes = moment.duration(5, 'minutes').asMilliseconds(); return { - from: timeInMilliseconds - fiveMinutes, - to: timeInMilliseconds + fiveMinutes, + from: new Date(timeInMilliseconds - fiveMinutes).toISOString(), + to: new Date(timeInMilliseconds + fiveMinutes).toISOString(), }; } @@ -43,6 +43,7 @@ export function getMenuSections({ metricsHref, allDatasetsLocator, nodeLogsLocator, + assetDetailsLocator, }: { instanceDetails: InstaceDetails; basePath: IBasePath; @@ -50,6 +51,7 @@ export function getMenuSections({ metricsHref: string; allDatasetsLocator: LocatorPublic; nodeLogsLocator: LocatorPublic; + assetDetailsLocator?: AssetDetailsLocator; }) { const podId = instanceDetails.kubernetes?.pod?.uid; const containerId = instanceDetails.container?.id; @@ -70,6 +72,9 @@ export function getMenuSections({ time, }); + const hasPodLink = !!podId && !!assetDetailsLocator; + const hasContainerLink = !!containerId && !!assetDetailsLocator; + const podActions: Action[] = [ { key: 'podLogs', @@ -84,13 +89,14 @@ export function getMenuSections({ label: i18n.translate('xpack.apm.serviceOverview.instancesTable.actionMenus.podMetrics', { defaultMessage: 'Pod metrics', }), - href: getInfraHref({ - app: 'metrics', - basePath, - path: `/link-to/pod-detail/${podId}`, - query: infraMetricsQuery, - }), - condition: !!podId, + href: hasPodLink + ? assetDetailsLocator.getRedirectUrl({ + assetId: podId, + assetType: 'pod', + assetDetails: { dateRange: infraMetricsQuery }, + }) + : undefined, + condition: hasPodLink, }, ]; @@ -109,13 +115,14 @@ export function getMenuSections({ 'xpack.apm.serviceOverview.instancesTable.actionMenus.containerMetrics', { defaultMessage: 'Container metrics' } ), - href: getInfraHref({ - app: 'metrics', - basePath, - path: `/link-to/container-detail/${containerId}`, - query: infraMetricsQuery, - }), - condition: !!containerId, + href: hasContainerLink + ? assetDetailsLocator.getRedirectUrl({ + assetId: containerId, + assetType: 'container', + assetDetails: { dateRange: infraMetricsQuery }, + }) + : undefined, + condition: hasContainerLink, }, ]; diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.test.ts b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.test.ts index 4660ac85f092cd..0ec439f177222c 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.test.ts +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.test.ts @@ -6,12 +6,17 @@ */ import { createMemoryHistory } from 'history'; +import rison from '@kbn/rison'; import { IBasePath } from '@kbn/core/public'; import { Transaction } from '../../../../typings/es_schemas/ui/transaction'; import { getSections } from './sections'; import { apmRouter as apmRouterBase, ApmRouter } from '../../routing/apm_route_config'; import { logsLocatorsMock } from '../../../context/apm_plugin/mock_apm_plugin_context'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; +import { + AssetDetailsLocatorParams, + AssetDetailsLocator, +} from '@kbn/observability-shared-plugin/common'; const apmRouter = { ...apmRouterBase, @@ -21,6 +26,15 @@ const apmRouter = { const { nodeLogsLocator, traceLogsLocator } = logsLocatorsMock; const uptimeLocator = sharePluginMock.createLocator(); +const mockAssetDetailsLocator = { + getRedirectUrl: jest + .fn() + .mockImplementation( + ({ assetId, assetType, assetDetails }: AssetDetailsLocatorParams) => + `/node-mock/${assetType}/${assetId}?receivedParams=${rison.encodeUnknown(assetDetails)}` + ), +} as unknown as jest.Mocked; + const expectLogsLocatorsToBeCalled = () => { expect(nodeLogsLocator.getRedirectUrl).toBeCalledTimes(3); expect(traceLogsLocator.getRedirectUrl).toBeCalledTimes(1); @@ -69,6 +83,7 @@ describe('Transaction action menu', () => { rangeTo: 'now', environment: 'ENVIRONMENT_ALL', dataViewId: 'apm_static_data_view_id_default', + assetDetailsLocator: mockAssetDetailsLocator, }) ).toEqual([ [ @@ -137,6 +152,7 @@ describe('Transaction action menu', () => { rangeTo: 'now', environment: 'ENVIRONMENT_ALL', dataViewId: 'apm_static_data_view_id_default', + assetDetailsLocator: mockAssetDetailsLocator, }) ).toEqual([ [ @@ -153,7 +169,7 @@ describe('Transaction action menu', () => { { key: 'podMetrics', label: 'Pod metrics', - href: 'some-basepath/app/metrics/link-to/pod-detail/123?from=1580986500000&to=1580987100000', + href: "/node-mock/pod/123?receivedParams=(dateRange:(from:'2020-02-06T10:55:00.000Z',to:'2020-02-06T11:05:00.000Z'))", condition: true, }, ], @@ -223,6 +239,7 @@ describe('Transaction action menu', () => { rangeTo: 'now', environment: 'ENVIRONMENT_ALL', dataViewId: 'apm_static_data_view_id_default', + assetDetailsLocator: mockAssetDetailsLocator, }) ).toEqual([ [ @@ -239,7 +256,7 @@ describe('Transaction action menu', () => { { key: 'hostMetrics', label: 'Host metrics', - href: 'some-basepath/app/metrics/link-to/host-detail/foo?from=1580986500000&to=1580987100000', + href: "/node-mock/host/foo?receivedParams=(dateRange:(from:'2020-02-06T10:55:00.000Z',to:'2020-02-06T11:05:00.000Z'))", condition: true, }, ], diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.ts b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.ts index 781a992e1f6124..f30deed376e866 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.ts +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/sections.ts @@ -13,13 +13,13 @@ import moment from 'moment'; import type { getLogsLocatorsFromUrlService } from '@kbn/logs-shared-plugin/common'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; import type { ProfilingLocators } from '@kbn/observability-shared-plugin/public'; +import type { AssetDetailsLocator } from '@kbn/observability-shared-plugin/common'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { SerializableRecord } from '@kbn/utility-types'; import { Environment } from '../../../../common/environment_rt'; import type { Transaction } from '../../../../typings/es_schemas/ui/transaction'; import { getDiscoverHref } from '../links/discover_links/discover_link'; import { getDiscoverQuery } from '../links/discover_links/discover_transaction_link'; -import { getInfraHref } from '../links/infra_link'; import { SectionRecord, getNonEmptySections, Action } from './sections_helper'; import { HOST_NAME, TRACE_ID } from '../../../../common/es_fields/apm'; import { ApmRouter } from '../../routing/apm_route_config'; @@ -29,8 +29,8 @@ function getInfraMetricsQuery(transaction: Transaction) { const fiveMinutes = moment.duration(5, 'minutes').asMilliseconds(); return { - from: timestamp - fiveMinutes, - to: timestamp + fiveMinutes, + from: new Date(timestamp - fiveMinutes).toISOString(), + to: new Date(timestamp + fiveMinutes).toISOString(), }; } @@ -47,6 +47,7 @@ export const getSections = ({ environment, logsLocators, dataViewId, + assetDetailsLocator, }: { transaction?: Transaction; basePath: IBasePath; @@ -60,6 +61,7 @@ export const getSections = ({ environment: Environment; logsLocators: ReturnType; dataViewId?: string; + assetDetailsLocator?: AssetDetailsLocator; }) => { if (!transaction) return []; @@ -103,6 +105,10 @@ export const getSections = ({ time, }); + const hasPodLink = !!podId && infraLinksAvailable && !!assetDetailsLocator; + const hasContainerLink = !!containerId && infraLinksAvailable && !!assetDetailsLocator; + const hasHostLink = !!hostName && infraLinksAvailable && !!assetDetailsLocator; + const podActions: Action[] = [ { key: 'podLogs', @@ -117,13 +123,16 @@ export const getSections = ({ label: i18n.translate('xpack.apm.transactionActionMenu.showPodMetricsLinkLabel', { defaultMessage: 'Pod metrics', }), - href: getInfraHref({ - app: 'metrics', - basePath, - path: `/link-to/pod-detail/${podId}`, - query: infraMetricsQuery, - }), - condition: !!podId && infraLinksAvailable, + href: hasPodLink + ? assetDetailsLocator.getRedirectUrl({ + assetId: podId, + assetType: 'pod', + assetDetails: { + dateRange: infraMetricsQuery, + }, + }) + : undefined, + condition: hasPodLink, }, ]; @@ -141,13 +150,14 @@ export const getSections = ({ label: i18n.translate('xpack.apm.transactionActionMenu.showContainerMetricsLinkLabel', { defaultMessage: 'Container metrics', }), - href: getInfraHref({ - app: 'metrics', - basePath, - path: `/link-to/container-detail/${containerId}`, - query: infraMetricsQuery, - }), - condition: !!containerId && infraLinksAvailable, + href: hasContainerLink + ? assetDetailsLocator.getRedirectUrl({ + assetId: containerId, + assetType: 'container', + assetDetails: { dateRange: infraMetricsQuery }, + }) + : undefined, + condition: hasContainerLink, }, ]; @@ -165,13 +175,16 @@ export const getSections = ({ label: i18n.translate('xpack.apm.transactionActionMenu.showHostMetricsLinkLabel', { defaultMessage: 'Host metrics', }), - href: getInfraHref({ - app: 'metrics', - basePath, - path: `/link-to/host-detail/${hostName}`, - query: infraMetricsQuery, - }), - condition: !!hostName && infraLinksAvailable, + href: hasHostLink + ? assetDetailsLocator.getRedirectUrl({ + assetId: hostName, + assetType: 'host', + assetDetails: { + dateRange: infraMetricsQuery, + }, + }) + : undefined, + condition: hasHostLink, }, { key: 'hostProfilingFlamegraph', diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx index 29e5da6842165f..90cbbec97ac16a 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx @@ -10,6 +10,7 @@ import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { License } from '@kbn/licensing-plugin/common/license'; +import rison from '@kbn/rison'; import { LOGS_LOCATOR_ID, NODE_LOGS_LOCATOR_ID, @@ -32,6 +33,20 @@ import * as useAdHocApmDataView from '../../../hooks/use_adhoc_apm_data_view'; import { useProfilingIntegrationSetting } from '../../../hooks/use_profiling_integration_setting'; import { uptimeOverviewLocatorID } from '@kbn/observability-plugin/common'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; +import { + AssetDetailsLocator, + AssetDetailsLocatorParams, + ASSET_DETAILS_LOCATOR_ID, +} from '@kbn/observability-shared-plugin/common'; + +const mockAssetDetailsLocator = { + getRedirectUrl: jest + .fn() + .mockImplementation( + ({ assetId, assetType, assetDetails }: AssetDetailsLocatorParams) => + `/node-mock/${assetType}/${assetId}?receivedParams=${rison.encodeUnknown(assetDetails)}` + ), +} as unknown as jest.Mocked; const apmContextMock = { ...mockApmPluginContextValue, @@ -63,6 +78,9 @@ const apmContextMock = { ), }; } + if (id === ASSET_DETAILS_LOCATOR_ID) { + return mockAssetDetailsLocator; + } }, }, }, @@ -185,7 +203,7 @@ describe('TransactionActionMenu ', () => { const { getByText } = await renderTransaction(Transactions.transactionWithKubernetesData); expect((getByText('Pod metrics').parentElement as HTMLAnchorElement).href).toEqual( - 'http://localhost/basepath/app/metrics/link-to/pod-detail/pod123456abcdef?from=1545091770952&to=1545092370952' + 'http://localhost/node-mock/pod/pod123456abcdef?receivedParams=(dateRange:(from:%272018-12-18T00:09:30.952Z%27,to:%272018-12-18T00:19:30.952Z%27))' ); }); }); @@ -215,7 +233,7 @@ describe('TransactionActionMenu ', () => { const { getByText } = await renderTransaction(Transactions.transactionWithContainerData); expect((getByText('Container metrics').parentElement as HTMLAnchorElement).href).toEqual( - 'http://localhost/basepath/app/metrics/link-to/container-detail/container123456abcdef?from=1545091770952&to=1545092370952' + 'http://localhost/node-mock/container/container123456abcdef?receivedParams=(dateRange:(from:%272018-12-18T00:09:30.952Z%27,to:%272018-12-18T00:19:30.952Z%27))' ); }); }); @@ -245,7 +263,7 @@ describe('TransactionActionMenu ', () => { const { getByText } = await renderTransaction(Transactions.transactionWithHostData); expect((getByText('Host metrics').parentElement as HTMLAnchorElement).href).toEqual( - 'http://localhost/basepath/app/metrics/link-to/host-detail/227453131a17?from=1545091770952&to=1545092370952' + 'http://localhost/node-mock/host/227453131a17?receivedParams=(dateRange:(from:%272018-12-18T00:09:30.952Z%27,to:%272018-12-18T00:19:30.952Z%27))' ); }); }); diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.tsx index 05aaa7ccdad73e..4f45441ea19372 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/transaction_action_menu/transaction_action_menu.tsx @@ -7,7 +7,11 @@ import { EuiButton } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ObservabilityTriggerId } from '@kbn/observability-shared-plugin/common'; +import { + ASSET_DETAILS_LOCATOR_ID, + type AssetDetailsLocatorParams, + ObservabilityTriggerId, +} from '@kbn/observability-shared-plugin/common'; import { ActionMenu, ActionMenuDivider, @@ -127,6 +131,9 @@ function ActionMenuSections({ const infraLinksAvailable = useApmFeatureFlag(ApmFeatureFlagName.InfraUiAvailable); + const assetDetailsLocator = + share.url.locators.get(ASSET_DETAILS_LOCATOR_ID); + const { query: { rangeFrom, rangeTo, environment }, } = useAnyOfApmParams( @@ -149,6 +156,7 @@ function ActionMenuSections({ environment, logsLocators, dataViewId: dataView?.id, + assetDetailsLocator, }); const externalMenuItems = useAsync(() => { diff --git a/x-pack/plugins/observability_solution/infra/common/alerting/metrics/alert_link.ts b/x-pack/plugins/observability_solution/infra/common/alerting/metrics/alert_link.ts index 95a2fd85eb9fa0..a0df751014e78a 100644 --- a/x-pack/plugins/observability_solution/infra/common/alerting/metrics/alert_link.ts +++ b/x-pack/plugins/observability_solution/infra/common/alerting/metrics/alert_link.ts @@ -11,6 +11,7 @@ import { encode } from '@kbn/rison'; import { ParsedTechnicalFields } from '@kbn/rule-registry-plugin/common/parse_technical_fields'; import { type InventoryItemType, findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import type { LocatorPublic } from '@kbn/share-plugin/common'; +import { SupportedAssetTypes } from '@kbn/observability-shared-plugin/common'; import { MetricsExplorerLocatorParams, type AssetDetailsLocatorParams, @@ -18,7 +19,6 @@ import { } from '@kbn/observability-shared-plugin/common'; import { castArray } from 'lodash'; import { fifteenMinutesInMilliseconds } from '../../constants'; -import { SupportedAssetTypes } from '../../asset_details/types'; const ALERT_RULE_PARAMTERS_INVENTORY_METRIC_ID = `${ALERT_RULE_PARAMETERS}.criteria.metric`; export const ALERT_RULE_PARAMETERS_NODE_TYPE = `${ALERT_RULE_PARAMETERS}.nodeType`; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/link_to/link_to_metrics.tsx b/x-pack/plugins/observability_solution/infra/public/pages/link_to/link_to_metrics.tsx index a1280cb394079d..64724c210a8f4c 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/link_to/link_to_metrics.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/link_to/link_to_metrics.tsx @@ -20,6 +20,11 @@ interface LinkToPageProps { const ITEM_TYPES = inventoryModels.map((m) => m.id).join('|'); +/** + * @deprecated Link-to routes shouldn't be used anymore + * Instead please use locators registered for the infra plugin + * InventoryLocator & AssetDetailsLocator + */ export const LinkToMetricsPage: React.FC = (props) => { return ( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_node_detail.tsx b/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_node_detail.tsx index d0bac8d8c9bf25..045bdccc913bfe 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_node_detail.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_node_detail.tsx @@ -12,9 +12,9 @@ import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import { ASSET_DETAILS_LOCATOR_ID, type AssetDetailsLocatorParams, + SupportedAssetTypes, } from '@kbn/observability-shared-plugin/common'; import type { SerializableRecord } from '@kbn/utility-types'; -import { SupportedAssetTypes } from '../../../common/asset_details/types'; import { type AssetDetailsUrlState } from '../../components/asset_details/types'; import { ASSET_DETAILS_URL_STATE_KEY } from '../../components/asset_details/constants'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/application.tsx b/x-pack/plugins/observability_solution/investigate_app/public/application.tsx index 062d3be1f444e4..59a1de1fcf73ef 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/application.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/application.tsx @@ -9,6 +9,7 @@ import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Route, Router, Routes } from '@kbn/shared-ux-router'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import type { History } from 'history'; import React, { useMemo } from 'react'; import type { Observable } from 'rxjs'; @@ -18,6 +19,8 @@ import { getRoutes } from './routes/config'; import { InvestigateAppServices } from './services/types'; import type { InvestigateAppStartDependencies } from './types'; +const queryClient = new QueryClient(); + function Application({ coreStart, history, @@ -61,8 +64,6 @@ function Application({ ); }; - const queryClient = new QueryClient(); - return ( @@ -71,6 +72,7 @@ function Application({ + diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts index 62078d7d55bcaa..b27044ac5acbfb 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts @@ -7,8 +7,8 @@ export const investigationKeys = { all: ['investigation'] as const, - list: (params: { page: number; perPage: number }) => - [...investigationKeys.all, 'list', params] as const, + list: (params?: { page: number; perPage: number }) => + [...investigationKeys.all, 'list', ...(params ? [params] : [])] as const, fetch: (params: { id: string }) => [...investigationKeys.all, 'fetch', params] as const, notes: ['investigation', 'notes'] as const, fetchNotes: (params: { investigationId: string }) => diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts new file mode 100644 index 00000000000000..3c8dbe7712c226 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_delete_investigation.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useKibana } from './use_kibana'; +import { investigationKeys } from './query_key_factory'; + +type ServerError = IHttpFetchError; + +export function useDeleteInvestigation() { + const queryClient = useQueryClient(); + const { + core: { + http, + notifications: { toasts }, + }, + } = useKibana(); + + return useMutation( + ['deleteInvestigation'], + ({ investigationId }) => { + return http.delete(`/api/observability/investigations/${investigationId}`, { + version: '2023-10-31', + }); + }, + { + onSuccess: (response, {}) => { + toasts.addSuccess( + i18n.translate('xpack.investigateApp.deleteInvestigationSuccess', { + defaultMessage: 'Investigation deleted successfully', + }) + ); + queryClient.invalidateQueries({ + queryKey: investigationKeys.list(), + exact: false, + refetchType: 'all', + }); + }, + onError: (error, {}, context) => { + toasts.addError( + new Error( + error.body?.message ?? + i18n.translate('xpack.investigateApp.deleteInvestigationError', { + defaultMessage: 'Unable to delete investigation: an error occurred', + }) + ), + { + title: i18n.translate('xpack.investigateApp.deleteInvestigationErrorTitle', { + defaultMessage: 'Error', + }), + } + ); + }, + } + ); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx index bd1754c0a945f1..15b2e43def5196 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list.tsx @@ -4,21 +4,31 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; +import React, { useState } from 'react'; +import moment from 'moment'; +import { Criteria, EuiBasicTable, EuiBasicTableColumn, EuiLink, EuiBadge } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import React from 'react'; +import { InvestigationResponse } from '@kbn/investigation-shared/src/rest_specs/investigation'; +import { InvestigationListActions } from './investigation_list_actions'; import { useFetchInvestigationList } from '../../../hooks/use_fetch_investigation_list'; import { useKibana } from '../../../hooks/use_kibana'; import { paths } from '../../../../common/paths'; export function InvestigationList() { + const [pageIndex, setPageIndex] = useState(0); + const [pageSize, setPageSize] = useState(10); const { core: { http: { basePath }, + uiSettings, }, } = useKibana(); - const { data, isLoading, isError } = useFetchInvestigationList(); + const { data, isLoading, isError } = useFetchInvestigationList({ + page: pageIndex + 1, + perPage: pageSize, + }); + const dateFormat = uiSettings.get('dateFormat'); + const tz = uiSettings.get('dateFormat:tz'); if (isLoading) { return ( @@ -41,23 +51,90 @@ export function InvestigationList() { } const investigations = data?.results ?? []; + const total = data?.total ?? 0; + + const columns: Array> = [ + { + field: 'title', + name: i18n.translate('xpack.investigateApp.investigationList.titleLabel', { + defaultMessage: 'Name', + }), + render: (title: InvestigationResponse['title'], investigation: InvestigationResponse) => { + return ( + + {title} + + ); + }, + }, + { + field: 'createdBy', + name: i18n.translate('xpack.investigateApp.investigationList.createdByLabel', { + defaultMessage: 'Created by', + }), + truncateText: true, + }, + { + field: 'notes', + name: i18n.translate('xpack.investigateApp.investigationList.notesLabel', { + defaultMessage: 'Comments', + }), + render: (notes: InvestigationResponse['notes']) => {notes?.length || 0}, + }, + { + field: 'createdAt', + name: i18n.translate('xpack.investigateApp.investigationList.createdAtLabel', { + defaultMessage: 'Created at', + }), + render: (createdAt: InvestigationResponse['createdAt']) => ( + {moment(createdAt).tz(tz).format(dateFormat)} + ), + }, + { + field: 'status', + name: 'Status', + render: (status: InvestigationResponse['status']) => { + const color = status === 'ongoing' ? 'danger' : 'success'; + return {status}; + }, + }, + { + name: 'Actions', + render: (investigation: InvestigationResponse) => ( + + ), + }, + ]; + + const pagination = { + pageIndex, + pageSize, + totalItemCount: total || 0, + pageSizeOptions: [10, 50], + showPerPageOptions: true, + }; + + const onTableChange = ({ page }: Criteria) => { + if (page) { + const { index, size } = page; + setPageIndex(index); + setPageSize(size); + } + }; return ( - - -
    - {investigations.map((investigation) => ( -
  • - - {investigation.title} - -
  • - ))} -
-
-
+ ); } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx new file mode 100644 index 00000000000000..b648247107cd61 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/components/investigation_list_actions.tsx @@ -0,0 +1,115 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useState, useEffect } from 'react'; +import { + EuiButton, + EuiButtonIcon, + EuiButtonEmpty, + EuiToolTip, + EuiModal, + EuiModalHeader, + EuiModalBody, + EuiModalFooter, + EuiModalHeaderTitle, + useGeneratedHtmlId, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { InvestigationResponse } from '@kbn/investigation-shared/src/rest_specs/investigation'; +import { useDeleteInvestigation } from '../../../hooks/use_delete_investigation'; +export function InvestigationListActions({ + investigation, +}: { + investigation: InvestigationResponse; +}) { + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + const { + mutate: deleteInvestigation, + isLoading: isDeleting, + isError, + isSuccess, + } = useDeleteInvestigation(); + const closeDeleteModal = () => setIsDeleteModalVisible(false); + + useEffect(() => { + if (isError || isSuccess) { + closeDeleteModal(); + } + }, [isError, isSuccess]); + + const modalTitleId = useGeneratedHtmlId(); + + return ( + <> + {isDeleteModalVisible && ( + + + + {i18n.translate('xpack.investigateApp.deleteModal.title', { + defaultMessage: 'Delete', + })} + + + + + {i18n.translate('xpack.investigateApp.deleteModal.description', { + defaultMessage: "You can't recover this investigation after deletion.", + })} + + + + + + {i18n.translate('xpack.investigateApp.deleteModal.cancel', { + defaultMessage: 'Cancel', + })} + + + + { + deleteInvestigation({ investigationId: investigation.id }); + }} + fill + color="danger" + isLoading={isDeleting} + > + {i18n.translate('xpack.investigateApp.deleteModal.confirm', { + defaultMessage: 'Delete', + })} + + + + + + )} + + setIsDeleteModalVisible(true)} + /> + + + ); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/investigation_list_page.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/investigation_list_page.tsx index f2e49e3f2696c5..fa83cb4e1be54a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/list/investigation_list_page.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/list/investigation_list_page.tsx @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { EuiButton } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/sections/metrics/host_link.tsx b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/sections/metrics/host_link.tsx index 91db16d08144aa..405c3c0381438e 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/sections/metrics/host_link.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/sections/metrics/host_link.tsx @@ -5,19 +5,40 @@ * 2.0. */ import React from 'react'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { + ASSET_DETAILS_LOCATOR_ID, + AssetDetailsLocatorParams, +} from '@kbn/observability-shared-plugin/common'; +import { SharePluginStart } from '@kbn/share-plugin/public'; import { StringOrNull } from '../../../../..'; interface Props { name: StringOrNull; - id: StringOrNull; + id: string; timerange: { from: number; to: number }; } export function HostLink({ name, id, timerange }: Props) { - const link = `../../app/metrics/link-to/host-detail/${id}?from=${timerange.from}&to=${timerange.to}`; + const { services } = useKibana<{ share?: SharePluginStart }>(); + + const assetDetailsLocator = + services.share?.url.locators.get(ASSET_DETAILS_LOCATOR_ID); + + const href = assetDetailsLocator?.getRedirectUrl({ + assetType: 'host', + assetId: id, + assetDetails: { + dateRange: { + from: new Date(timerange.from).toISOString(), + to: new Date(timerange.to).toISOString(), + }, + }, + }); + return ( <> - {name} + {name} ); } diff --git a/x-pack/plugins/observability_solution/observability_shared/common/index.ts b/x-pack/plugins/observability_solution/observability_shared/common/index.ts index 083bcdd2debde5..ab49080f313ba8 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/index.ts @@ -178,6 +178,7 @@ export { AssetDetailsFlyoutLocatorDefinition, ASSET_DETAILS_LOCATOR_ID, AssetDetailsLocatorDefinition, + SupportedAssetTypes, HostsLocatorDefinition, INVENTORY_LOCATOR_ID, InventoryLocatorDefinition, diff --git a/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/asset_details_locator.ts b/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/asset_details_locator.ts index 244660fc05f71d..9a5ec5c64796da 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/asset_details_locator.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/asset_details_locator.ts @@ -9,6 +9,11 @@ import rison from '@kbn/rison'; import { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; import { type AlertStatus } from '@kbn/rule-data-utils'; +export enum SupportedAssetTypes { + container = 'container', + host = 'host', +} + export type AssetDetailsLocator = LocatorPublic; export interface AssetDetailsLocatorParams extends SerializableRecord { @@ -47,8 +52,26 @@ export class AssetDetailsLocatorDefinition implements LocatorDefinition { - const legacyNodeDetailsQueryParams = rison.encodeUnknown(params._a); - const assetDetailsQueryParams = rison.encodeUnknown(params.assetDetails); + // Check which asset types are currently supported + const isSupportedByAssetDetails = Object.values(SupportedAssetTypes).includes( + params.assetType as SupportedAssetTypes + ); + + // Map the compatible parameters to _a compatible shape + const mappedAssetParams = + params.assetDetails && !isSupportedByAssetDetails + ? { + time: params.assetDetails.dateRange, + } + : undefined; + + const legacyNodeDetailsQueryParams = !isSupportedByAssetDetails + ? rison.encodeUnknown({ ...mappedAssetParams, ...params._a }) + : undefined; + + const assetDetailsQueryParams = isSupportedByAssetDetails + ? rison.encodeUnknown(params.assetDetails) + : undefined; const queryParams = []; if (assetDetailsQueryParams !== undefined) { diff --git a/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/locators.test.ts b/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/locators.test.ts index 8c7dc0d4b61136..fb9cbb8456dd30 100644 --- a/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/locators.test.ts +++ b/x-pack/plugins/observability_solution/observability_shared/common/locators/infra/locators.test.ts @@ -77,6 +77,24 @@ describe('Infra Locators', () => { expect(state).toBeDefined(); expect(Object.keys(state)).toHaveLength(0); }); + + it('should return correct fallback params for non-supported assetType using assetDetails', async () => { + const { assetDetailsLocator } = await setupAssetDetailsLocator(); + + const { app, path, state } = await assetDetailsLocator.getLocation({ + ...params, + assetType: 'pod', + }); + + const expectedDetails = rison.encodeUnknown({ + time: params.assetDetails.dateRange, + }); + + expect(app).toBe('metrics'); + expect(path).toBe(`/detail/pod/${params.assetId}?_a=${expectedDetails}`); + expect(state).toBeDefined(); + expect(Object.keys(state)).toHaveLength(0); + }); }); describe('Asset Details Flyout Locator', () => { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/global_params/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/global_params/api.ts index 1499734639a33e..ce7f9bd81ea3da 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/global_params/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/global_params/api.ts @@ -47,6 +47,10 @@ export const editGlobalParam = async ({ ); export const deleteGlobalParams = async (ids: string[]): Promise => - apiService.delete(SYNTHETICS_API_URLS.PARAMS, undefined, { - ids, - }); + apiService.delete( + SYNTHETICS_API_URLS.PARAMS, + { version: INITIAL_REST_VERSION }, + { + ids, + } + ); diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx index 40374e6d49d714..f662d08e194750 100644 --- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx +++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx @@ -9,6 +9,12 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React, { useContext } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { + ASSET_DETAILS_LOCATOR_ID, + AssetDetailsLocatorParams, +} from '@kbn/observability-shared-plugin/common'; +import { SharePluginStart } from '@kbn/share-plugin/public'; import { IntegrationLink } from './integration_link'; import { getLegacyApmHref, @@ -55,6 +61,11 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { const { domain, podUid, containerId, ip } = extractSummaryValues(summary); + const { services } = useKibana<{ share?: SharePluginStart }>(); + + const assetDetailsLocator = + services.share?.url.locators.get(ASSET_DETAILS_LOCATOR_ID); + return isApmAvailable || isInfraAvailable || isLogsAvailable ? ( {isApmAvailable ? ( @@ -127,7 +138,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { description: 'This value is shown as the aria label value for screen readers.', } )} - href={getInfraKubernetesHref(summary, basePath)} + href={getInfraKubernetesHref(summary, assetDetailsLocator)} iconType="metricsApp" message={i18n.translate( 'xpack.uptime.monitorList.infraIntegrationAction.kubernetes.message', @@ -156,7 +167,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { defaultMessage: `Check Infrastructure UI for this monitor's container ID`, } )} - href={getInfraContainerHref(summary, basePath)} + href={getInfraContainerHref(summary, assetDetailsLocator)} iconType="metricsApp" message={i18n.translate( 'xpack.uptime.monitorList.infraIntegrationAction.container.message', diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.test.ts b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.test.ts index 970ac86f3777d1..b41e244e7ec517 100644 --- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.test.ts +++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.test.ts @@ -5,9 +5,21 @@ * 2.0. */ +import { + AssetDetailsLocator, + AssetDetailsLocatorParams, +} from '@kbn/observability-shared-plugin/common'; import { getInfraContainerHref, getInfraKubernetesHref, getInfraIpHref } from './get_infra_href'; import { MonitorSummary, makePing, Ping } from '../../../../../common/runtime_types'; +const mockAssetDetailsLocator = { + getRedirectUrl: jest + .fn() + .mockImplementation( + ({ assetId, assetType }: AssetDetailsLocatorParams) => `/node-mock/${assetType}/${assetId}` + ), +} as unknown as jest.Mocked; + describe('getInfraHref', () => { let summary: MonitorSummary; beforeEach(() => { @@ -38,21 +50,17 @@ describe('getInfraHref', () => { }); it('getInfraContainerHref creates a link for valid parameters', () => { - const result = getInfraContainerHref(summary, 'foo'); - expect(result).toMatchInlineSnapshot( - `"foo/app/metrics/link-to/container-detail/test-container-id"` - ); + const result = getInfraContainerHref(summary, mockAssetDetailsLocator); + expect(result).toMatchInlineSnapshot(`"/node-mock/container/test-container-id"`); }); - it('getInfraContainerHref does not specify a base path when none is available', () => { - expect(getInfraContainerHref(summary, '')).toMatchInlineSnapshot( - `"/app/metrics/link-to/container-detail/test-container-id"` - ); + it('getInfraContainerHref returns undefined when no locator is available', () => { + expect(getInfraContainerHref(summary, undefined)).toBeUndefined(); }); it('getInfraContainerHref returns undefined when no container id is present', () => { summary.state.summaryPings = []; - expect(getInfraContainerHref(summary, 'foo')).toBeUndefined(); + expect(getInfraContainerHref(summary, mockAssetDetailsLocator)).toBeUndefined(); }); it('getInfraContainerHref returns the first item when multiple container ids are supplied', () => { @@ -74,32 +82,30 @@ describe('getInfraHref', () => { container: { id: 'test-container-id-foo' }, }; summary.state.summaryPings = [pingTestContainerId, pingTestFooContainerId]; - expect(getInfraContainerHref(summary, 'bar')).toMatchInlineSnapshot( - `"bar/app/metrics/link-to/container-detail/test-container-id"` + expect(getInfraContainerHref(summary, mockAssetDetailsLocator)).toMatchInlineSnapshot( + `"/node-mock/container/test-container-id"` ); }); it('getInfraContainerHref returns undefined when summaryPings are undefined', () => { // @ts-expect-error delete summary.state.summaryPings; - expect(getInfraContainerHref(summary, '')).toBeUndefined(); + expect(getInfraContainerHref(summary, mockAssetDetailsLocator)).toBeUndefined(); }); it('getInfraKubernetesHref creates a link for valid parameters', () => { - const result = getInfraKubernetesHref(summary, 'foo'); + const result = getInfraKubernetesHref(summary, mockAssetDetailsLocator); expect(result).not.toBeUndefined(); - expect(result).toMatchInlineSnapshot(`"foo/app/metrics/link-to/pod-detail/test-pod-uid"`); + expect(result).toMatchInlineSnapshot(`"/node-mock/pod/test-pod-uid"`); }); - it('getInfraKubernetesHref does not specify a base path when none is available', () => { - expect(getInfraKubernetesHref(summary, '')).toMatchInlineSnapshot( - `"/app/metrics/link-to/pod-detail/test-pod-uid"` - ); + it('getInfraKubernetesHref return undefined when no locator is available', () => { + expect(getInfraKubernetesHref(summary, undefined)).toBeUndefined(); }); it('getInfraKubernetesHref returns undefined when no pod data is present', () => { summary.state.summaryPings = []; - expect(getInfraKubernetesHref(summary, 'foo')).toBeUndefined(); + expect(getInfraKubernetesHref(summary, mockAssetDetailsLocator)).toBeUndefined(); }); it('getInfraKubernetesHref selects the first pod uid when there are multiple', () => { @@ -121,20 +127,20 @@ describe('getInfraHref', () => { kubernetes: { pod: { uid: 'test-pod-uid-bar' } }, }; summary.state.summaryPings = [pingTestPodId, pingTestBarPodId]; - expect(getInfraKubernetesHref(summary, '')).toMatchInlineSnapshot( - `"/app/metrics/link-to/pod-detail/test-pod-uid"` + expect(getInfraKubernetesHref(summary, mockAssetDetailsLocator)).toMatchInlineSnapshot( + `"/node-mock/pod/test-pod-uid"` ); }); it('getInfraKubernetesHref returns undefined when summaryPings are undefined', () => { // @ts-expect-error delete summary.state.summaryPings; - expect(getInfraKubernetesHref(summary, '')).toBeUndefined(); + expect(getInfraKubernetesHref(summary, mockAssetDetailsLocator)).toBeUndefined(); }); it('getInfraKubernetesHref returns undefined when summaryPings are null', () => { delete summary.state.summaryPings![0]!.kubernetes!.pod!.uid; - expect(getInfraKubernetesHref(summary, '')).toBeUndefined(); + expect(getInfraKubernetesHref(summary, mockAssetDetailsLocator)).toBeUndefined(); }); it('getInfraIpHref creates a link for valid parameters', () => { diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.ts b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.ts index e1cf922983d215..91869dbe7465be 100644 --- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.ts +++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/lib/helper/observability_integration/get_infra_href.ts @@ -5,44 +5,51 @@ * 2.0. */ +import { AssetDetailsLocator } from '@kbn/observability-shared-plugin/common'; import { MonitorSummary, Ping } from '../../../../../common/runtime_types'; import { addBasePath } from './add_base_path'; import { buildHref } from './build_href'; export const getInfraContainerHref = ( - summary: MonitorSummary, - basePath: string + { state }: MonitorSummary, + locator?: AssetDetailsLocator ): string | undefined => { - const getHref = (value: string | string[] | undefined) => { - if (!value) { - return undefined; - } - const ret = !Array.isArray(value) ? value : value[0]; - return addBasePath( - basePath, - `/app/metrics/link-to/container-detail/${encodeURIComponent(ret)}` - ); - }; - return buildHref(summary.state.summaryPings || [], (ping: Ping) => ping?.container?.id, getHref); + if (!locator) { + return undefined; + } + + const pings = Array.isArray(state.summaryPings) ? state.summaryPings : [state.summaryPings]; + + // Pick the first container id if one is available + const containerId = pings[0]?.container?.id; + + return containerId + ? locator.getRedirectUrl({ + assetType: 'container', + assetId: containerId, + }) + : undefined; }; export const getInfraKubernetesHref = ( - summary: MonitorSummary, - basePath: string + { state }: MonitorSummary, + locator?: AssetDetailsLocator ): string | undefined => { - const getHref = (value: string | string[] | undefined) => { - if (!value) { - return undefined; - } - const ret = !Array.isArray(value) ? value : value[0]; - return addBasePath(basePath, `/app/metrics/link-to/pod-detail/${encodeURIComponent(ret)}`); - }; + if (!locator) { + return undefined; + } + + const pings = Array.isArray(state.summaryPings) ? state.summaryPings : [state.summaryPings]; + + // Pick the first pod id if one is available + const podId = pings[0]?.kubernetes?.pod?.uid; - return buildHref( - summary.state.summaryPings || [], - (ping: Ping) => ping?.kubernetes?.pod?.uid, - getHref - ); + return podId + ? locator.getRedirectUrl({ + assetType: 'pod', + assetId: podId, + }) + : undefined; }; export const getInfraIpHref = (summary: MonitorSummary, basePath: string) => { diff --git a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts index e0fc5d9317fc9b..c2963de50419cf 100644 --- a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts +++ b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts @@ -80,6 +80,11 @@ it('matches snapshot', () => { "required": true, "type": "keyword", }, + "kibana.alert.intended_timestamp": Object { + "array": false, + "required": false, + "type": "date", + }, "kibana.alert.last_detected": Object { "array": false, "required": false, diff --git a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts index c3c0f5c2480cbe..78043a961a1fd2 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts @@ -25,6 +25,7 @@ import { TIMESTAMP, VERSION, ALERT_RULE_EXECUTION_TIMESTAMP, + ALERT_INTENDED_TIMESTAMP, } from '@kbn/rule-data-utils'; import { mapKeys, snakeCase } from 'lodash/fp'; import type { IRuleDataClient } from '..'; @@ -55,11 +56,13 @@ const augmentAlerts = ({ options, kibanaVersion, currentTimeOverride, + intendedTimestamp, }: { alerts: Array<{ _id: string; _source: T }>; options: RuleExecutorOptions; kibanaVersion: string; currentTimeOverride: Date | undefined; + intendedTimestamp: Date | undefined; }) => { const commonRuleFields = getCommonAlertFields(options); return alerts.map((alert) => { @@ -69,6 +72,9 @@ const augmentAlerts = ({ [ALERT_RULE_EXECUTION_TIMESTAMP]: new Date(), [ALERT_START]: currentTimeOverride ?? new Date(), [ALERT_LAST_DETECTED]: currentTimeOverride ?? new Date(), + [ALERT_INTENDED_TIMESTAMP]: intendedTimestamp + ? intendedTimestamp + : currentTimeOverride ?? new Date(), [VERSION]: kibanaVersion, ...(options?.maintenanceWindowIds?.length ? { [ALERT_MAINTENANCE_WINDOW_IDS]: options.maintenanceWindowIds } @@ -251,6 +257,7 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper ...options.services, alertWithPersistence: async (alerts, refresh, maxAlerts = undefined, enrichAlerts) => { const numAlerts = alerts.length; + logger.debug(`Found ${numAlerts} alerts.`); const ruleDataClientWriter = await ruleDataClient.getWriter({ @@ -297,11 +304,17 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper alertsWereTruncated = true; } + let intendedTimestamp; + if (options.startedAtOverridden) { + intendedTimestamp = options.startedAt; + } + const augmentedAlerts = augmentAlerts({ alerts: enrichedAlerts, options, kibanaVersion: ruleDataClient.kibanaVersion, currentTimeOverride: undefined, + intendedTimestamp, }); const response = await ruleDataClientWriter.bulk({ @@ -381,6 +394,11 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper let alertsWereTruncated = false; + let intendedTimestamp; + if (options.startedAtOverridden) { + intendedTimestamp = options.startedAt; + } + if (writeAlerts && alerts.length > 0) { const suppressionWindowStart = dateMath.parse(suppressionWindow, { forceNow: currentTimeOverride, @@ -560,6 +578,7 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper options, kibanaVersion: ruleDataClient.kibanaVersion, currentTimeOverride, + intendedTimestamp, }); const bulkResponse = await ruleDataClientWriter.bulk({ diff --git a/x-pack/plugins/search_indices/common/routes.ts b/x-pack/plugins/search_indices/common/routes.ts new file mode 100644 index 00000000000000..3be5f465de5ab3 --- /dev/null +++ b/x-pack/plugins/search_indices/common/routes.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const GET_STATUS_ROUTE = '/internal/search_indices/status'; +export const GET_USER_PRIVILEGES_ROUTE = '/internal/search_indices/start_privileges'; + +export const POST_CREATE_INDEX_ROUTE = '/internal/search_indices/indices/create'; diff --git a/x-pack/plugins/search_indices/common/types.ts b/x-pack/plugins/search_indices/common/types.ts index 8c7af3889a5a23..ef3a46e0301b52 100644 --- a/x-pack/plugins/search_indices/common/types.ts +++ b/x-pack/plugins/search_indices/common/types.ts @@ -15,3 +15,11 @@ export interface UserStartPrivilegesResponse { canCreateIndex: boolean; }; } + +export interface CreateIndexRequest { + indexName: string; +} + +export interface CreateIndexResponse { + index: string; +} diff --git a/x-pack/plugins/observability_solution/infra/common/asset_details/types.ts b/x-pack/plugins/search_indices/public/analytics/constants.ts similarity index 68% rename from x-pack/plugins/observability_solution/infra/common/asset_details/types.ts rename to x-pack/plugins/search_indices/public/analytics/constants.ts index 685b2bcacb2e4c..77e177bf780635 100644 --- a/x-pack/plugins/observability_solution/infra/common/asset_details/types.ts +++ b/x-pack/plugins/search_indices/public/analytics/constants.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -export enum SupportedAssetTypes { - container = 'container', - host = 'host', + +export enum AnalyticsEvents { + startPageOpened = 'start_page_opened', + startCreateIndexClick = 'start_create_index', } diff --git a/x-pack/plugins/search_indices/public/application.tsx b/x-pack/plugins/search_indices/public/application.tsx index 5d7b5311ae1119..62c4edb42d02c5 100644 --- a/x-pack/plugins/search_indices/public/application.tsx +++ b/x-pack/plugins/search_indices/public/application.tsx @@ -11,20 +11,19 @@ import { CoreStart } from '@kbn/core/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { I18nProvider } from '@kbn/i18n-react'; -import { QueryClientProvider } from '@tanstack/react-query'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Router } from '@kbn/shared-ux-router'; import { UsageTrackerContextProvider } from './contexts/usage_tracker_context'; -import { initQueryClient } from './services/query_client'; import { SearchIndicesServicesContextDeps } from './types'; export const renderApp = async ( App: React.FC<{}>, core: CoreStart, services: SearchIndicesServicesContextDeps, - element: HTMLElement + element: HTMLElement, + queryClient: QueryClient ) => { - const queryClient = initQueryClient(core.notifications.toasts); ReactDOM.render( diff --git a/x-pack/plugins/search_indices/public/components/start/create_index.tsx b/x-pack/plugins/search_indices/public/components/start/create_index.tsx new file mode 100644 index 00000000000000..8bbee0168f7301 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/create_index.tsx @@ -0,0 +1,157 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useState } from 'react'; +import { + EuiButton, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiFormRow, + EuiIcon, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import type { UserStartPrivilegesResponse } from '../../../common'; +import { AnalyticsEvents } from '../../analytics/constants'; +import { useUsageTracker } from '../../hooks/use_usage_tracker'; +import { isValidIndexName, generateRandomIndexName } from '../../utils/indices'; + +import { useCreateIndex } from './hooks/use_create_index'; + +interface CreateIndexFormState { + indexName: string; +} + +function initCreateIndexState(): CreateIndexFormState { + return { + indexName: generateRandomIndexName(), + }; +} + +export interface CreateIndexFormProps { + userPrivileges?: UserStartPrivilegesResponse; +} + +export const CreateIndexForm = ({ userPrivileges }: CreateIndexFormProps) => { + const [formState, setFormState] = useState(initCreateIndexState()); + const [indexNameHasError, setIndexNameHasError] = useState(false); + const usageTracker = useUsageTracker(); + const { createIndex, isLoading } = useCreateIndex(); + const onCreateIndex = useCallback(() => { + if (!isValidIndexName(formState.indexName)) { + return; + } + usageTracker.click(AnalyticsEvents.startCreateIndexClick); + createIndex({ indexName: formState.indexName }); + }, [usageTracker, createIndex, formState.indexName]); + const onIndexNameChange = (e: React.ChangeEvent) => { + const newIndexName = e.target.value; + setFormState({ ...formState, indexName: e.target.value }); + const invalidIndexName = !isValidIndexName(newIndexName); + if (indexNameHasError !== invalidIndexName) { + setIndexNameHasError(invalidIndexName); + } + }; + + return ( + + + + + +

+ {i18n.translate('xpack.searchIndices.startPage.createIndex.title', { + defaultMessage: 'Create your first index', + })} +

+
+
+ + <> + +
+ +

+ {i18n.translate('xpack.searchIndices.startPage.createIndex.description', { + defaultMessage: + 'An index stores your data and defines the schema, or field mappings, for your searches', + })} +

+
+ + + + + + + {i18n.translate('xpack.searchIndices.startPage.createIndex.action.text', { + defaultMessage: 'Create my index', + })} + + + + {userPrivileges?.privileges?.canCreateApiKeys && ( + + + +

+ {i18n.translate( + 'xpack.searchIndices.startPage.createIndex.apiKeyCreation.description', + { + defaultMessage: "We'll create an API key for this index", + } + )} +

+
+
+ )} +
+
+
+
+ ); +}; diff --git a/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx b/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx new file mode 100644 index 00000000000000..18d0bb90b1f0f7 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/elasticsearch_start.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiPanel, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import type { IndicesStatusResponse, UserStartPrivilegesResponse } from '../../../common'; + +import { AnalyticsEvents } from '../../analytics/constants'; +import { useUsageTracker } from '../../hooks/use_usage_tracker'; + +import { CreateIndexForm } from './create_index'; + +const MAX_WIDTH = '600px'; + +export interface ElasticsearchStartProps { + indicesData?: IndicesStatusResponse; + userPrivileges?: UserStartPrivilegesResponse; +} + +export const ElasticsearchStart = ({ userPrivileges }: ElasticsearchStartProps) => { + const usageTracker = useUsageTracker(); + useEffect(() => { + usageTracker.load(AnalyticsEvents.startPageOpened); + }, [usageTracker]); + return ( + + + + + + + + +

+ {i18n.translate('xpack.searchIndices.startPage.pageTitle', { + defaultMessage: 'Elasticsearch', + })} +

+
+ + +

+ {i18n.translate('xpack.searchIndices.startPage.pageDescription', { + defaultMessage: 'Vectorize, search, and visualize your data', + })} +

+
+
+
+
+ + + + +
+ ); +}; diff --git a/x-pack/plugins/search_indices/public/components/start/hooks/use_create_index.tsx b/x-pack/plugins/search_indices/public/components/start/hooks/use_create_index.tsx new file mode 100644 index 00000000000000..8daafec5573ca9 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/hooks/use_create_index.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect } from 'react'; + +import { useCreateIndex as useCreateIndexApi } from '../../../hooks/api/use_create_index'; + +import { useKibana } from '../../../hooks/use_kibana'; + +import { navigateToIndexDetails } from './utils'; + +export const useCreateIndex = () => { + const { application, http } = useKibana().services; + const { createIndex, isSuccess, isLoading, data: createIndexResponse } = useCreateIndexApi(); + useEffect(() => { + if (isSuccess && createIndexResponse !== undefined) { + navigateToIndexDetails(application, http, createIndexResponse.index); + return; + } + }, [application, http, isSuccess, createIndexResponse]); + + return { createIndex, isLoading }; +}; diff --git a/x-pack/plugins/search_indices/public/components/start/hooks/use_indices_redirect.tsx b/x-pack/plugins/search_indices/public/components/start/hooks/use_indices_redirect.tsx new file mode 100644 index 00000000000000..d7a24a6e102d82 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/hooks/use_indices_redirect.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect } from 'react'; + +import type { IndicesStatusResponse } from '../../../../common'; + +import { useKibana } from '../../../hooks/use_kibana'; + +import { navigateToIndexDetails } from './utils'; + +export const useIndicesRedirect = (indicesStatus?: IndicesStatusResponse) => { + const { application, http } = useKibana().services; + return useEffect(() => { + if (!indicesStatus) return; + if (indicesStatus.indexNames.length === 0) return; + if (indicesStatus.indexNames.length === 1) { + navigateToIndexDetails(application, http, indicesStatus.indexNames[0]); + return; + } + application.navigateToApp('management', { deepLinkId: 'index_management' }); + }, [application, http, indicesStatus]); +}; diff --git a/x-pack/plugins/search_indices/public/components/start/hooks/utils.ts b/x-pack/plugins/search_indices/public/components/start/hooks/utils.ts new file mode 100644 index 00000000000000..245d389ea6a7db --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/hooks/utils.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ApplicationStart, HttpSetup } from '@kbn/core/public'; + +// TODO: we should define a locator for this and use that instead +const INDEX_DETAILS_PATH = '/app/management/data/index_management/indices/index_details'; + +function getIndexDetailsPath(http: HttpSetup, indexName: string) { + return http.basePath.prepend(`${INDEX_DETAILS_PATH}?indexName=${indexName}`); +} + +export const navigateToIndexDetails = ( + application: ApplicationStart, + http: HttpSetup, + indexName: string +) => { + application.navigateToUrl(getIndexDetailsPath(http, indexName)); +}; diff --git a/x-pack/plugins/search_indices/public/components/start/start_page.tsx b/x-pack/plugins/search_indices/public/components/start/start_page.tsx index 0982a67843cce3..f26d78302e636f 100644 --- a/x-pack/plugins/search_indices/public/components/start/start_page.tsx +++ b/x-pack/plugins/search_indices/public/components/start/start_page.tsx @@ -11,24 +11,40 @@ import { EuiLoadingLogo, EuiPageTemplate } from '@elastic/eui'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { useKibana } from '../../hooks/use_kibana'; +import { useIndicesStatusQuery } from '../../hooks/api/use_indices_status'; +import { useUserPrivilegesQuery } from '../../hooks/api/use_user_permissions'; + +import { useIndicesRedirect } from './hooks/use_indices_redirect'; +import { ElasticsearchStart } from './elasticsearch_start'; +import { StartPageError } from './status_error'; export const ElasticsearchStartPage = () => { const { console: consolePlugin } = useKibana().services; + const { + data: indicesData, + isInitialLoading, + isError: hasIndicesStatusFetchError, + error: indicesFetchError, + } = useIndicesStatusQuery(); + const { data: userPrivileges } = useUserPrivilegesQuery(); const embeddableConsole = useMemo( () => (consolePlugin?.EmbeddableConsole ? : null), [consolePlugin] ); + useIndicesRedirect(indicesData); return ( - + {isInitialLoading && } + {hasIndicesStatusFetchError && } + {embeddableConsole} diff --git a/x-pack/plugins/search_indices/public/components/start/status_error.tsx b/x-pack/plugins/search_indices/public/components/start/status_error.tsx new file mode 100644 index 00000000000000..7e41e37d5cd940 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/start/status_error.tsx @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiCodeBlock, EuiEmptyPrompt } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { getErrorMessage } from '../../utils/errors'; + +export interface StartPageErrorProps { + error: unknown; +} + +export const StartPageError = ({ error }: StartPageErrorProps) => { + return ( + + {i18n.translate('xpack.searchIndices.startPage.statusFetchError.title', { + defaultMessage: 'Error loading indices', + })} + + } + body={ + + {getErrorMessage( + error, + i18n.translate('xpack.searchIndices.startPage.statusFetchError.unknownError', { + defaultMessage: 'Unknown error fetching indices.', + }) + )} + + } + /> + ); +}; diff --git a/x-pack/plugins/search_indices/public/hooks/api/use_create_index.ts b/x-pack/plugins/search_indices/public/hooks/api/use_create_index.ts new file mode 100644 index 00000000000000..4dcb98002b997f --- /dev/null +++ b/x-pack/plugins/search_indices/public/hooks/api/use_create_index.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; + +import { POST_CREATE_INDEX_ROUTE } from '../../../common/routes'; +import { CreateIndexRequest, CreateIndexResponse } from '../../../common/types'; + +import { useKibana } from '../use_kibana'; + +export const useCreateIndex = () => { + const { http } = useKibana().services; + + const { mutate: createIndex, ...rest } = useMutation({ + mutationKey: ['searchIndicesCreateIndex'], + mutationFn: async (input: CreateIndexRequest) => + http.post(POST_CREATE_INDEX_ROUTE, { + body: JSON.stringify(input), + }), + }); + + return { createIndex, ...rest }; +}; diff --git a/x-pack/plugins/search_indices/public/hooks/api/use_indices_status.ts b/x-pack/plugins/search_indices/public/hooks/api/use_indices_status.ts new file mode 100644 index 00000000000000..81bd4579539e89 --- /dev/null +++ b/x-pack/plugins/search_indices/public/hooks/api/use_indices_status.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; + +import { GET_STATUS_ROUTE } from '../../../common/routes'; +import type { IndicesStatusResponse } from '../../../common/types'; + +import { useKibana } from '../use_kibana'; + +const DEFAULT_INDICES_POLLING_INTERVAL = 15 * 1000; + +export const useIndicesStatusQuery = (pollingInterval = DEFAULT_INDICES_POLLING_INTERVAL) => { + const { http } = useKibana().services; + return useQuery({ + refetchInterval: pollingInterval, + refetchIntervalInBackground: true, + refetchOnWindowFocus: 'always', + retry: true, + queryKey: ['fetchSearchIndicesStatus'], + queryFn: () => http.get(GET_STATUS_ROUTE), + }); +}; diff --git a/x-pack/plugins/search_indices/public/hooks/api/use_user_permissions.ts b/x-pack/plugins/search_indices/public/hooks/api/use_user_permissions.ts new file mode 100644 index 00000000000000..a0a84e01485608 --- /dev/null +++ b/x-pack/plugins/search_indices/public/hooks/api/use_user_permissions.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; + +import { GET_USER_PRIVILEGES_ROUTE } from '../../../common/routes'; +import type { UserStartPrivilegesResponse } from '../../../common/types'; + +import { useKibana } from '../use_kibana'; + +export const useUserPrivilegesQuery = () => { + const { http } = useKibana().services; + return useQuery({ + queryKey: ['fetchUserStartPrivileges'], + queryFn: () => http.get(GET_USER_PRIVILEGES_ROUTE), + }); +}; diff --git a/x-pack/plugins/search_indices/public/plugin.ts b/x-pack/plugins/search_indices/public/plugin.ts index 8e8d681d5687c3..5ebfb84e1cd390 100644 --- a/x-pack/plugins/search_indices/public/plugin.ts +++ b/x-pack/plugins/search_indices/public/plugin.ts @@ -13,6 +13,7 @@ import type { SearchIndicesPluginStart, SearchIndicesServicesContextDeps, } from './types'; +import { initQueryClient } from './services/query_client'; export class SearchIndicesPlugin implements Plugin @@ -20,6 +21,8 @@ export class SearchIndicesPlugin public setup( core: CoreSetup ): SearchIndicesPluginSetup { + const queryClient = initQueryClient(core.notifications.toasts); + core.application.register({ id: 'elasticsearchStart', appRoute: '/app/elasticsearch/start', @@ -34,7 +37,7 @@ export class SearchIndicesPlugin ...depsStart, history, }; - return renderApp(ElasticsearchStartPage, coreStart, startDeps, element); + return renderApp(ElasticsearchStartPage, coreStart, startDeps, element, queryClient); }, }); core.application.register({ @@ -51,7 +54,7 @@ export class SearchIndicesPlugin ...depsStart, history, }; - return renderApp(SearchIndicesRouter, coreStart, startDeps, element); + return renderApp(SearchIndicesRouter, coreStart, startDeps, element, queryClient); }, }); diff --git a/x-pack/plugins/search_indices/public/utils/indices.test.ts b/x-pack/plugins/search_indices/public/utils/indices.test.ts new file mode 100644 index 00000000000000..8ddd7cbb56fc5d --- /dev/null +++ b/x-pack/plugins/search_indices/public/utils/indices.test.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { generateRandomIndexName, isValidIndexName } from './indices'; + +describe('indices utils', function () { + describe('generateRandomIndexName', function () { + const DEFAULT_PREFIX = 'search-'; + const DEFAULT_SUFFIX_LENGTH = 4; + it('defaults to search- with a 4 character suffix', () => { + const indexName = generateRandomIndexName(); + + expect(indexName.startsWith(DEFAULT_PREFIX)).toBe(true); + expect(indexName.length).toBe(DEFAULT_PREFIX.length + DEFAULT_SUFFIX_LENGTH); + expect(isValidIndexName(indexName)).toBe(true); + }); + it('supports changing the prefix', () => { + const otherPrefix = 'foo-'; + const indexName = generateRandomIndexName(otherPrefix); + + expect(indexName.startsWith(otherPrefix)).toBe(true); + expect(indexName.length).toBe(otherPrefix.length + DEFAULT_SUFFIX_LENGTH); + expect(isValidIndexName(indexName)).toBe(true); + }); + it('supports changing the suffix length', () => { + const indexName = generateRandomIndexName(undefined, 6); + + expect(indexName.startsWith(DEFAULT_PREFIX)).toBe(true); + expect(indexName.length).toBe(DEFAULT_PREFIX.length + 6); + expect(isValidIndexName(indexName)).toBe(true); + }); + it('fallsback to single character suffix for invalid lengths', () => { + let indexName = generateRandomIndexName(undefined, 0); + + expect(indexName.startsWith(DEFAULT_PREFIX)).toBe(true); + expect(indexName.length).toBe(DEFAULT_PREFIX.length + 1); + expect(isValidIndexName(indexName)).toBe(true); + + indexName = generateRandomIndexName(undefined, -5); + expect(indexName.startsWith(DEFAULT_PREFIX)).toBe(true); + expect(indexName.length).toBe(DEFAULT_PREFIX.length + 1); + expect(isValidIndexName(indexName)).toBe(true); + }); + }); +}); diff --git a/x-pack/plugins/search_indices/public/utils/indices.ts b/x-pack/plugins/search_indices/public/utils/indices.ts new file mode 100644 index 00000000000000..21c6e672af08fe --- /dev/null +++ b/x-pack/plugins/search_indices/public/utils/indices.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// see https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html for the current rules + +export function isValidIndexName(name: string) { + const byteLength = encodeURI(name).split(/%(?:u[0-9A-F]{2})?[0-9A-F]{2}|./).length - 1; + const reg = new RegExp('[\\\\/:*?"<>|\\s,#]+'); + const indexPatternInvalid = + byteLength > 255 || // name can't be greater than 255 bytes + name !== name.toLowerCase() || // name should be lowercase + name.match(/^[-_+.]/) !== null || // name can't start with these chars + name.match(reg) !== null; // name can't contain these chars + + return !indexPatternInvalid; +} + +export function generateRandomIndexName( + prefix: string = 'search-', + randomSuffixLength: number = 4 +) { + const suffixCharacters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + const charsLength = suffixCharacters.length; + let result = prefix; + + let counter = 0; + do { + result += suffixCharacters.charAt(Math.random() * charsLength); + counter++; + } while (counter < randomSuffixLength); + + return result; +} diff --git a/x-pack/plugins/search_indices/server/lib/indices.test.ts b/x-pack/plugins/search_indices/server/lib/indices.test.ts new file mode 100644 index 00000000000000..041d1f1f91c520 --- /dev/null +++ b/x-pack/plugins/search_indices/server/lib/indices.test.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { Logger } from '@kbn/logging'; + +import { createIndex } from './indices'; + +const mockLogger = { + warn: jest.fn(), + error: jest.fn(), +}; +const logger: Logger = mockLogger as unknown as Logger; + +const mockClient = { + indices: { + create: jest.fn(), + }, +}; +const client = mockClient as unknown as ElasticsearchClient; + +describe('indices lib', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('createIndex', () => { + it('should create index with req', async () => { + mockClient.indices.create.mockResolvedValue({}); + + await expect(createIndex(client, logger, { indexName: 'test-index' })).resolves.toEqual({ + index: 'test-index', + }); + + expect(mockClient.indices.create).toHaveBeenCalledTimes(1); + expect(mockClient.indices.create).toHaveBeenCalledWith({ index: 'test-index' }); + }); + + it('should raise errors from client', async () => { + const error = new Error('Boom!!'); + mockClient.indices.create.mockRejectedValue(error); + + await expect(createIndex(client, logger, { indexName: 'test-index' })).rejects.toEqual(error); + }); + }); +}); diff --git a/x-pack/plugins/search_indices/server/lib/indices.ts b/x-pack/plugins/search_indices/server/lib/indices.ts new file mode 100644 index 00000000000000..9a86cd18b2b0e5 --- /dev/null +++ b/x-pack/plugins/search_indices/server/lib/indices.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { Logger } from '@kbn/logging'; + +import { CreateIndexRequest, CreateIndexResponse } from '../../common/types'; + +export async function createIndex( + client: ElasticsearchClient, + logger: Logger, + data: CreateIndexRequest +): Promise { + await client.indices.create({ + index: data.indexName, + }); + return { + index: data.indexName, + }; +} diff --git a/x-pack/plugins/search_indices/server/routes/index.ts b/x-pack/plugins/search_indices/server/routes/index.ts index 03cb1371870cbf..532ad1c3d5f3f7 100644 --- a/x-pack/plugins/search_indices/server/routes/index.ts +++ b/x-pack/plugins/search_indices/server/routes/index.ts @@ -8,8 +8,10 @@ import type { IRouter } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; +import { registerIndicesRoutes } from './indices'; import { registerStatusRoutes } from './status'; export function defineRoutes(router: IRouter, logger: Logger) { + registerIndicesRoutes(router, logger); registerStatusRoutes(router, logger); } diff --git a/x-pack/plugins/search_indices/server/routes/indices.ts b/x-pack/plugins/search_indices/server/routes/indices.ts new file mode 100644 index 00000000000000..cd42470d3c3fcc --- /dev/null +++ b/x-pack/plugins/search_indices/server/routes/indices.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import { i18n } from '@kbn/i18n'; +import type { IRouter } from '@kbn/core/server'; +import type { Logger } from '@kbn/logging'; + +import { POST_CREATE_INDEX_ROUTE } from '../../common/routes'; +import { CreateIndexRequest } from '../../common/types'; +import { createIndex } from '../lib/indices'; + +export function registerIndicesRoutes(router: IRouter, logger: Logger) { + router.post( + { + path: POST_CREATE_INDEX_ROUTE, + validate: { + body: schema.object({ + indexName: schema.string(), + }), + }, + options: { + access: 'internal', + }, + }, + async (context, request, response) => { + const core = await context.core; + const client = core.elasticsearch.client.asCurrentUser; + const data: CreateIndexRequest = request.body; + + try { + const body = await createIndex(client, logger, data); + return response.ok({ + body, + headers: { 'content-type': 'application/json' }, + }); + } catch (e) { + switch (e?.meta?.body?.error?.type) { + case 'resource_already_exists_exception': + return response.conflict({ + body: { + message: e.message, + }, + }); + } + + return response.customError({ + statusCode: e?.meta && e.meta?.statusCode ? e.meta?.statusCode : 500, + body: { + message: i18n.translate('xpack.searchIndices.server.createIndex.errorMessage', { + defaultMessage: 'Failed to create index due to an exception.\n{errorMessage}', + values: { + errorMessage: e.message, + }, + }), + }, + }); + } + } + ); +} diff --git a/x-pack/plugins/search_indices/server/routes/status.ts b/x-pack/plugins/search_indices/server/routes/status.ts index ab3a426510e6ed..b1354996344873 100644 --- a/x-pack/plugins/search_indices/server/routes/status.ts +++ b/x-pack/plugins/search_indices/server/routes/status.ts @@ -8,12 +8,13 @@ import type { IRouter } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; +import { GET_STATUS_ROUTE, GET_USER_PRIVILEGES_ROUTE } from '../../common/routes'; import { fetchIndicesStatus, fetchUserStartPrivileges } from '../lib/status'; export function registerStatusRoutes(router: IRouter, logger: Logger) { router.get( { - path: '/internal/search_indices/status', + path: GET_STATUS_ROUTE, validate: {}, options: { access: 'internal', @@ -33,7 +34,7 @@ export function registerStatusRoutes(router: IRouter, logger: Logger) { router.get( { - path: '/internal/search_indices/start_privileges', + path: GET_USER_PRIVILEGES_ROUTE, validate: {}, options: { access: 'internal', diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/add_item_form/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/add_item_form/index.tsx index 7fa427952166da..cc09c1cb97ea40 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/add_item_form/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/add_item_form/index.tsx @@ -32,14 +32,6 @@ interface AddItemProps { validate?: (args: unknown) => boolean; } -const MyEuiFormRow = styled(EuiFormRow)` - .euiFormRow__labelWrapper { - .euiText { - padding-right: 32px; - } - } -`; - export const MyAddItemButton = styled(EuiButtonEmpty)` margin: 4px 0px; font-size: 12px; @@ -130,7 +122,7 @@ export const AddItem = ({ const values = field.value as string[]; return ( - - + ); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/mitre/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/mitre/index.tsx index 54df23125d500b..3aface51d3c34c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/mitre/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/mitre/index.tsx @@ -35,14 +35,6 @@ const MitreAttackContainer = styled.div` margin-top: 16px; `; -const InitialMitreAttackFormRow = styled(EuiFormRow)` - .euiFormRow__labelWrapper { - .euiText { - padding-right: 32px; - } - } -`; - interface AddItemProps { field: FieldHook; dataTestSubj: string; // eslint-disable-line react/no-unused-prop-types @@ -174,14 +166,14 @@ export const AddMitreAttackThreat = memo(({ field, idAria, isDisabled }: AddItem {values.map((threat, index) => (
{index === 0 ? ( - <>{getSelectTactic(threat, index, isDisabled)} - + ) : ( `KnowledgeBaseRetrievalToolParams:input\n ${JSON.stringify(input, null, 2)}` ); - const docs = await kbDataClient.getKnowledgeBaseDocuments({ + const docs = await kbDataClient.getKnowledgeBaseDocumentEntries({ query: input.query, kbResource: 'user', required: false, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts index 3dc1c19ce79f25..90f0ad0b96e6ee 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts @@ -9,6 +9,7 @@ import { DynamicStructuredTool } from '@langchain/core/tools'; import { z } from '@kbn/zod'; import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; import type { AIAssistantKnowledgeBaseDataClient } from '@kbn/elastic-assistant-plugin/server/ai_assistant_data_clients/knowledge_base'; +import { DocumentEntryType } from '@kbn/elastic-assistant-common'; import type { KnowledgeBaseEntryCreateProps } from '@kbn/elastic-assistant-common'; import { APP_UI_ID } from '../../../../common'; @@ -18,7 +19,7 @@ export interface KnowledgeBaseWriteToolParams extends AssistantToolParams { const toolDetails = { description: - "Call this for writing details to the user's knowledge base. The knowledge base contains useful information the user wants to store between conversation contexts. Input will be the summarized knowledge base entry to store, with no other text, and whether or not the entry is required.", + "Call this for writing details to the user's knowledge base. The knowledge base contains useful information the user wants to store between conversation contexts. Input will be the summarized knowledge base entry to store, a short UI friendly name for the entry, and whether or not the entry is required.", id: 'knowledge-base-write-tool', name: 'KnowledgeBaseWriteTool', }; @@ -39,25 +40,39 @@ export const KNOWLEDGE_BASE_WRITE_TOOL: AssistantTool = { name: toolDetails.name, description: toolDetails.description, schema: z.object({ + name: z + .string() + .describe(`This is what the user will use to refer to the entry in the future.`), query: z.string().describe(`Summary of items/things to save in the knowledge base`), required: z .boolean() .describe( `Whether or not the entry is required to always be included in conversations. Is only true if the user explicitly asks for it to be required or always included in conversations, otherwise this is always false.` - ), + ) + .default(false), }), func: async (input, _, cbManager) => { logger.debug( () => `KnowledgeBaseWriteToolParams:input\n ${JSON.stringify(input, null, 2)}` ); - const knowledgeBaseEntry: KnowledgeBaseEntryCreateProps = { - metadata: { kbResource: 'user', source: 'conversation', required: input.required }, - text: input.query, - }; + // Backwards compatibility with v1 schema -- createKnowledgeBaseEntry() technically supports both for now + const knowledgeBaseEntry: KnowledgeBaseEntryCreateProps = + kbDataClient.isV2KnowledgeBaseEnabled + ? { + name: input.name, + kbResource: 'user', + source: 'conversation', + required: input.required, + text: input.query, + type: DocumentEntryType.value, + } + : ({ + metadata: { kbResource: 'user', source: 'conversation', required: input.required }, + text: input.query, + } as unknown as KnowledgeBaseEntryCreateProps); logger.debug(() => `knowledgeBaseEntry\n ${JSON.stringify(knowledgeBaseEntry, null, 2)}`); - const resp = await kbDataClient.createKnowledgeBaseEntry({ knowledgeBaseEntry }); if (resp == null) { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts index 22e113f05de133..88c89b0259f913 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts @@ -911,7 +911,7 @@ describe('ManifestManager', () => { } }); - test(`when it has endpoint artifact management and response actions app features it should generate all exceptions`, async () => { + test(`when it has endpoint artifact management and endpoint host isolation exceptions app features it should generate all exceptions`, async () => { const exceptionListItem = getExceptionListItemSchemaMock({ os_types: ['macos'] }); const trustedAppListItem = getExceptionListItemSchemaMock({ os_types: ['linux'], @@ -931,7 +931,7 @@ describe('ManifestManager', () => { }); const context = buildManifestManagerContextMock({}, [ ProductFeatureSecurityKey.endpointArtifactManagement, - ProductFeatureSecurityKey.endpointResponseActions, + ProductFeatureSecurityKey.endpointHostIsolationExceptions, ]); const manifestManager = new ManifestManager(context); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts index 63a2b56cb85257..1a613e8f9c4b5f 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts @@ -157,9 +157,14 @@ export class ManifestManager { }): Promise { if (!this.cachedExceptionsListsByOs.has(`${listId}-${os}`)) { let itemsByListId: ExceptionListItemSchema[] = []; + // endpointHostIsolationExceptions includes full CRUD support for Host Isolation Exceptions + // endpointArtifactManagement includes full CRUD support for all other exception lists + RD support for Host Isolation Exceptions + // If there are host isolation exceptions in place but there is a downgrade scenario, those shouldn't be taken into account when generating artifacts. if ( (listId === ENDPOINT_ARTIFACT_LISTS.hostIsolationExceptions.id && - this.productFeaturesService.isEnabled(ProductFeatureKey.endpointResponseActions)) || + this.productFeaturesService.isEnabled( + ProductFeatureKey.endpointHostIsolationExceptions + )) || (listId !== ENDPOINT_ARTIFACT_LISTS.hostIsolationExceptions.id && this.productFeaturesService.isEnabled(ProductFeatureKey.endpointArtifactManagement)) ) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.test.ts new file mode 100644 index 00000000000000..acbb63016aeda5 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.test.ts @@ -0,0 +1,268 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleEqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine'; +import { + ThreeWayDiffOutcome, + ThreeWayMergeOutcome, + MissingVersion, + ThreeWayDiffConflict, +} from '../../../../../../../../common/api/detection_engine'; +import { eqlQueryDiffAlgorithm } from './eql_query_diff_algorithm'; + +describe('eqlQueryDiffAlgorithm', () => { + it('returns current_version as merged output if there is no update - scenario AAA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.StockValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if current_version is different and there is no update - scenario ABA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns target_version as merged output if current_version is the same and there is an update - scenario AAB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where true', + language: 'eql', + filters: [{ query: 'some_field' }], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if current version is different but it matches the update - scenario ABB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueSameUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + describe('if all three versions are different - scenario ABC', () => { + it('returns the current_version with a non-solvable conflict', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query two where false', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + it('returns the current_version with a non-solvable conflict if one subfield has an ABA scenario and another has an AAB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + current_version: { + query: 'query where false', + language: 'eql', + filters: [{ field: 'some query' }], + }, + target_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); + + describe('if base_version is missing', () => { + it('returns current_version as merged output if current_version and target_version are the same - scenario -AA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns target_version as merged output if current_version and target_version are different - scenario -AB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + query: 'query where true', + language: 'eql', + filters: [], + }, + target_version: { + query: 'query where false', + language: 'eql', + filters: [], + }, + }; + + const result = eqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.SOLVABLE, + }) + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.ts new file mode 100644 index 00000000000000..fa3e87397a2a72 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/eql_query_diff_algorithm.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleEqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine/prebuilt_rules'; +import { simpleDiffAlgorithm } from './simple_diff_algorithm'; + +/** + * Diff algorithm for eql query types + */ +export const eqlQueryDiffAlgorithm = (versions: ThreeVersionsOf) => + simpleDiffAlgorithm(versions); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.test.ts new file mode 100644 index 00000000000000..ecaaa4142b5e06 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.test.ts @@ -0,0 +1,218 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleEsqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine'; +import { + ThreeWayDiffOutcome, + ThreeWayMergeOutcome, + MissingVersion, + ThreeWayDiffConflict, +} from '../../../../../../../../common/api/detection_engine'; +import { esqlQueryDiffAlgorithm } from './esql_query_diff_algorithm'; + +describe('esqlQueryDiffAlgorithm', () => { + it('returns current_version as merged output if there is no update - scenario AAA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'esql', + }, + current_version: { + query: 'query where true', + language: 'esql', + }, + target_version: { + query: 'query where true', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.StockValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if current_version is different and there is no update - scenario ABA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'esql', + }, + current_version: { + query: 'query where false', + language: 'esql', + }, + target_version: { + query: 'query where true', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns target_version as merged output if current_version is the same and there is an update - scenario AAB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'esql', + }, + current_version: { + query: 'query where true', + language: 'esql', + }, + target_version: { + query: 'query where false', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if current version is different but it matches the update - scenario ABB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'esql', + }, + current_version: { + query: 'query where false', + language: 'esql', + }, + target_version: { + query: 'query where false', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueSameUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + describe('if all three versions are different - scenario ABC', () => { + it('returns the current_version with a non-solvable conflict', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + query: 'query where true', + language: 'esql', + }, + current_version: { + query: 'query where false', + language: 'esql', + }, + target_version: { + query: 'different query where true', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); + + describe('if base_version is missing', () => { + it('returns current_version as merged output if current_version and target_version are the same - scenario -AA', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + query: 'query where true', + language: 'esql', + }, + target_version: { + query: 'query where true', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns target_version as merged output if current_version and target_version are different - scenario -AB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + query: 'query where true', + language: 'esql', + }, + target_version: { + query: 'query where false', + language: 'esql', + }, + }; + + const result = esqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.SOLVABLE, + }) + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.ts new file mode 100644 index 00000000000000..8360800ad4676e --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/esql_query_diff_algorithm.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleEsqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine/prebuilt_rules'; +import { simpleDiffAlgorithm } from './simple_diff_algorithm'; + +/** + * Diff algorithm for esql query types + */ +export const esqlQueryDiffAlgorithm = (versions: ThreeVersionsOf) => + simpleDiffAlgorithm(versions); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts index fc895543e66b2d..629f329c72b9bb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/index.ts @@ -11,3 +11,6 @@ export { scalarArrayDiffAlgorithm } from './scalar_array_diff_algorithm'; export { simpleDiffAlgorithm } from './simple_diff_algorithm'; export { multiLineStringDiffAlgorithm } from './multi_line_string_diff_algorithm'; export { dataSourceDiffAlgorithm } from './data_source_diff_algorithm'; +export { kqlQueryDiffAlgorithm } from './kql_query_diff_algorithm'; +export { eqlQueryDiffAlgorithm } from './eql_query_diff_algorithm'; +export { esqlQueryDiffAlgorithm } from './esql_query_diff_algorithm'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.test.ts new file mode 100644 index 00000000000000..fe97a222448df9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.test.ts @@ -0,0 +1,546 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleKqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine'; +import { + ThreeWayDiffOutcome, + ThreeWayMergeOutcome, + MissingVersion, + ThreeWayDiffConflict, + KqlQueryType, + KqlQueryLanguageEnum, +} from '../../../../../../../../common/api/detection_engine'; +import { kqlQueryDiffAlgorithm } from './kql_query_diff_algorithm'; + +describe('kqlQueryDiffAlgorithm', () => { + describe('returns current_version as merged output if there is no update - scenario AAA', () => { + it('if all versions are inline query type', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.StockValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('if all versions are saved query type', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.StockValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + }); + + describe('returns current_version as merged output if current_version is different and there is no update - scenario ABA', () => { + it('if current version is different query type than base and target', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('if all versions are same data type', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + }); + + describe('returns target_version as merged output if current_version is the same and there is an update - scenario AAB', () => { + it('if target version is different query type than base and current', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('if all versions are same data type', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [{ field: 'some filter' }], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.StockValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + }); + + describe('returns current_version as merged output if current version is different but it matches the update - scenario ABB', () => { + it('if base version is different query type from current and target versions', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueSameUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('if all versions are query types', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.lucene, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueSameUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + }); + + describe('if all three versions are different - scenario ABC', () => { + describe('if all versions are saved query type', () => { + it('returns the current_version with a conflict', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id-1', + }, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id-2', + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id-3', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); + + describe('if all versions are inline query type', () => { + it('returns the current_version with a non-solvable conflict', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string two = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + + it('returns the current_version with a non-solvable conflict if one subfield has an ABA scenario and another has an AAB', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.lucene, + filters: [], + }, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [{ field: 'some query' }], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); + + describe('if versions are different types', () => { + it('returns the current_version with a non-solvable conflict', () => { + const mockVersions: ThreeVersionsOf = { + base_version: { + type: KqlQueryType.inline_query, + query: 'My description.\nThis is a second line.', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id-2', + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'My EXCELLENT description.\nThis is a fourth.', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.CustomizedValueCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NON_SOLVABLE, + }) + ); + }); + }); + }); + + describe('if base_version is missing', () => { + describe('if current_version and target_version are the same - scenario -AA', () => { + it('returns current_version as merged output if all versions are inline query types', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + + it('returns current_version as merged output if all versions are saved query types', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + target_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id', + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.current_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseNoUpdate, + merge_outcome: ThreeWayMergeOutcome.Current, + conflict: ThreeWayDiffConflict.NONE, + }) + ); + }); + }); + + describe('if current_version and target_version are different - scenario -AB', () => { + it('returns target_version as merged output if current and target versions have the same types', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + type: KqlQueryType.inline_query, + query: 'query string = true', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.SOLVABLE, + }) + ); + }); + + it('returns target_version as merged output if current and target versions have different types', () => { + const mockVersions: ThreeVersionsOf = { + base_version: MissingVersion, + current_version: { + type: KqlQueryType.saved_query, + saved_query_id: 'saved-query-id-2', + }, + target_version: { + type: KqlQueryType.inline_query, + query: 'query string = false', + language: KqlQueryLanguageEnum.kuery, + filters: [], + }, + }; + + const result = kqlQueryDiffAlgorithm(mockVersions); + + expect(result).toEqual( + expect.objectContaining({ + has_base_version: false, + base_version: undefined, + merged_version: mockVersions.target_version, + diff_outcome: ThreeWayDiffOutcome.MissingBaseCanUpdate, + merge_outcome: ThreeWayMergeOutcome.Target, + conflict: ThreeWayDiffConflict.SOLVABLE, + }) + ); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.ts new file mode 100644 index 00000000000000..500c3211cc9c2a --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/logic/diff/calculation/algorithms/kql_query_diff_algorithm.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + RuleKqlQuery, + ThreeVersionsOf, +} from '../../../../../../../../common/api/detection_engine/prebuilt_rules'; +import { simpleDiffAlgorithm } from './simple_diff_algorithm'; + +/** + * Diff algorithm for all kql query types (`inline_query` and `saved_query`) + */ +export const kqlQueryDiffAlgorithm = ( + versions: ThreeVersionsOf +) => simpleDiffAlgorithm(versions); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_enable_disable_rules.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_enable_disable_rules.ts index 670e72d8663d4b..caaaf619bab55f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_enable_disable_rules.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_actions/bulk_enable_disable_rules.ts @@ -33,7 +33,6 @@ export const bulkEnableDisableRules = async ({ mlAuthz, }: BulkEnableDisableRulesArgs): Promise => { const errors: Array> = []; - const updatedRules: RuleAlertType[] = []; // In the first step, we validate if the rules can be enabled const validatedRules: RuleAlertType[] = []; @@ -64,26 +63,6 @@ export const bulkEnableDisableRules = async ({ ? await rulesClient.bulkEnableRules({ ids: ruleIds }) : await rulesClient.bulkDisableRules({ ids: ruleIds }); - const failedRuleIds = results.errors.map(({ rule: { id } }) => id); - - // We need to go through the original rules array and update rules that were - // not returned as failed from the bulkEnableRules. We cannot rely on the - // results from the bulkEnableRules because the response is not consistent. - // Some rules might be missing in the response if they were skipped by - // Alerting Framework. See this issue for more details: - // https://github.com/elastic/kibana/issues/181050 - updatedRules.push( - ...rules.flatMap((rule) => { - if (failedRuleIds.includes(rule.id)) { - return []; - } - return { - ...rule, - enabled: operation === 'enable', - }; - }) - ); - // Rule objects returned from the bulkEnableRules are not // compatible with the response type. So we need to map them to // the original rules and update the enabled field @@ -99,7 +78,7 @@ export const bulkEnableDisableRules = async ({ ); return { - updatedRules, + updatedRules: results.rules as RuleAlertType[], errors, }; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts index 079d5a3349a4e6..e3b922fa831a67 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts @@ -159,6 +159,74 @@ describe('DetectionRulesClient.importRule', () => { ); }); + it('enables the rule if the imported rule has enabled: true', async () => { + const disabledExistingRule = { + ...existingRule, + enabled: false, + }; + (getRuleByRuleId as jest.Mock).mockResolvedValueOnce(disabledExistingRule); + + const rule = await detectionRulesClient.importRule({ + ruleToImport: { + ...ruleToImport, + enabled: true, + }, + overwriteRules: true, + allowMissingConnectorSecrets, + }); + + expect(rulesClient.create).not.toHaveBeenCalled(); + expect(rulesClient.update).toHaveBeenCalledWith( + expect.objectContaining({ + id: existingRule.id, + data: expect.not.objectContaining({ + enabled: expect.anything(), + }), + }) + ); + + expect(rule.enabled).toBe(true); + expect(rulesClient.enableRule).toHaveBeenCalledWith( + expect.objectContaining({ + id: existingRule.id, + }) + ); + }); + + it('disables the rule if the imported rule has enabled: false', async () => { + const enabledExistingRule = { + ...existingRule, + enabled: true, + }; + (getRuleByRuleId as jest.Mock).mockResolvedValueOnce(enabledExistingRule); + + const rule = await detectionRulesClient.importRule({ + ruleToImport: { + ...ruleToImport, + enabled: false, + }, + overwriteRules: true, + allowMissingConnectorSecrets, + }); + + expect(rulesClient.create).not.toHaveBeenCalled(); + expect(rulesClient.update).toHaveBeenCalledWith( + expect.objectContaining({ + id: existingRule.id, + data: expect.not.objectContaining({ + enabled: expect.anything(), + }), + }) + ); + + expect(rule.enabled).toBe(false); + expect(rulesClient.disableRule).toHaveBeenCalledWith( + expect.objectContaining({ + id: existingRule.id, + }) + ); + }); + it('rejects when overwriteRules is false', async () => { (getRuleByRuleId as jest.Mock).mockResolvedValue(existingRule); await expect( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts index f2532ea1a77bbb..4066cb00849a3c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts @@ -16,7 +16,7 @@ import { convertAlertingRuleToRuleResponse } from '../converters/convert_alertin import { convertRuleResponseToAlertingRule } from '../converters/convert_rule_response_to_alerting_rule'; import type { ImportRuleArgs } from '../detection_rules_client_interface'; import { applyRuleUpdate } from '../mergers/apply_rule_update'; -import { validateMlAuth } from '../utils'; +import { validateMlAuth, toggleRuleEnabledOnUpdate } from '../utils'; import { createRule } from './create_rule'; import { getRuleByRuleId } from './get_rule_by_rule_id'; @@ -63,7 +63,11 @@ export const importRule = async ({ id: existingRule.id, data: convertRuleResponseToAlertingRule(ruleWithUpdates, actionsClient), }); - return convertAlertingRuleToRuleResponse(updatedRule); + + // We strip `enabled` from the rule object to use in the rules client and need to enable it separately if user has enabled the updated rule + const { enabled } = await toggleRuleEnabledOnUpdate(rulesClient, existingRule, ruleWithUpdates); + + return convertAlertingRuleToRuleResponse({ ...updatedRule, enabled }); } /* Rule does not exist, so we'll create it */ diff --git a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts index 42cdf7589fb357..e817679db1c31b 100644 --- a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts +++ b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts @@ -38,10 +38,10 @@ export const PLI_PRODUCT_FEATURES: PliProductFeatures = { ProductFeatureKey.endpointExceptions, ], complete: [ + ProductFeatureKey.endpointHostIsolationExceptions, ProductFeatureKey.endpointResponseActions, ProductFeatureKey.osqueryAutomatedResponseActions, ProductFeatureKey.endpointAgentTamperProtection, - ProductFeatureKey.endpointExceptions, ProductFeatureKey.endpointProtectionUpdates, ], }, diff --git a/x-pack/plugins/task_manager/server/lib/get_retry_at.test.ts b/x-pack/plugins/task_manager/server/lib/get_retry_at.test.ts new file mode 100644 index 00000000000000..b777a7d7c81ff7 --- /dev/null +++ b/x-pack/plugins/task_manager/server/lib/get_retry_at.test.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import sinon from 'sinon'; +import { calculateDelayBasedOnAttempts, getRetryDate } from './get_retry_at'; +import { createRetryableError } from '../task_running'; + +let fakeTimer: sinon.SinonFakeTimers; + +describe('calculateDelayBasedOnAttempts', () => { + it('returns 30s on the first attempt', () => { + expect(calculateDelayBasedOnAttempts(1)).toBe(30000); + }); + + it('returns delay with jitter', () => { + const delay = calculateDelayBasedOnAttempts(5); + // with jitter should be random between 0 and 40 min (inclusive) + expect(delay).toBeGreaterThanOrEqual(0); + expect(delay).toBeLessThanOrEqual(2400000); + }); + + it('returns delay capped at 1 hour', () => { + const delay = calculateDelayBasedOnAttempts(10); + // with jitter should be random between 0 and 1 hr (inclusive) + expect(delay).toBeGreaterThanOrEqual(0); + expect(delay).toBeLessThanOrEqual(60 * 60 * 1000); + }); +}); + +describe('getRetryDate', () => { + beforeAll(() => { + fakeTimer = sinon.useFakeTimers(new Date('2021-01-01T12:00:00.000Z')); + }); + + afterAll(() => fakeTimer.restore()); + + it('returns retry date based on number of attempts if error is not retryable', () => { + expect(getRetryDate({ error: new Error('foo'), attempts: 1 })).toEqual( + new Date('2021-01-01T12:00:30.000Z') + ); + }); + + it('returns retry date based on number of attempts and add duration if error is not retryable', () => { + expect(getRetryDate({ error: new Error('foo'), attempts: 1, addDuration: '5m' })).toEqual( + new Date('2021-01-01T12:05:30.000Z') + ); + }); + + it('returns retry date for retryable error with retry date', () => { + expect( + getRetryDate({ + error: createRetryableError(new Error('foo'), new Date('2021-02-01T12:00:00.000Z')), + attempts: 1, + }) + ).toEqual(new Date('2021-02-01T12:00:00.000Z')); + }); + + it('returns retry date based on number of attempts for retryable error with retry=true', () => { + expect( + getRetryDate({ + error: createRetryableError(new Error('foo'), true), + attempts: 1, + }) + ).toEqual(new Date('2021-01-01T12:00:30.000Z')); + }); + + it('returns retry date based on number of attempts and add duration for retryable error with retry=true', () => { + expect( + getRetryDate({ + error: createRetryableError(new Error('foo'), true), + attempts: 1, + addDuration: '5m', + }) + ).toEqual(new Date('2021-01-01T12:05:30.000Z')); + }); + + it('returns undefined for retryable error with retry=false', () => { + expect( + getRetryDate({ + error: createRetryableError(new Error('foo'), false), + attempts: 1, + }) + ).toBeUndefined(); + }); +}); diff --git a/x-pack/plugins/task_manager/server/lib/get_retry_at.ts b/x-pack/plugins/task_manager/server/lib/get_retry_at.ts new file mode 100644 index 00000000000000..278ba18642d065 --- /dev/null +++ b/x-pack/plugins/task_manager/server/lib/get_retry_at.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { random } from 'lodash'; +import { ConcreteTaskInstance, DEFAULT_TIMEOUT, TaskDefinition } from '../task'; +import { isRetryableError } from '../task_running'; +import { intervalFromDate, maxIntervalFromDate } from './intervals'; + +export function getRetryAt( + task: ConcreteTaskInstance, + taskDefinition: TaskDefinition | undefined +): Date | undefined { + const taskTimeout = getTimeout(task, taskDefinition); + if (task.schedule) { + return maxIntervalFromDate(new Date(), task.schedule.interval, taskTimeout); + } + + return getRetryDate({ + attempts: task.attempts + 1, + // Fake an error. This allows retry logic when tasks keep timing out + // and lets us set a proper "retryAt" value each time. + error: new Error('Task timeout'), + addDuration: taskTimeout, + }); +} + +export function getRetryDate({ + error, + attempts, + addDuration, +}: { + error: Error; + attempts: number; + addDuration?: string; +}): Date | undefined { + const retry: boolean | Date = isRetryableError(error) ?? true; + + let result; + if (retry instanceof Date) { + result = retry; + } else if (retry === true) { + result = new Date(Date.now() + calculateDelayBasedOnAttempts(attempts)); + } + + // Add a duration to the result + if (addDuration && result) { + result = intervalFromDate(result, addDuration)!; + } + return result; +} + +export function calculateDelayBasedOnAttempts(attempts: number) { + // Return 30s for the first retry attempt + if (attempts === 1) { + return 30 * 1000; + } else { + const defaultBackoffPerFailure = 5 * 60 * 1000; + const maxDelay = 60 * 60 * 1000; + // For each remaining attempt return an exponential delay with jitter that is capped at 1 hour. + // We adjust the attempts by 2 to ensure that delay starts at 5m for the second retry attempt + // and increases exponentially from there. + return random(Math.min(maxDelay, defaultBackoffPerFailure * Math.pow(2, attempts - 2))); + } +} + +export function getTimeout( + task: ConcreteTaskInstance, + taskDefinition: TaskDefinition | undefined +): string { + if (task.schedule) { + return taskDefinition?.timeout ?? DEFAULT_TIMEOUT; + } + + return task.timeoutOverride ? task.timeoutOverride : taskDefinition?.timeout ?? DEFAULT_TIMEOUT; +} diff --git a/x-pack/plugins/task_manager/server/polling_lifecycle.ts b/x-pack/plugins/task_manager/server/polling_lifecycle.ts index a6cc78bee07852..b8d41391f1411c 100644 --- a/x-pack/plugins/task_manager/server/polling_lifecycle.ts +++ b/x-pack/plugins/task_manager/server/polling_lifecycle.ts @@ -222,6 +222,7 @@ export class TaskPollingLifecycle implements ITaskEventEmitter ({ ], })); +let fakeTimer: sinon.SinonFakeTimers; const taskManagerLogger = mockLogger(); beforeEach(() => jest.clearAllMocks()); @@ -110,6 +112,12 @@ const taskPartitioner = new TaskPartitioner({ // needs more tests in the similar to the `strategy_default.test.ts` test suite describe('TaskClaiming', () => { + beforeAll(() => { + fakeTimer = sinon.useFakeTimers(); + }); + + afterAll(() => fakeTimer.restore()); + beforeEach(() => { jest.clearAllMocks(); jest @@ -399,21 +407,27 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[0].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -492,9 +506,11 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -599,9 +615,11 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -699,9 +717,11 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -847,15 +867,19 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -933,15 +957,19 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1019,15 +1047,19 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1118,27 +1150,35 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[4], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1236,27 +1276,35 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[0].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[3], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[3].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1331,27 +1379,35 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[0].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[3], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[3].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1359,6 +1415,134 @@ describe('TaskClaiming', () => { expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-2', 'id-3', 'id-4']); }); + test('should handle conflict errors when bulk updating the task doc', async () => { + const store = taskStoreMock.create({ taskManagerId: 'test-test' }); + store.convertToSavedObjectIds.mockImplementation((ids) => ids.map((id) => `task:${id}`)); + + const fetchedTasks = [ + mockInstance({ id: `id-1`, taskType: 'report' }), + mockInstance({ id: `id-2`, taskType: 'report' }), + mockInstance({ id: `id-3`, taskType: 'yawn' }), + mockInstance({ id: `id-4`, taskType: 'report' }), + ]; + + const { versionMap, docLatestVersions } = getVersionMapsFromTasks(fetchedTasks); + store.msearch.mockResolvedValueOnce({ docs: fetchedTasks, versionMap }); + store.getDocVersions.mockResolvedValueOnce(docLatestVersions); + store.bulkUpdate.mockResolvedValueOnce([ + asOk(fetchedTasks[0]), + // @ts-expect-error + asErr({ + type: 'task', + id: fetchedTasks[1].id, + error: { + statusCode: 409, + message: 'Conflict', + }, + }), + asOk(fetchedTasks[2]), + asOk(fetchedTasks[3]), + ]); + store.bulkGet.mockResolvedValueOnce([ + asOk(fetchedTasks[0]), + asOk(fetchedTasks[2]), + asOk(fetchedTasks[3]), + ]); + + const taskClaiming = new TaskClaiming({ + logger: taskManagerLogger, + strategy: CLAIM_STRATEGY_MGET, + definitions: taskDefinitions, + taskStore: store, + excludedTaskTypes: [], + unusedTypes: [], + maxAttempts: 2, + getAvailableCapacity: () => 10, + taskPartitioner, + }); + + const [resultOrErr] = await getAllAsPromise( + taskClaiming.claimAvailableTasksIfCapacityIsAvailable({ claimOwnershipUntil: new Date() }) + ); + + if (!isOk(resultOrErr)) { + expect(resultOrErr).toBe(undefined); + } + + const result = unwrap(resultOrErr) as ClaimOwnershipResult; + + expect(apm.startTransaction).toHaveBeenCalledWith( + TASK_MANAGER_MARK_AS_CLAIMED, + TASK_MANAGER_TRANSACTION_TYPE + ); + expect(mockApmTrans.end).toHaveBeenCalledWith('success'); + + expect(taskManagerLogger.debug).toHaveBeenCalledWith( + 'task claimer claimed: 3; stale: 0; conflicts: 1; missing: 0; capacity reached: 0; updateErrors: 0; getErrors: 0; removed: 0;', + { tags: ['claimAvailableTasksMget'] } + ); + expect(taskManagerLogger.error).not.toHaveBeenCalled(); + + expect(store.msearch.mock.calls[0][0]?.[0]).toMatchObject({ + size: 40, + seq_no_primary_term: true, + }); + expect(store.getDocVersions).toHaveBeenCalledWith([ + 'task:id-1', + 'task:id-2', + 'task:id-3', + 'task:id-4', + ]); + expect(store.bulkUpdate).toHaveBeenCalledTimes(1); + expect(store.bulkUpdate).toHaveBeenCalledWith( + [ + { + ...fetchedTasks[0], + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + ...fetchedTasks[1], + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + ...fetchedTasks[2], + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + { + ...fetchedTasks[3], + attempts: 1, + ownerId: 'test-test', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), + }, + ], + { validate: false, excludeLargeFields: true } + ); + expect(store.bulkGet).toHaveBeenCalledWith(['id-1', 'id-3', 'id-4']); + + expect(result.stats).toEqual({ + tasksClaimed: 3, + tasksConflicted: 1, + tasksErrors: 0, + tasksUpdated: 3, + tasksLeftUnclaimed: 0, + }); + expect(result.docs.length).toEqual(3); + }); + test('should handle individual errors when bulk updating the task doc', async () => { const store = taskStoreMock.create({ taskManagerId: 'test-test' }); store.convertToSavedObjectIds.mockImplementation((ids) => ids.map((id) => `task:${id}`)); @@ -1442,27 +1626,35 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[0].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[3], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[3].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } @@ -1535,27 +1727,35 @@ describe('TaskClaiming', () => { [ { ...fetchedTasks[0], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[0].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[1], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[1].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[2], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[2].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, { ...fetchedTasks[3], + attempts: 1, ownerId: 'test-test', - retryAt: fetchedTasks[3].runAt, - status: 'claiming', + retryAt: new Date('1970-01-01T00:05:30.000Z'), + status: 'running', + startedAt: new Date('1970-01-01T00:00:00.000Z'), }, ], { validate: false, excludeLargeFields: true } diff --git a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts index a1595643f1743d..4eae5d9d707906 100644 --- a/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts +++ b/x-pack/plugins/task_manager/server/task_claimers/strategy_mget.ts @@ -13,11 +13,10 @@ // - from the non-stale search results, return as many as we can run based on available // capacity and the cost of each task type to run -import { SavedObjectsErrorHelpers } from '@kbn/core/server'; - import apm, { Logger } from 'elastic-apm-node'; import { Subject, Observable } from 'rxjs'; +import { omit } from 'lodash'; import { TaskTypeDictionary } from '../task_type_dictionary'; import { TaskClaimerOpts, @@ -46,6 +45,7 @@ import { TaskStore, SearchOpts } from '../task_store'; import { isOk, asOk } from '../lib/result_type'; import { selectTasksByCapacity } from './lib/task_selector_by_capacity'; import { TaskPartitioner } from '../lib/task_partitioner'; +import { getRetryAt } from '../lib/get_retry_at'; interface OwnershipClaimingOpts { claimOwnershipUntil: Date; @@ -187,16 +187,21 @@ async function claimAvailableTasks(opts: TaskClaimerOpts): Promise { expect(instance.enabled).not.toBeDefined(); }); + test('skips marking task as running for mget claim strategy', async () => { + const { runner, store } = await pendingStageSetup({ + instance: { + schedule: { + interval: '10m', + }, + }, + definitions: { + bar: { + title: 'Bar!', + createTaskRunner: () => ({ + run: async () => undefined, + }), + }, + }, + strategy: CLAIM_STRATEGY_MGET, + }); + const result = await runner.markTaskAsRunning(); + + expect(result).toBe(true); + expect(apm.startTransaction).not.toHaveBeenCalled(); + expect(mockApmTrans.end).not.toHaveBeenCalled(); + + expect(runner.id).toEqual('foo'); + expect(runner.taskType).toEqual('bar'); + expect(runner.toString()).toEqual('bar "foo"'); + + expect(store.update).not.toHaveBeenCalled(); + }); + describe('TaskEvents', () => { test('emits TaskEvent when a task is marked as running', async () => { const id = _.random(1, 20).toString(); @@ -2344,26 +2374,6 @@ describe('TaskManagerRunner', () => { `Error encountered when running onTaskRemoved() hook for testbar2 "foo": Fail` ); }); - - describe('calculateDelay', () => { - it('returns 30s on the first attempt', () => { - expect(calculateDelay(1)).toBe(30000); - }); - - it('returns delay with jitter', () => { - const delay = calculateDelay(5); - // with jitter should be random between 0 and 40 min (inclusive) - expect(delay).toBeGreaterThanOrEqual(0); - expect(delay).toBeLessThanOrEqual(2400000); - }); - - it('returns delay capped at 1 hour', () => { - const delay = calculateDelay(10); - // with jitter should be random between 0 and 1 hr (inclusive) - expect(delay).toBeGreaterThanOrEqual(0); - expect(delay).toBeLessThanOrEqual(60 * 60 * 1000); - }); - }); }); interface TestOpts { @@ -2371,6 +2381,7 @@ describe('TaskManagerRunner', () => { definitions?: TaskDefinitionRegistry; onTaskEvent?: jest.Mock<(event: TaskEvent) => void>; allowReadingInvalidState?: boolean; + strategy?: string; } function withAnyTiming(taskRun: TaskRun) { @@ -2447,6 +2458,7 @@ describe('TaskManagerRunner', () => { warn_threshold: 5000, }, allowReadingInvalidState: opts.allowReadingInvalidState || false, + strategy: opts.strategy ?? CLAIM_STRATEGY_UPDATE_BY_QUERY, }); if (stage === TaskRunningStage.READY_TO_RUN) { diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index bfcabed9f6e45a..002fcfec1a41ec 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -14,7 +14,7 @@ import apm from 'elastic-apm-node'; import { v4 as uuidv4 } from 'uuid'; import { withSpan } from '@kbn/apm-utils'; -import { defaults, flow, identity, omit, random } from 'lodash'; +import { defaults, flow, identity, omit } from 'lodash'; import { ExecutionContextStart, Logger, SavedObjectsErrorHelpers } from '@kbn/core/server'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import { Middleware } from '../lib/middleware'; @@ -40,7 +40,7 @@ import { TaskTiming, TaskManagerStat, } from '../task_events'; -import { intervalFromDate, maxIntervalFromDate } from '../lib/intervals'; +import { intervalFromDate } from '../lib/intervals'; import { CancelFunction, CancellableTask, @@ -51,12 +51,12 @@ import { SuccessfulRunResult, TaskDefinition, TaskStatus, - DEFAULT_TIMEOUT, } from '../task'; import { TaskTypeDictionary } from '../task_type_dictionary'; -import { isRetryableError, isUnrecoverableError } from './errors'; -import type { EventLoopDelayConfig } from '../config'; +import { isUnrecoverableError } from './errors'; +import { CLAIM_STRATEGY_MGET, type EventLoopDelayConfig } from '../config'; import { TaskValidator } from '../task_validator'; +import { getRetryAt, getRetryDate, getTimeout } from '../lib/get_retry_at'; export const EMPTY_RUN_RESULT: SuccessfulRunResult = { state: {} }; @@ -109,6 +109,7 @@ type Opts = { usageCounter?: UsageCounter; eventLoopDelayConfig: EventLoopDelayConfig; allowReadingInvalidState: boolean; + strategy: string; } & Pick; export enum TaskRunResult { @@ -160,6 +161,7 @@ export class TaskManagerRunner implements TaskRunner { private usageCounter?: UsageCounter; private eventLoopDelayConfig: EventLoopDelayConfig; private readonly taskValidator: TaskValidator; + private readonly claimStrategy: string; /** * Creates an instance of TaskManagerRunner. @@ -184,6 +186,7 @@ export class TaskManagerRunner implements TaskRunner { usageCounter, eventLoopDelayConfig, allowReadingInvalidState, + strategy, }: Opts) { this.instance = asPending(sanitizeInstance(instance)); this.definitions = definitions; @@ -202,6 +205,7 @@ export class TaskManagerRunner implements TaskRunner { definitions: this.definitions, allowReadingInvalidState, }); + this.claimStrategy = strategy; } /** @@ -223,7 +227,9 @@ export class TaskManagerRunner implements TaskRunner { * @param id */ public isSameTask(executionId: string) { - return executionId.startsWith(this.id); + const executionIdParts = executionId.split('::'); + const executionIdCompare = executionIdParts.length > 0 ? executionIdParts[0] : executionId; + return executionIdCompare === this.id; } /** @@ -266,14 +272,7 @@ export class TaskManagerRunner implements TaskRunner { * defined by the task type unless this is an ad-hoc task that specifies an override */ public get timeout() { - if (this.instance.task.schedule) { - // recurring tasks should use timeout in task type - return this.definition?.timeout ?? DEFAULT_TIMEOUT; - } - - return this.instance.task.timeoutOverride - ? this.instance.task.timeoutOverride - : this.definition?.timeout ?? DEFAULT_TIMEOUT; + return getTimeout(this.instance.task, this.definition); } /** @@ -442,6 +441,13 @@ export class TaskManagerRunner implements TaskRunner { ); } + // mget claim strategy sets the task to `running` during the claim cycle + // so this update to mark the task as running is unnecessary + if (this.claimStrategy === CLAIM_STRATEGY_MGET) { + this.instance = asReadyToRun(this.instance.task as ConcreteTaskInstanceWithStartedAt); + return true; + } + const apmTrans = apm.startTransaction( TASK_MANAGER_TRANSACTION_TYPE_MARK_AS_RUNNING, TASK_MANAGER_TRANSACTION_TYPE @@ -475,16 +481,7 @@ export class TaskManagerRunner implements TaskRunner { status: TaskStatus.Running, startedAt: now, attempts, - retryAt: - (this.instance.task.schedule - ? maxIntervalFromDate(now, this.instance.task.schedule.interval, this.timeout) - : this.getRetryDelay({ - attempts, - // Fake an error. This allows retry logic when tasks keep timing out - // and lets us set a proper "retryAt" value each time. - error: new Error('Task timeout'), - addDuration: this.timeout, - })) ?? null, + retryAt: getRetryAt(taskInstance, this.definition) ?? null, // This is a safe conversion as we're setting the startAt above }, { validate: false } @@ -595,7 +592,7 @@ export class TaskManagerRunner implements TaskRunner { ? { schedule } : // when result.error is truthy, then we're retrying because it failed { - runAt: this.getRetryDelay({ + runAt: getRetryDate({ attempts, error, }), @@ -800,31 +797,6 @@ export class TaskManagerRunner implements TaskRunner { return result; } - private getRetryDelay({ - error, - attempts, - addDuration, - }: { - error: Error; - attempts: number; - addDuration?: string; - }): Date | undefined { - const retry: boolean | Date = isRetryableError(error) ?? true; - - let result; - if (retry instanceof Date) { - result = retry; - } else if (retry === true) { - result = new Date(Date.now() + calculateDelay(attempts)); - } - - // Add a duration to the result - if (addDuration && result) { - result = intervalFromDate(result, addDuration)!; - } - return result; - } - private getMaxAttempts() { return this.definition?.maxAttempts ?? this.defaultMaxAttempts; } @@ -883,20 +855,6 @@ export function asRan(task: InstanceOf): RanTask }; } -export function calculateDelay(attempts: number) { - // Return 30s for the first retry attempt - if (attempts === 1) { - return 30 * 1000; - } else { - const defaultBackoffPerFailure = 5 * 60 * 1000; - const maxDelay = 60 * 60 * 1000; - // For each remaining attempt return an exponential delay with jitter that is capped at 1 hour. - // We adjust the attempts by 2 to ensure that delay starts at 5m for the second retry attempt - // and increases exponentially from there. - return random(Math.min(maxDelay, defaultBackoffPerFailure * Math.pow(2, attempts - 2))); - } -} - export function getTaskDelayInSeconds(scheduledAt: Date) { const now = new Date(); return (now.valueOf() - scheduledAt.valueOf()) / 1000; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 9fce783335221d..a90bac2feed944 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -7462,7 +7462,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctions": "Fonctions de groupage", "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctionsDocumentationESQLDescription": "Ces fonctions de regroupement peuvent être utilisées avec `STATS...BY` :", "textBasedEditor.query.textBasedLanguagesEditor.hideQueriesLabel": "Masquer les recherches récentes", - "textBasedEditor.query.textBasedLanguagesEditor.lastDurationColumnLabel": "Dernière durée", "textBasedEditor.query.textBasedLanguagesEditor.lineCount": "{count} {count, plural, one {ligne} other {lignes}}", "textBasedEditor.query.textBasedLanguagesEditor.lineNumber": "Ligne {lineNumber}", "textBasedEditor.query.textBasedLanguagesEditor.operators": "Opérateurs", @@ -15285,8 +15284,6 @@ "xpack.elasticAssistant.prompts.getPromptsError": "Erreur lors de la récupération des invites", "xpack.elasticAssistant.securityAssistant.content.prompts.welcome.enterprisePrompt": "L'assistant d'IA d'Elastic n'est accessible qu'aux entreprises. Veuillez mettre votre licence à niveau pour bénéficier de cette fonctionnalité.", "xpack.elasticAssistantPlugin.server.newChat": "Nouveau chat", - "xpack.embeddableEnhanced.actions.panelNotifications.manyDrilldowns": "Le panneau comporte {count} recherches", - "xpack.embeddableEnhanced.actions.panelNotifications.oneDrilldown": "Le panneau comporte 1 recherche", "xpack.embeddableEnhanced.Drilldowns": "Explorations", "xpack.enterpriseSearch.actions.backButtonLabel": "Retour", "xpack.enterpriseSearch.actions.cancelButtonLabel": "Annuler", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index e503ab2aa9ad53..43dd8f770ac1ed 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -7456,7 +7456,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctions": "グループ関数", "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctionsDocumentationESQLDescription": "これらのグループ関数はSTATS...BYで使用できます。", "textBasedEditor.query.textBasedLanguagesEditor.hideQueriesLabel": "最近のクエリーを非表示", - "textBasedEditor.query.textBasedLanguagesEditor.lastDurationColumnLabel": "前回の期間", "textBasedEditor.query.textBasedLanguagesEditor.lineCount": "{count} {count, plural, other {行}}", "textBasedEditor.query.textBasedLanguagesEditor.lineNumber": "行{lineNumber}", "textBasedEditor.query.textBasedLanguagesEditor.operators": "演算子", @@ -15272,8 +15271,6 @@ "xpack.elasticAssistant.prompts.getPromptsError": "プロンプト取得エラー", "xpack.elasticAssistant.securityAssistant.content.prompts.welcome.enterprisePrompt": "Elastic AI Assistantはエンタープライズユーザーのみご利用いただけます。この機能を使用するには、ライセンスをアップグレードしてください。", "xpack.elasticAssistantPlugin.server.newChat": "新しいチャット", - "xpack.embeddableEnhanced.actions.panelNotifications.manyDrilldowns": "パネルには{count}個のドリルダウンがあります", - "xpack.embeddableEnhanced.actions.panelNotifications.oneDrilldown": "パネルには 1 個のドリルダウンがあります", "xpack.embeddableEnhanced.Drilldowns": "ドリルダウン", "xpack.enterpriseSearch.actions.backButtonLabel": "戻る", "xpack.enterpriseSearch.actions.cancelButtonLabel": "キャンセル", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 87a4e19d9ab4e7..02aa5c9d475c1b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -7469,7 +7469,6 @@ "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctions": "分组函数", "textBasedEditor.query.textBasedLanguagesEditor.groupingFunctionsDocumentationESQLDescription": "这些分组函数可以与 `STATS...BY` 搭配使用:", "textBasedEditor.query.textBasedLanguagesEditor.hideQueriesLabel": "隐藏最近查询", - "textBasedEditor.query.textBasedLanguagesEditor.lastDurationColumnLabel": "上次持续时间", "textBasedEditor.query.textBasedLanguagesEditor.lineCount": "{count} {count, plural, other {行}}", "textBasedEditor.query.textBasedLanguagesEditor.lineNumber": "第 {lineNumber} 行", "textBasedEditor.query.textBasedLanguagesEditor.operators": "运算符", @@ -15297,8 +15296,6 @@ "xpack.elasticAssistant.prompts.getPromptsError": "提取提示时出错", "xpack.elasticAssistant.securityAssistant.content.prompts.welcome.enterprisePrompt": "Elastic AI 助手仅对企业用户可用。请升级许可证以使用此功能。", "xpack.elasticAssistantPlugin.server.newChat": "新聊天", - "xpack.embeddableEnhanced.actions.panelNotifications.manyDrilldowns": "面板有 {count} 个向下钻取", - "xpack.embeddableEnhanced.actions.panelNotifications.oneDrilldown": "面板有 1 个向下钻取", "xpack.embeddableEnhanced.Drilldowns": "向下钻取", "xpack.enterpriseSearch.actions.backButtonLabel": "返回", "xpack.enterpriseSearch.actions.cancelButtonLabel": "取消", diff --git a/x-pack/test/accessibility/apps/group1/dashboard_controls.ts b/x-pack/test/accessibility/apps/group1/dashboard_controls.ts index dd45b686743434..44f76de3eb5c2c 100644 --- a/x-pack/test/accessibility/apps/group1/dashboard_controls.ts +++ b/x-pack/test/accessibility/apps/group1/dashboard_controls.ts @@ -12,26 +12,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'dashboard', 'home', 'dashboardControls']); + const { common, dashboard, home, dashboardControls } = getPageObjects([ + 'common', + 'dashboard', + 'home', + 'dashboardControls', + ]); const browser = getService('browser'); describe('Dashboard controls a11y tests', () => { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.home.addSampleDataSet('flights'); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); - await PageObjects.dashboard.switchToEditMode(); + await home.addSampleDataSet('flights'); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); + await dashboard.switchToEditMode(); }); after(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.home.removeSampleDataSet('flights'); + await home.removeSampleDataSet('flights'); }); it('Controls main menu panel', async () => { @@ -57,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Options control panel & dashboard with options control', async () => { - await PageObjects.dashboardControls.controlsEditorSetfield('OriginCityName'); + await dashboardControls.controlsEditorSetfield('OriginCityName'); await a11y.testAppSnapshot(); await testSubjects.click('control-editor-save'); await a11y.testAppSnapshot(); @@ -83,12 +88,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('Dashboard with options and range control panel popovers', async () => { await testSubjects.click('dashboardQuickSaveMenuItem'); await a11y.testAppSnapshot(); - const optionsControlId = (await PageObjects.dashboardControls.getAllControlIds())[0]; - await PageObjects.dashboardControls.optionsListOpenPopover(optionsControlId); + const optionsControlId = (await dashboardControls.getAllControlIds())[0]; + await dashboardControls.optionsListOpenPopover(optionsControlId); await a11y.testAppSnapshot(); // a11y error on range control https://github.com/elastic/kibana/issues/135266 - uncomment after the fix - // const rangeControlId = (await PageObjects.dashboardControls.getAllControlIds())[1]; - // await PageObjects.dashboardControls.rangeSliderOpenPopover(rangeControlId); + // const rangeControlId = (await dashboardControls.getAllControlIds())[1]; + // await dashboardControls.rangeSliderOpenPopover(rangeControlId); // await a11y.testAppSnapshot(); }); }); diff --git a/x-pack/test/accessibility/apps/group1/dashboard_panel_options.ts b/x-pack/test/accessibility/apps/group1/dashboard_panel_options.ts index 991be3b49bb40f..92c558f17dadc4 100644 --- a/x-pack/test/accessibility/apps/group1/dashboard_panel_options.ts +++ b/x-pack/test/accessibility/apps/group1/dashboard_panel_options.ts @@ -150,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('dashboard panel - save to library', async () => { await dashboardPanelActions.openContextMenuMorePanel(header); - await testSubjects.click('embeddablePanelAction-legacySaveToLibrary'); + await testSubjects.click('embeddablePanelAction-saveToLibrary'); await a11y.testAppSnapshot(); await testSubjects.click('saveCancelButton'); }); diff --git a/x-pack/test/accessibility/apps/group2/lens.ts b/x-pack/test/accessibility/apps/group2/lens.ts index a64ff207bc3f54..75e553227dbad9 100644 --- a/x-pack/test/accessibility/apps/group2/lens.ts +++ b/x-pack/test/accessibility/apps/group2/lens.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'timePicker', 'home', 'lens']); + const { common, visualize, timePicker, lens } = getPageObjects([ + 'common', + 'visualize', + 'timePicker', + 'lens', + ]); const a11y = getService('a11y'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); @@ -40,25 +45,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('lens', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.timePicker.ensureHiddenNoDataPopover(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await timePicker.ensureHiddenNoDataPopover(); await a11y.testAppSnapshot(); }); it('lens XY chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.timePicker.ensureHiddenNoDataPopover(); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await timePicker.ensureHiddenNoDataPopover(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -68,74 +73,74 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('lens pie chart', async () => { - await PageObjects.lens.switchToVisualization('pie'); + await lens.switchToVisualization('pie'); await a11y.testAppSnapshot(); }); it('lens datatable', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.switchToVisualization('lnsDatatable'); await a11y.testAppSnapshot(); }); it('lens datatable with dynamic cell colouring', async () => { - await PageObjects.lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); - await PageObjects.lens.setTableDynamicColoring('cell'); + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + await lens.setTableDynamicColoring('cell'); await a11y.testAppSnapshot(); }); it('lens datatable with dynamic text colouring', async () => { - await PageObjects.lens.setTableDynamicColoring('text'); + await lens.setTableDynamicColoring('text'); await a11y.testAppSnapshot(); }); it('lens datatable with palette panel open', async () => { - await PageObjects.lens.openPalettePanel(); + await lens.openPalettePanel(); await a11y.testAppSnapshot(); }); it('lens datatable with custom palette stops', async () => { - await PageObjects.lens.changePaletteTo('custom'); + await lens.changePaletteTo('custom'); await a11y.testAppSnapshot(); - await PageObjects.lens.closePaletteEditor(); - await PageObjects.lens.closeDimensionEditor(); + await lens.closePaletteEditor(); + await lens.closeDimensionEditor(); }); it('lens metric chart', async () => { - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await lens.switchToVisualization('lnsLegacyMetric'); await a11y.testAppSnapshot(); }); it('dimension configuration panel', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.timePicker.ensureHiddenNoDataPopover(); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await timePicker.ensureHiddenNoDataPopover(); + await lens.goToTimeRange(); - await PageObjects.lens.openDimensionEditor('lnsXY_xDimensionPanel > lns-empty-dimension'); + await lens.openDimensionEditor('lnsXY_xDimensionPanel > lns-empty-dimension'); await a11y.testAppSnapshot(); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-empty-dimension'); + await lens.closeDimensionEditor(); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-empty-dimension'); await a11y.testAppSnapshot(); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('change chart type', async () => { - await PageObjects.lens.openChartSwitchPopover(); - await PageObjects.lens.waitForSearchInputValue('line'); + await lens.openChartSwitchPopover(); + await lens.waitForSearchInputValue('line'); await a11y.testAppSnapshot(); await testSubjects.click('lnsChartSwitchPopover_line'); }); it('change chart type via suggestions', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -146,16 +151,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('lens XY chart with multiple layers', async () => { - await PageObjects.lens.createLayer(); + await lens.createLayer(); - await PageObjects.lens.switchToVisualization('area'); - await PageObjects.lens.configureDimension({ + await lens.switchToVisualization('area'); + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'median', field: 'bytes', @@ -164,42 +169,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('lens XY chart with reference line layer', async () => { - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); await a11y.testAppSnapshot(); }); it('lens XY chart with annotations layer', async () => { - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); await a11y.testAppSnapshot(); }); it('saves lens chart', async () => { - await PageObjects.lens.save(lensChartName); + await lens.save(lensChartName); await a11y.testAppSnapshot(); // delete newly created Lens - await PageObjects.common.navigateToApp('visualize'); + await common.navigateToApp('visualize'); await listingTable.searchForItemWithName(lensChartName); await listingTable.checkListingSelectAllCheckbox(); await listingTable.clickDeleteSelected(); - await PageObjects.common.clickConfirmOnModal(); + await common.clickConfirmOnModal(); }); describe('focus behavior when adding or removing layers', () => { it('should focus the added layer', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.createLayer(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.createLayer(); expect(await hasFocus('lns-layerPanel-1')).to.be(true); }); it('should focus the remaining layer when the first is removed', async () => { - await PageObjects.lens.removeLayer(0); + await lens.removeLayer(0); expect(await hasFocus('lns-layerPanel-0')).to.be(true); - await PageObjects.lens.createLayer(); - await PageObjects.lens.removeLayer(1); + await lens.createLayer(); + await lens.removeLayer(1); expect(await hasFocus('lns-layerPanel-0')).to.be(true); }); it('should focus the only layer when resetting the layer', async () => { - await PageObjects.lens.removeLayer(); + await lens.removeLayer(); expect(await hasFocus('lns-layerPanel-0')).to.be(true); }); }); diff --git a/x-pack/test/accessibility/apps/group3/graph.ts b/x-pack/test/accessibility/apps/group3/graph.ts index 839ea50ce27792..b79c561837f6b9 100644 --- a/x-pack/test/accessibility/apps/group3/graph.ts +++ b/x-pack/test/accessibility/apps/group3/graph.ts @@ -12,24 +12,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const browser = getService('browser'); - const PageObjects = getPageObjects(['settings', 'common', 'graph', 'header', 'home']); + const { common, header, home } = getPageObjects(['common', 'header', 'home']); describe('Graph app a11y tests', () => { before(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.addSampleDataSet('flights'); - await PageObjects.common.navigateToApp('graph'); + await header.waitUntilLoadingHasFinished(); + await home.addSampleDataSet('flights'); + await common.navigateToApp('graph'); }); after(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.removeSampleDataSet('flights'); + await header.waitUntilLoadingHasFinished(); + await home.removeSampleDataSet('flights'); }); it('Graph listing page', async function () { diff --git a/x-pack/test/accessibility/apps/group3/maps.ts b/x-pack/test/accessibility/apps/group3/maps.ts index 2f69696b5824f8..bb68aeb0d8f06e 100644 --- a/x-pack/test/accessibility/apps/group3/maps.ts +++ b/x-pack/test/accessibility/apps/group3/maps.ts @@ -12,28 +12,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const inspector = getService('inspector'); - const PageObjects = getPageObjects(['common', 'settings', 'header', 'home', 'maps']); + const { common, header, home, maps } = getPageObjects(['common', 'header', 'home', 'maps']); describe('Maps app Accessibility', () => { before(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.addSampleDataSet('flights'); - await PageObjects.common.navigateToApp('maps'); + await header.waitUntilLoadingHasFinished(); + await home.addSampleDataSet('flights'); + await common.navigateToApp('maps'); }); after(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.removeSampleDataSet('flights'); + await header.waitUntilLoadingHasFinished(); + await home.removeSampleDataSet('flights'); }); it('loads maps workpads', async function () { - await PageObjects.maps.loadSavedMap('[Flights] Origin Time Delayed'); + await maps.loadSavedMap('[Flights] Origin Time Delayed'); await a11y.testAppSnapshot(); }); @@ -68,7 +68,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('map inspector panel - view maps', async function () { - await PageObjects.maps.openInspectorMapView(); + await maps.openInspectorMapView(); await a11y.testAppSnapshot(); }); @@ -78,26 +78,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('full screen button should exist', async () => { - await PageObjects.maps.existFullScreen(); + await maps.existFullScreen(); await a11y.testAppSnapshot(); }); it('displays exit full screen logo button', async () => { - await PageObjects.maps.enterFullScreen(); + await maps.enterFullScreen(); await a11y.testAppSnapshot(); }); it(`allows a map to be created`, async () => { - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); await a11y.testAppSnapshot(); - await PageObjects.maps.expectExistAddLayerButton(); + await maps.expectExistAddLayerButton(); await a11y.testAppSnapshot(); - await PageObjects.maps.saveMap('my test map'); + await maps.saveMap('my test map'); await a11y.testAppSnapshot(); }); it('maps listing page', async function () { - await PageObjects.common.navigateToApp('maps'); + await common.navigateToApp('maps'); await retry.waitFor( 'maps workpads visible', async () => await testSubjects.exists('itemsInMemTable') diff --git a/x-pack/test/accessibility/apps/group3/search_sessions.ts b/x-pack/test/accessibility/apps/group3/search_sessions.ts index c400d172632214..eed2d74a709671 100644 --- a/x-pack/test/accessibility/apps/group3/search_sessions.ts +++ b/x-pack/test/accessibility/apps/group3/search_sessions.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['searchSessionsManagement']); + const { searchSessionsManagement } = getPageObjects(['searchSessionsManagement']); const a11y = getService('a11y'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Search sessions Accessibility', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/data/search_sessions'); - await PageObjects.searchSessionsManagement.goTo(); + await searchSessionsManagement.goTo(); }); after(async () => { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts index d69055a92e1f4f..a482374409832e 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts @@ -347,6 +347,79 @@ export default ({ getService }: FtrProviderContext) => { case 'space_1_all_with_restricted_fixture at space1': expect(response.body.total).to.eql(3); expect(response.statusCode).to.eql(200); + expect(response.body).to.eql({ + total: 3, + rules: [ + { ...getDefaultRules(response), tags: ['multiple-rules-edit'] }, + { + id: response.body.rules[1].id, + notify_when: 'onThrottleInterval', + enabled: false, + name: 'abc', + tags: ['multiple-rules-edit'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[1].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[1].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[1].updated_at, + created_at: response.body.rules[1].created_at, + scheduled_task_id: response.body.rules[1].scheduled_task_id, + execution_status: response.body.rules[1].execution_status, + monitoring: response.body.rules[1].monitoring, + revision: 0, + ...(response.body.rules[1].next_run + ? { next_run: response.body.rules[1].next_run } + : {}), + ...(response.body.rules[1].last_run + ? { last_run: response.body.rules[1].last_run } + : {}), + }, + { + id: response.body.rules[2].id, + notify_when: 'onThrottleInterval', + enabled: false, + name: 'abc', + tags: ['multiple-rules-edit'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[2].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[2].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[2].updated_at, + created_at: response.body.rules[2].created_at, + scheduled_task_id: response.body.rules[2].scheduled_task_id, + execution_status: response.body.rules[2].execution_status, + monitoring: response.body.rules[2].monitoring, + revision: 0, + ...(response.body.rules[1].next_run + ? { next_run: response.body.rules[2].next_run } + : {}), + ...(response.body.rules[1].last_run + ? { last_run: response.body.rules[2].last_run } + : {}), + }, + ], + errors: [], + }); break; default: throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); @@ -397,6 +470,79 @@ export default ({ getService }: FtrProviderContext) => { case 'space_1_all_with_restricted_fixture at space1': expect(response.body.total).to.eql(3); expect(response.statusCode).to.eql(200); + expect(response.body).to.eql({ + total: 3, + rules: [ + { ...getDefaultRules(response), tags: ['multiple-rules-disable'] }, + { + id: response.body.rules[1].id, + notify_when: 'onThrottleInterval', + enabled: false, + name: 'abc', + tags: ['multiple-rules-disable'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[1].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[1].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[1].updated_at, + created_at: response.body.rules[1].created_at, + scheduled_task_id: response.body.rules[1].scheduled_task_id, + execution_status: response.body.rules[1].execution_status, + monitoring: response.body.rules[1].monitoring, + revision: 0, + ...(response.body.rules[1].next_run + ? { next_run: response.body.rules[1].next_run } + : {}), + ...(response.body.rules[1].last_run + ? { last_run: response.body.rules[1].last_run } + : {}), + }, + { + id: response.body.rules[2].id, + notify_when: 'onThrottleInterval', + enabled: false, + name: 'abc', + tags: ['multiple-rules-disable'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[2].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[2].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[2].updated_at, + created_at: response.body.rules[2].created_at, + scheduled_task_id: response.body.rules[2].scheduled_task_id, + execution_status: response.body.rules[2].execution_status, + monitoring: response.body.rules[2].monitoring, + revision: 0, + ...(response.body.rules[2].next_run + ? { next_run: response.body.rules[2].next_run } + : {}), + ...(response.body.rules[2].last_run + ? { last_run: response.body.rules[2].last_run } + : {}), + }, + ], + errors: [], + }); break; default: throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts index 4464535dbcd4d1..e7cd7044717c4a 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts @@ -178,7 +178,49 @@ export default ({ getService }: FtrProviderContext) => { break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.body).to.eql(defaultSuccessfulResponse); + expect(response.body).to.eql({ + ...defaultSuccessfulResponse, + rules: [ + { + id: response.body.rules[0].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['foo'], + consumer: 'alertsRestrictedFixture', + throttle: '1m', + rule_type_id: 'test.restricted-noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[0].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[0].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[0].updated_at, + created_at: response.body.rules[0].created_at, + revision: 0, + scheduled_task_id: response.body.rules[0].scheduled_task_id, + ...(response.body.rules[0].last_run + ? { last_run: response.body.rules[0].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[0].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[0].next_run + ? { next_run: response.body.rules[0].next_run } + : {}), + monitoring: response.body.rules[0].monitoring, + }, + ], + }); expect(response.statusCode).to.eql(200); break; default: @@ -275,7 +317,49 @@ export default ({ getService }: FtrProviderContext) => { case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.body).to.eql(defaultSuccessfulResponse); + expect(response.body).to.eql({ + ...defaultSuccessfulResponse, + rules: [ + { + id: response.body.rules[0].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['foo'], + consumer: 'alerts', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[0].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[0].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[0].updated_at, + created_at: response.body.rules[0].created_at, + revision: 0, + scheduled_task_id: response.body.rules[0].scheduled_task_id, + ...(response.body.rules[0].last_run + ? { last_run: response.body.rules[0].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[0].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[0].next_run + ? { next_run: response.body.rules[0].next_run } + : {}), + monitoring: response.body.rules[0].monitoring, + }, + ], + }); expect(response.statusCode).to.eql(200); break; default: @@ -289,7 +373,7 @@ export default ({ getService }: FtrProviderContext) => { supertest .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) .set('kbn-xsrf', 'foo') - .send(getTestRuleData({ tags: ['multiple-rules-edit'] })) + .send(getTestRuleData({ tags: ['multiple-rules-edit-with-ids'] })) .expect(200) ) ); @@ -325,7 +409,126 @@ export default ({ getService }: FtrProviderContext) => { case 'superuser at space1': case 'space_1_all at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.body).to.eql({ ...defaultSuccessfulResponse, total: 3 }); + expect(response.body).to.eql({ + ...defaultSuccessfulResponse, + rules: [ + { + id: response.body.rules[0].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-ids'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[0].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[0].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[0].updated_at, + created_at: response.body.rules[0].created_at, + revision: 0, + scheduled_task_id: response.body.rules[0].scheduled_task_id, + ...(response.body.rules[0].last_run + ? { last_run: response.body.rules[0].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[0].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[0].next_run + ? { next_run: response.body.rules[0].next_run } + : {}), + monitoring: response.body.rules[0].monitoring, + }, + { + id: response.body.rules[1].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-ids'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[1].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[1].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[1].updated_at, + created_at: response.body.rules[1].created_at, + revision: 0, + scheduled_task_id: response.body.rules[1].scheduled_task_id, + ...(response.body.rules[1].last_run + ? { last_run: response.body.rules[1].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[1].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[1].next_run + ? { next_run: response.body.rules[1].next_run } + : {}), + monitoring: response.body.rules[1].monitoring, + }, + { + id: response.body.rules[2].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-ids'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[2].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[2].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[2].updated_at, + created_at: response.body.rules[2].created_at, + revision: 0, + scheduled_task_id: response.body.rules[2].scheduled_task_id, + ...(response.body.rules[2].last_run + ? { last_run: response.body.rules[2].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[2].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[2].next_run + ? { next_run: response.body.rules[2].next_run } + : {}), + monitoring: response.body.rules[2].monitoring, + }, + ], + total: 3, + }); expect(response.statusCode).to.eql(200); break; default: @@ -339,7 +542,7 @@ export default ({ getService }: FtrProviderContext) => { supertest .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) .set('kbn-xsrf', 'foo') - .send(getTestRuleData({ tags: ['multiple-rules-enable'] })) + .send(getTestRuleData({ tags: ['multiple-rules-edit-with-filter'] })) .expect(200) ) ); @@ -350,7 +553,7 @@ export default ({ getService }: FtrProviderContext) => { const response = await supertestWithoutAuth .patch(`${getUrlPrefix(space.id)}/internal/alerting/rules/_bulk_enable`) .set('kbn-xsrf', 'foo') - .send({ filter: `alert.attributes.tags: "multiple-rules-enable"` }) + .send({ filter: `alert.attributes.tags: "multiple-rules-edit-with-filter"` }) .auth(user.username, user.password); switch (scenario.id) { @@ -375,7 +578,126 @@ export default ({ getService }: FtrProviderContext) => { case 'superuser at space1': case 'space_1_all at space1': case 'space_1_all_with_restricted_fixture at space1': - expect(response.body).to.eql({ ...defaultSuccessfulResponse, total: 3 }); + expect(response.body).to.eql({ + ...defaultSuccessfulResponse, + total: 3, + rules: [ + { + id: response.body.rules[0].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-filter'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[0].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[0].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[0].updated_at, + created_at: response.body.rules[0].created_at, + revision: 0, + scheduled_task_id: response.body.rules[0].scheduled_task_id, + ...(response.body.rules[0].last_run + ? { last_run: response.body.rules[0].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[0].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[0].next_run + ? { next_run: response.body.rules[0].next_run } + : {}), + monitoring: response.body.rules[0].monitoring, + }, + { + id: response.body.rules[1].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-filter'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[1].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[1].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[1].updated_at, + created_at: response.body.rules[1].created_at, + revision: 0, + scheduled_task_id: response.body.rules[1].scheduled_task_id, + ...(response.body.rules[1].last_run + ? { last_run: response.body.rules[1].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[1].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[1].next_run + ? { next_run: response.body.rules[1].next_run } + : {}), + monitoring: response.body.rules[1].monitoring, + }, + { + id: response.body.rules[2].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['multiple-rules-edit-with-filter'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[2].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[2].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[2].updated_at, + created_at: response.body.rules[2].created_at, + revision: 0, + scheduled_task_id: response.body.rules[2].scheduled_task_id, + ...(response.body.rules[2].last_run + ? { last_run: response.body.rules[2].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[2].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[2].next_run + ? { next_run: response.body.rules[2].next_run } + : {}), + monitoring: response.body.rules[2].monitoring, + }, + ], + }); expect(response.statusCode).to.eql(200); break; default: @@ -400,7 +722,49 @@ export default ({ getService }: FtrProviderContext) => { switch (scenario.id) { // This superuser has more privileges that we think case 'superuser at space1': - expect(response.body).to.eql(defaultSuccessfulResponse); + expect(response.body).to.eql({ + ...defaultSuccessfulResponse, + rules: [ + { + id: response.body.rules[0].id, + notify_when: 'onThrottleInterval', + enabled: true, + name: 'abc', + tags: ['foo'], + consumer: 'alertsFixture', + throttle: '1m', + rule_type_id: 'test.noop', + api_key_created_by_user: false, + api_key_owner: response.body.rules[0].api_key_owner, + created_by: 'elastic', + updated_by: response.body.rules[0].updated_by, + mute_all: false, + muted_alert_ids: [], + schedule: { interval: '1m' }, + actions: [], + params: {}, + running: false, + snooze_schedule: [], + updated_at: response.body.rules[0].updated_at, + created_at: response.body.rules[0].created_at, + revision: 0, + scheduled_task_id: response.body.rules[0].scheduled_task_id, + ...(response.body.rules[0].last_run + ? { last_run: response.body.rules[0].last_run } + : {}), + execution_status: { + last_duration: 0, + last_execution_date: + response.body.rules[0].execution_status.last_execution_date, + status: 'pending', + }, + ...(response.body.rules[0].next_run + ? { next_run: response.body.rules[0].next_run } + : {}), + monitoring: response.body.rules[0].monitoring, + }, + ], + }); expect(response.statusCode).to.eql(200); break; case 'global_read at space1': diff --git a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts index d8ad522209bb89..085652d2ddc956 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts @@ -6,6 +6,8 @@ */ import expect from '@kbn/expect'; +import pRetry from 'p-retry'; + import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; @@ -145,6 +147,7 @@ export default function (providerContext: FtrProviderContext) { describe('PUT /proxies/{itemId}', () => { it('should allow to update an existing fleet proxy', async function () { + const fleetPolicyBefore = await getLatestFleetPolicies(policyId); await supertest .put(`/api/fleet/proxies/${existingId}`) .set('kbn-xsrf', 'xxxx') @@ -160,13 +163,23 @@ export default function (providerContext: FtrProviderContext) { expect(fleetServerHost.name).to.eql('Test 123 updated'); - const fleetPolicyAfter = await getLatestFleetPolicies(policyId); - expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be('https://testupdated.fr:3232'); - expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be( - 'https://testupdated.fr:3232' - ); - expect(fleetPolicyAfter?.data?.agent.download.proxy_url).to.be( - 'https://testupdated.fr:3232' + await pRetry( + async () => { + const fleetPolicyAfter = await getLatestFleetPolicies(policyId); + if (fleetPolicyAfter.revision_idx === fleetPolicyBefore.revision_idx) { + throw new Error('fleet server policy not deployed'); + } + expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be('https://testupdated.fr:3232'); + expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be( + 'https://testupdated.fr:3232' + ); + expect(fleetPolicyAfter?.data?.agent.download.proxy_url).to.be( + 'https://testupdated.fr:3232' + ); + }, + { + maxRetryTime: 30 * 1000, // 30s for the task to run + } ); }); @@ -183,15 +196,26 @@ export default function (providerContext: FtrProviderContext) { describe('DELETE /proxies/{itemId}', () => { it('should allow to delete an existing fleet proxy', async function () { + const fleetPolicyBefore = await getLatestFleetPolicies(policyId); await supertest .delete(`/api/fleet/proxies/${existingId}`) .set('kbn-xsrf', 'xxxx') .expect(200); - const fleetPolicyAfter = await getLatestFleetPolicies(policyId); - expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be(undefined); - expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be(undefined); - expect(fleetPolicyAfter?.data?.agent.download.proxy_url).to.be(undefined); + await pRetry( + async () => { + const fleetPolicyAfter = await getLatestFleetPolicies(policyId); + if (fleetPolicyAfter.revision_idx === fleetPolicyBefore.revision_idx) { + throw new Error('fleet server policy not deployed'); + } + expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be(undefined); + expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be(undefined); + expect(fleetPolicyAfter?.data?.agent.download.proxy_url).to.be(undefined); + }, + { + maxRetryTime: 30 * 1000, // 30s for the task to run + } + ); }); }); }); diff --git a/x-pack/test/functional/apps/canvas/custom_elements.ts b/x-pack/test/functional/apps/canvas/custom_elements.ts index f71cc76d5bcb28..cfeace496eafe0 100644 --- a/x-pack/test/functional/apps/canvas/custom_elements.ts +++ b/x-pack/test/functional/apps/canvas/custom_elements.ts @@ -16,7 +16,7 @@ export default function canvasCustomElementTest({ const testSubjects = getService('testSubjects'); const browser = getService('browser'); const retry = getService('retry'); - const PageObjects = getPageObjects(['canvas']); + const { canvas } = getPageObjects(['canvas']); const find = getService('find'); const kibanaServer = getService('kibanaServer'); const archive = 'x-pack/test/functional/fixtures/kbn_archiver/canvas/default'; @@ -27,8 +27,8 @@ export default function canvasCustomElementTest({ before(async () => { await kibanaServer.importExport.load(archive); // load test workpad - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('Test Workpad'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('Test Workpad'); }); after(async () => { @@ -46,10 +46,7 @@ export default function canvasCustomElementTest({ await testSubjects.click('canvasWorkpadEditMenu__saveElementButton', 20000); // fill out the custom element form and submit it - await PageObjects.canvas.fillOutCustomElementForm( - 'My New Element', - 'An excellent new element' - ); + await canvas.fillOutCustomElementForm('My New Element', 'An excellent new element'); // wait for the custom element success toast notif await testSubjects.exists('canvasCustomElementCreate-success', { @@ -59,7 +56,7 @@ export default function canvasCustomElementTest({ it('adds the custom element to the workpad when prompted', async () => { // open the saved elements modal - await PageObjects.canvas.openSavedElementsModal(); + await canvas.openSavedElementsModal(); // ensure the custom element is the one expected and click it to add to the workpad const customElement = await find.byCssSelector('.canvasElementCard__wrapper'); @@ -94,7 +91,7 @@ export default function canvasCustomElementTest({ it('saves custom element modifications', async () => { // open the saved elements modal - await PageObjects.canvas.openSavedElementsModal(); + await canvas.openSavedElementsModal(); // ensure the correct amount of custom elements exist const customElements = await find.allByCssSelector('.canvasElementCard__wrapper'); @@ -108,10 +105,7 @@ export default function canvasCustomElementTest({ await testSubjects.click('canvasElementCard__editButton', 20000); // fill out the custom element form and submit it - await PageObjects.canvas.fillOutCustomElementForm( - 'My Edited New Element', - 'An excellent edited element' - ); + await canvas.fillOutCustomElementForm('My Edited New Element', 'An excellent edited element'); // ensure the custom element in the modal shows the updated text await retry.try(async () => { @@ -121,12 +115,12 @@ export default function canvasCustomElementTest({ }); // Close the modal - await PageObjects.canvas.closeSavedElementsModal(); + await canvas.closeSavedElementsModal(); }); it('deletes custom element when prompted', async () => { // open the saved elements modal - await PageObjects.canvas.openSavedElementsModal(); + await canvas.openSavedElementsModal(); // ensure the correct amount of custom elements exist const customElements = await find.allByCssSelector('.canvasElementCard__wrapper'); @@ -148,7 +142,7 @@ export default function canvasCustomElementTest({ }); // Close the modal - await PageObjects.canvas.closeSavedElementsModal(); + await canvas.closeSavedElementsModal(); }); }); } diff --git a/x-pack/test/functional/apps/canvas/datasource.ts b/x-pack/test/functional/apps/canvas/datasource.ts index 5afda1a579cd03..480510ede4e787 100644 --- a/x-pack/test/functional/apps/canvas/datasource.ts +++ b/x-pack/test/functional/apps/canvas/datasource.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function canvasExpressionTest({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['canvas']); + const { canvas } = getPageObjects(['canvas']); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const monacoEditor = getService('monacoEditor'); @@ -35,8 +35,8 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr }); // create new test workpad - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.createNewWorkpad(); + await canvas.goToListingPage(); + await canvas.createNewWorkpad(); }); after(async () => { @@ -50,16 +50,16 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr describe('esdocs', function () { it('sidebar shows to esdocs datasource settings', async () => { - await PageObjects.canvas.createNewDatatableElement(); + await canvas.createNewDatatableElement(); // find the first workpad element (a markdown element) and click it to select it await testSubjects.click('canvasWorkpadPage > canvasWorkpadPageElementContent', 20000); // open Data tab - await PageObjects.canvas.openDatasourceTab(); + await canvas.openDatasourceTab(); // change datasource to esdocs - await PageObjects.canvas.changeDatasourceTo('esdocs'); + await canvas.changeDatasourceTo('esdocs'); // click data view select await testSubjects.click('canvasDataViewSelect'); @@ -74,9 +74,9 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr it('updates expression to use esdocs', async () => { await testSubjects.click('canvasDataViewSelect__logstash-*'); - await PageObjects.canvas.saveDatasourceChanges(); + await canvas.saveDatasourceChanges(); - await PageObjects.canvas.openExpressionEditor(); + await canvas.openExpressionEditor(); await monacoEditor.waitCodeEditorReady('canvasExpressionInput'); expect(await monacoEditor.getCodeEditorValue()).contain('esdocs index="logstash-*"'); }); diff --git a/x-pack/test/functional/apps/canvas/embeddables/lens.ts b/x-pack/test/functional/apps/canvas/embeddables/lens.ts index 629ab9edc16744..2bd2ec820b6f3c 100644 --- a/x-pack/test/functional/apps/canvas/embeddables/lens.ts +++ b/x-pack/test/functional/apps/canvas/embeddables/lens.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function canvasLensTest({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['canvas', 'header', 'lens']); + const { canvas, header, lens } = getPageObjects(['canvas', 'header', 'lens']); const esArchiver = getService('esArchiver'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -25,8 +25,8 @@ export default function canvasLensTest({ getService, getPageObjects }: FtrProvid await kibanaServer.savedObjects.cleanStandardList(); await kibanaServer.importExport.load(archives.kbn); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-lens' }); - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.createNewWorkpad(); + await canvas.goToListingPage(); + await canvas.createNewWorkpad(); }); after(async () => { @@ -36,63 +36,63 @@ export default function canvasLensTest({ getService, getPageObjects }: FtrProvid describe('by-reference', () => { it('adds existing lens embeddable from the visualize library', async () => { - await PageObjects.canvas.clickAddFromLibrary(); + await canvas.clickAddFromLibrary(); await dashboardAddPanel.addEmbeddable('Artistpreviouslyknownaslens', 'lens'); await testSubjects.existOrFail('embeddablePanelHeading-Artistpreviouslyknownaslens'); }); it('edits lens by-reference embeddable', async () => { await dashboardPanelActions.editPanelByTitle('Artistpreviouslyknownaslens'); - await PageObjects.lens.save('Artistpreviouslyknownaslens v2', false, true); + await lens.save('Artistpreviouslyknownaslens v2', false, true); await testSubjects.existOrFail('embeddablePanelHeading-Artistpreviouslyknownaslensv2'); }); it('renders lens visualization using savedLens expression', async () => { // load test workpad - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('Test Workpad'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('Test Workpad'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '16,788'); + await lens.assertLegacyMetric('Maximum of bytes', '16,788'); }); }); describe('by-value', () => { it('creates new lens embeddable', async () => { - await PageObjects.canvas.addNewPage(); - await PageObjects.canvas.createNewVis('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await canvas.addNewPage(); + await canvas.createNewVis('lens'); + await lens.goToTimeRange(); + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.saveAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.saveAndReturn(); + await header.waitUntilLoadingHasFinished(); await testSubjects.exists('xyVisChart'); }); it('edits lens by-value embeddable', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const panelHeader = await testSubjects.find('embeddablePanelHeading-'); await dashboardPanelActions.openContextMenu(panelHeader); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.saveAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.saveAndReturn(); + await header.waitUntilLoadingHasFinished(); await testSubjects.exists('xyVisChart'); }); }); describe('switch page smoke test', () => { it('loads embeddables on page change', async () => { - await PageObjects.canvas.goToPreviousPage(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '16,788'); + await canvas.goToPreviousPage(); + await header.waitUntilLoadingHasFinished(); + await lens.assertLegacyMetric('Maximum of bytes', '16,788'); }); }); }); diff --git a/x-pack/test/functional/apps/canvas/embeddables/maps.ts b/x-pack/test/functional/apps/canvas/embeddables/maps.ts index 6cf23726846f12..2a63c4f64b57a7 100644 --- a/x-pack/test/functional/apps/canvas/embeddables/maps.ts +++ b/x-pack/test/functional/apps/canvas/embeddables/maps.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['canvas', 'header', 'maps']); + const { canvas, maps } = getPageObjects(['canvas', 'maps']); const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); const testSubjects = getService('testSubjects'); @@ -19,44 +19,44 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); // open canvas home - await PageObjects.canvas.goToListingPage(); + await canvas.goToListingPage(); // create new workpad - await PageObjects.canvas.createNewWorkpad(); - await PageObjects.canvas.setWorkpadName('maps tests'); + await canvas.createNewWorkpad(); + await canvas.setWorkpadName('maps tests'); }); describe('by-value', () => { it('creates new map embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); - await PageObjects.canvas.createNewVis('maps'); - await PageObjects.maps.clickSaveAndReturnButton(); - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await canvas.createNewVis('maps'); + await maps.clickSaveAndReturnButton(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount + 1); }); it('edits map by-value embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.maps.saveMap('canvas test map'); - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + await maps.saveMap('canvas test map'); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount); }); }); describe('by-reference', () => { it('adds existing map embeddable from the visualize library', async () => { - await PageObjects.canvas.deleteSelectedElement(); - await PageObjects.canvas.clickAddFromLibrary(); + await canvas.deleteSelectedElement(); + await canvas.clickAddFromLibrary(); await dashboardAddPanel.addEmbeddable('canvas test map', 'map'); await testSubjects.existOrFail('embeddablePanelHeading-canvastestmap'); }); it('edits map by-reference embeddable', async () => { await dashboardPanelActions.editPanelByTitle('canvas test map'); - await PageObjects.maps.saveMap('canvas test map v2', true, false); + await maps.saveMap('canvas test map v2', true, false); await testSubjects.existOrFail('embeddablePanelHeading-canvastestmapv2'); - await PageObjects.canvas.deleteSelectedElement(); + await canvas.deleteSelectedElement(); }); }); }); diff --git a/x-pack/test/functional/apps/canvas/embeddables/saved_search.ts b/x-pack/test/functional/apps/canvas/embeddables/saved_search.ts index 59285140672c65..f89af8b6a15c1b 100644 --- a/x-pack/test/functional/apps/canvas/embeddables/saved_search.ts +++ b/x-pack/test/functional/apps/canvas/embeddables/saved_search.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['canvas', 'header', 'discover']); + const { canvas, discover } = getPageObjects(['canvas', 'discover']); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -21,10 +21,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); // open canvas home - await PageObjects.canvas.goToListingPage(); + await canvas.goToListingPage(); // create new workpad - await PageObjects.canvas.createNewWorkpad(); - await PageObjects.canvas.setWorkpadName('saved search tests'); + await canvas.createNewWorkpad(); + await canvas.setWorkpadName('saved search tests'); }); after(async () => { @@ -33,16 +33,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('by-reference', () => { it('adds existing saved search embeddable from the visualize library', async () => { - await PageObjects.canvas.clickAddFromLibrary(); + await canvas.clickAddFromLibrary(); await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); await testSubjects.existOrFail('embeddablePanelHeading-RenderingTest:savedsearch'); }); it('edits saved search by-reference embeddable', async () => { await dashboardPanelActions.editPanelByTitle('Rendering Test: saved search'); - await PageObjects.discover.saveSearch('Rendering Test: saved search v2'); - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('saved search tests'); + await discover.saveSearch('Rendering Test: saved search v2'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('saved search tests'); await testSubjects.existOrFail('embeddablePanelHeading-RenderingTest:savedsearchv2'); }); }); diff --git a/x-pack/test/functional/apps/canvas/embeddables/visualization.ts b/x-pack/test/functional/apps/canvas/embeddables/visualization.ts index 40328cbf3890d8..9cb0d55371f725 100644 --- a/x-pack/test/functional/apps/canvas/embeddables/visualization.ts +++ b/x-pack/test/functional/apps/canvas/embeddables/visualization.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); - const PageObjects = getPageObjects(['canvas', 'header', 'visualize']); + const { canvas, visualize } = getPageObjects(['canvas', 'visualize']); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -30,10 +30,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); // open canvas home - await PageObjects.canvas.goToListingPage(); + await canvas.goToListingPage(); // create new workpad - await PageObjects.canvas.createNewWorkpad(); - await PageObjects.canvas.setWorkpadName('visualization tests'); + await canvas.createNewWorkpad(); + await canvas.setWorkpadName('visualization tests'); }); after(async () => { @@ -42,62 +42,62 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('by-reference', () => { it('adds existing visualize embeddable from the visualize library', async () => { - await PageObjects.canvas.clickAddFromLibrary(); + await canvas.clickAddFromLibrary(); await dashboardAddPanel.addVisualization('Rendering-Test: metric'); await testSubjects.existOrFail('embeddablePanelHeading-RenderingTest:metric'); }); it('edits visualize by-reference embeddable', async () => { await dashboardPanelActions.editPanelByTitle('Rendering Test: metric'); - await PageObjects.visualize.saveVisualization('Rendering Test: metric v2', { + await visualize.saveVisualization('Rendering Test: metric v2', { saveAsNew: false, redirectToOrigin: true, }); await testSubjects.existOrFail('embeddablePanelHeading-RenderingTest:metricv2'); - await PageObjects.canvas.deleteSelectedElement(); + await canvas.deleteSelectedElement(); }); }); describe('by-value', () => { it('creates new tsvb embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); - await PageObjects.canvas.createNewVis('metrics'); - await PageObjects.visualize.saveVisualizationAndReturn(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await canvas.createNewVis('metrics'); + await visualize.saveVisualizationAndReturn(); await retry.try(async () => { - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount + 1); }); }); it('edits tsvb by-value embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); await retry.try(async () => { - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount); }); - await PageObjects.canvas.deleteSelectedElement(); + await canvas.deleteSelectedElement(); }); it('creates new vega embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); - await PageObjects.canvas.createNewVis('vega'); - await PageObjects.visualize.saveVisualizationAndReturn(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await canvas.createNewVis('vega'); + await visualize.saveVisualizationAndReturn(); await retry.try(async () => { - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount + 1); }); }); it('edits vega by-value embeddable', async () => { - const originalEmbeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const originalEmbeddableCount = await canvas.getEmbeddableCount(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await visualize.saveVisualizationAndReturn(); await retry.try(async () => { - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount); }); }); diff --git a/x-pack/test/functional/apps/canvas/expression.ts b/x-pack/test/functional/apps/canvas/expression.ts index 7e6c8720ffc437..9b3096231bba15 100644 --- a/x-pack/test/functional/apps/canvas/expression.ts +++ b/x-pack/test/functional/apps/canvas/expression.ts @@ -15,7 +15,7 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr const find = getService('find'); const kibanaServer = getService('kibanaServer'); const monacoEditor = getService('monacoEditor'); - const PageObjects = getPageObjects(['canvas']); + const { canvas } = getPageObjects(['canvas']); const retry = getService('retry'); const testSubjects = getService('testSubjects'); @@ -27,8 +27,8 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr await kibanaServer.importExport.load(archive); // load test workpad - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('Test Workpad'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('Test Workpad'); }); after(async () => { @@ -51,7 +51,7 @@ export default function canvasExpressionTest({ getService, getPageObjects }: Ftr await monacoEditor.waitCodeEditorReady(codeEditorSubj); // open the expression editor - await PageObjects.canvas.openExpressionEditor(); + await canvas.openExpressionEditor(); await monacoEditor.waitCodeEditorReady('canvasExpressionInput'); // select markdown content and clear it diff --git a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts index 10328cc9190ae0..afcee962374db3 100644 --- a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts +++ b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts @@ -9,8 +9,13 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const security = getService('security'); - const PageObjects = getPageObjects(['common', 'canvas', 'error', 'security', 'spaceSelector']); + const securityService = getService('security'); + const { common, canvas, error, security } = getPageObjects([ + 'common', + 'canvas', + 'error', + 'security', + ]); const appsMenu = getService('appsMenu'); const globalNav = getService('globalNav'); const testSubjects = getService('testSubjects'); @@ -26,7 +31,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global canvas all privileges', () => { before(async () => { - await security.role.create('global_canvas_all_role', { + await securityService.role.create('global_canvas_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -40,29 +45,25 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_canvas_all_user', { + await securityService.user.create('global_canvas_all_user', { password: 'global_canvas_all_user-password', roles: ['global_canvas_all_role'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login( - 'global_canvas_all_user', - 'global_canvas_all_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_canvas_all_user', 'global_canvas_all_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await Promise.all([ - security.role.delete('global_canvas_all_role'), - security.user.delete('global_canvas_all_user'), + securityService.role.delete('global_canvas_all_role'), + securityService.user.delete('global_canvas_all_user'), ]); }); @@ -72,11 +73,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new workpad" button`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.canvas.expectCreateWorkpadButtonEnabled(); + await canvas.expectCreateWorkpadButtonEnabled(); }); it(`doesn't show read-only badge`, async () => { @@ -84,15 +85,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`allows a workpad to be created`, async () => { - await PageObjects.common.navigateToActualUrl('canvas'); + await common.navigateToActualUrl('canvas'); await testSubjects.click('create-workpad-button'); - await PageObjects.canvas.expectAddElementButton(); + await canvas.expectAddElementButton(); }); it(`allows a workpad to be edited`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'canvas', '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31', { @@ -101,13 +102,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } ); - await PageObjects.canvas.expectAddElementButton(); + await canvas.expectAddElementButton(); }); }); describe('global canvas read-only privileges', () => { before(async () => { - await security.role.create('global_canvas_read_role', { + await securityService.role.create('global_canvas_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -121,24 +122,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_canvas_read_user', { + await securityService.user.create('global_canvas_read_user', { password: 'global_canvas_read_user-password', roles: ['global_canvas_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_canvas_read_user', - 'global_canvas_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_canvas_read_user', 'global_canvas_read_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_canvas_read_role'); - await security.user.delete('global_canvas_read_user'); + await securityService.role.delete('global_canvas_read_role'); + await securityService.user.delete('global_canvas_read_user'); }); it('shows canvas navlink', async () => { @@ -147,11 +144,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows disabled "Create new workpad" button`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.canvas.expectCreateWorkpadButtonDisabled(); + await canvas.expectCreateWorkpadButtonDisabled(); }); it(`shows read-only badge`, async () => { @@ -159,17 +156,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`does not allow a workpad to be created`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', 'workpad/create', { + await common.navigateToActualUrl('canvas', 'workpad/create', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); // expect redirection to canvas landing - await PageObjects.canvas.expectCreateWorkpadButtonDisabled(); + await canvas.expectCreateWorkpadButtonDisabled(); }); it(`does not allow a workpad to be edited`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'canvas', '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31', { @@ -178,13 +175,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } ); - await PageObjects.canvas.expectNoAddElementButton(); + await canvas.expectNoAddElementButton(); }); }); describe('no canvas privileges', () => { before(async () => { - await security.role.create('no_canvas_privileges_role', { + await securityService.role.create('no_canvas_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -198,40 +195,36 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_canvas_privileges_user', { + await securityService.user.create('no_canvas_privileges_user', { password: 'no_canvas_privileges_user-password', roles: ['no_canvas_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'no_canvas_privileges_user', - 'no_canvas_privileges_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('no_canvas_privileges_user', 'no_canvas_privileges_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('no_canvas_privileges_role'); - await security.user.delete('no_canvas_privileges_user'); + await securityService.role.delete('no_canvas_privileges_role'); + await securityService.user.delete('no_canvas_privileges_user'); }); it(`returns a 403`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); it(`create new workpad returns a 403`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', 'workpad/create', { + await common.navigateToActualUrl('canvas', 'workpad/create', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); }); }); diff --git a/x-pack/test/functional/apps/canvas/feature_controls/canvas_spaces.ts b/x-pack/test/functional/apps/canvas/feature_controls/canvas_spaces.ts index e030cdbf5f624f..faf114ad93eef1 100644 --- a/x-pack/test/functional/apps/canvas/feature_controls/canvas_spaces.ts +++ b/x-pack/test/functional/apps/canvas/feature_controls/canvas_spaces.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'canvas', 'security', 'spaceSelector']); + const { common, canvas } = getPageObjects(['common', 'canvas']); const appsMenu = getService('appsMenu'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); @@ -51,7 +51,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows canvas navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -59,26 +59,26 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new workpad" button`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.canvas.expectCreateWorkpadButtonEnabled(); + await canvas.expectCreateWorkpadButtonEnabled(); }); it(`allows a workpad to be created`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { ensureCurrentUrl: true, shouldLoginIfPrompted: false, }); await testSubjects.click('create-workpad-button'); - await PageObjects.canvas.expectAddElementButton(); + await canvas.expectAddElementButton(); }); it(`allows a workpad to be edited`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'canvas', '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31', { @@ -87,7 +87,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } ); - await PageObjects.canvas.expectAddElementButton(); + await canvas.expectAddElementButton(); }); }); @@ -112,7 +112,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`doesn't show canvas navlink`, async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -120,13 +120,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new workpad returns a 404`, async () => { - await PageObjects.common.navigateToActualUrl('canvas', '', { + await common.navigateToActualUrl('canvas', '', { basePath: '/s/custom_space', ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - const messageText = await PageObjects.common.getJsonBodyText(); + const messageText = await common.getJsonBodyText(); expect(messageText).to.eql( JSON.stringify({ statusCode: 404, @@ -137,7 +137,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`edit workpad returns a 404`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'canvas', 'workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31', { @@ -146,7 +146,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldLoginIfPrompted: false, } ); - const messageText = await PageObjects.common.getJsonBodyText(); + const messageText = await common.getJsonBodyText(); expect(messageText).to.eql( JSON.stringify({ statusCode: 404, diff --git a/x-pack/test/functional/apps/canvas/filters.ts b/x-pack/test/functional/apps/canvas/filters.ts index 50c09359843672..ac3b5673b1fe1d 100644 --- a/x-pack/test/functional/apps/canvas/filters.ts +++ b/x-pack/test/functional/apps/canvas/filters.ts @@ -12,7 +12,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function canvasFiltersTest({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); - const PageObjects = getPageObjects(['canvas']); + const { canvas } = getPageObjects(['canvas']); const find = getService('find'); const kibanaServer = getService('kibanaServer'); const archive = 'x-pack/test/functional/fixtures/kbn_archiver/canvas/filter'; @@ -24,8 +24,8 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro before(async () => { await kibanaServer.importExport.load(archive); // load test workpad - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('Filter Debug Workpad'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('Filter Debug Workpad'); }); after(async () => { @@ -41,7 +41,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro }); // Double check that the filter has the correct time range and default filter value - const startingMatchFilters = await PageObjects.canvas.getFiltersFromDebug('term'); + const startingMatchFilters = await canvas.getFiltersFromDebug('term'); const projectQuery = startingMatchFilters[0].query.term.project; expect(projectQuery !== null && typeof projectQuery === 'object').to.equal(true); expect(projectQuery?.value).to.equal('apm'); @@ -50,7 +50,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro await testSubjects.selectValue('canvasDropdownFilter__select', 'beats'); await retry.try(async () => { - const matchFilters = await PageObjects.canvas.getFiltersFromDebug('term'); + const matchFilters = await canvas.getFiltersFromDebug('term'); const newProjectQuery = matchFilters[0].query.term.project; expect(newProjectQuery !== null && typeof newProjectQuery === 'object').to.equal(true); expect(newProjectQuery?.value).to.equal('beats'); @@ -66,7 +66,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro expect(elements).to.have.length(3); }); - const startingTimeFilters = await PageObjects.canvas.getFiltersFromDebug('range'); + const startingTimeFilters = await canvas.getFiltersFromDebug('range'); const timestampQuery = startingTimeFilters[0].query.range['@timestamp']; expect(timestampQuery !== null && typeof timestampQuery === 'object').to.equal(true); expect(new Date(timestampQuery.gte).toDateString()).to.equal('Sun Oct 18 2020'); @@ -76,7 +76,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro await find.clickByCssSelector('.react-datepicker [aria-label="day-19"]', 20000); await retry.try(async () => { - const timeFilters = await PageObjects.canvas.getFiltersFromDebug('range'); + const timeFilters = await canvas.getFiltersFromDebug('range'); const newTimestampQuery = timeFilters[0].query.range['@timestamp']; expect(newTimestampQuery !== null && typeof newTimestampQuery === 'object').to.equal(true); expect(new Date(newTimestampQuery.gte).toDateString()).to.equal('Mon Oct 19 2020'); @@ -87,7 +87,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro await find.clickByCssSelector('.react-datepicker [aria-label="day-23"]', 20000); await retry.try(async () => { - const timeFilters = await PageObjects.canvas.getFiltersFromDebug('range'); + const timeFilters = await canvas.getFiltersFromDebug('range'); const newTimestampQuery = timeFilters[0].query.range['@timestamp']; expect(newTimestampQuery !== null && typeof newTimestampQuery === 'object').to.equal(true); expect(new Date(newTimestampQuery.gte).toDateString()).to.equal('Mon Oct 19 2020'); diff --git a/x-pack/test/functional/apps/canvas/migrations_smoke_test.ts b/x-pack/test/functional/apps/canvas/migrations_smoke_test.ts index 54f42e484734d2..70d66dcdbd8257 100644 --- a/x-pack/test/functional/apps/canvas/migrations_smoke_test.ts +++ b/x-pack/test/functional/apps/canvas/migrations_smoke_test.ts @@ -9,7 +9,7 @@ import path from 'path'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['settings', 'savedObjects']); + const { settings, savedObjects } = getPageObjects(['settings', 'savedObjects']); describe('migration smoke test', function () { it('imports an 8.2 workpad', async function () { @@ -22,14 +22,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { This smoke test is intended to import an 8.2 workpad to ensure that we don't hit a similar scenario in the future */ - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.waitTableIsLoaded(); - await PageObjects.savedObjects.importFile( - path.join(__dirname, 'exports', '8.2.workpad.ndjson') - ); - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.waitTableIsLoaded(); + await savedObjects.importFile(path.join(__dirname, 'exports', '8.2.workpad.ndjson')); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); it('migrates a workpad from 8.1', async function () { @@ -37,14 +35,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { This is a smoke test to make sure migrations don't fail. This workpad from 8.1 has both by-val and by-ref embeddables */ - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.waitTableIsLoaded(); - await PageObjects.savedObjects.importFile( - path.join(__dirname, 'exports', '8.1.embeddable_test.ndjson') - ); - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.waitTableIsLoaded(); + await savedObjects.importFile(path.join(__dirname, 'exports', '8.1.embeddable_test.ndjson')); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); }); } diff --git a/x-pack/test/functional/apps/canvas/reports.ts b/x-pack/test/functional/apps/canvas/reports.ts index 04d319af477cdb..147f9c2b4b91db 100644 --- a/x-pack/test/functional/apps/canvas/reports.ts +++ b/x-pack/test/functional/apps/canvas/reports.ts @@ -15,7 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const log = getService('log'); const security = getService('security'); - const PageObjects = getPageObjects(['reporting', 'canvas']); + const { reporting, canvas } = getPageObjects(['reporting', 'canvas']); const archive = 'x-pack/test/functional/fixtures/kbn_archiver/canvas/reports'; describe('Canvas PDF Report Generation', () => { @@ -52,14 +52,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Generating and then comparing reports can take longer than the default 60s timeout this.timeout(180000); - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('The Very Cool Workpad for PDF Tests'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('The Very Cool Workpad for PDF Tests'); - await PageObjects.reporting.openShareMenuItem('PDF Reports'); - await PageObjects.reporting.clickGenerateReportButton(); + await reporting.openShareMenuItem('PDF Reports'); + await reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); - const res = await PageObjects.reporting.getResponse(url ?? ''); + const url = await reporting.getReportURL(60000); + const res = await reporting.getResponse(url ?? ''); expect(res.status).to.equal(200); expect(res.get('content-type')).to.equal('application/pdf'); diff --git a/x-pack/test/functional/apps/canvas/saved_object_resolve.ts b/x-pack/test/functional/apps/canvas/saved_object_resolve.ts index c9b4074bc029ac..f77da5e8a8d860 100644 --- a/x-pack/test/functional/apps/canvas/saved_object_resolve.ts +++ b/x-pack/test/functional/apps/canvas/saved_object_resolve.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function canvasFiltersTest({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); - const PageObjects = getPageObjects(['canvas', 'common']); + const { common } = getPageObjects(['common']); const find = getService('find'); const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); @@ -82,7 +82,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro }); it('redirects an alias match', async () => { - await PageObjects.common.navigateToUrl( + await common.navigateToUrl( 'canvas', 'workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31-old-id/page/1', { @@ -115,7 +115,7 @@ export default function canvasFiltersTest({ getService, getPageObjects }: FtrPro }); it('handles a conflict match', async () => { - await PageObjects.common.navigateToUrl( + await common.navigateToUrl( 'canvas', 'workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31-conflict-old/page/1', { diff --git a/x-pack/test/functional/apps/canvas/smoke_test.js b/x-pack/test/functional/apps/canvas/smoke_test.js index f251e34e8566d5..2d457d7deb8a9a 100644 --- a/x-pack/test/functional/apps/canvas/smoke_test.js +++ b/x-pack/test/functional/apps/canvas/smoke_test.js @@ -11,7 +11,7 @@ export default function canvasSmokeTest({ getService, getPageObjects }) { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const retry = getService('retry'); - const PageObjects = getPageObjects(['canvas']); + const { canvas } = getPageObjects(['canvas']); const kibanaServer = getService('kibanaServer'); const config = getService('config'); const archive = { @@ -31,7 +31,7 @@ export default function canvasSmokeTest({ getService, getPageObjects }) { await kibanaServer.importExport.load(archive.local); } - await PageObjects.canvas.goToListingPage(); + await canvas.goToListingPage(); }); after(async () => { diff --git a/x-pack/test/functional/apps/dashboard/group1/created_by.ts b/x-pack/test/functional/apps/dashboard/group1/created_by.ts index ed3798e1b8809f..9d257afe3c953d 100644 --- a/x-pack/test/functional/apps/dashboard/group1/created_by.ts +++ b/x-pack/test/functional/apps/dashboard/group1/created_by.ts @@ -9,19 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'visualize', - 'lens', - 'timePicker', - 'security', - ]); + const { dashboard, security } = getPageObjects(['dashboard', 'security']); const esArchiver = getService('esArchiver'); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); - const security = getService('security'); + const securityService = getService('security'); const testSubjects = getService('testSubjects'); describe('created_by', function () { @@ -40,9 +33,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await security.role.create('global_dashboard_all_role', { + await securityService.role.create('global_dashboard_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -57,38 +50,38 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create(USERNAME_1, { + await securityService.user.create(USERNAME_1, { password: 'changeme', roles: ['global_dashboard_all_role'], full_name: 'global dashboard all user 1', }); - await security.user.create(USERNAME_2, { + await securityService.user.create(USERNAME_2, { password: 'changeme', roles: ['global_dashboard_all_role'], full_name: 'global dashboard all user 2', }); - await PageObjects.security.login(USERNAME_1, 'changeme', { + await security.login(USERNAME_1, 'changeme', { expectSpaceSelector: false, }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME, { + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard(DASHBOARD_NAME, { saveAsNew: true, waitDialogIsClosed: false, exitFromEditMode: false, }); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below - await PageObjects.security.forceLogout(); - await security.role.delete('global_dashboard_all_role'); - await security.user.delete(USERNAME_1); - await security.user.delete(USERNAME_2); + await security.forceLogout(); + await securityService.role.delete('global_dashboard_all_role'); + await securityService.user.delete(USERNAME_1); + await securityService.user.delete(USERNAME_2); await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.unload( @@ -120,20 +113,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it("doesn't override creator when editing a dashboard", async () => { - await PageObjects.security.forceLogout(); - await PageObjects.security.login(USERNAME_2, 'changeme', { + await security.forceLogout(); + await security.login(USERNAME_2, 'changeme', { expectSpaceSelector: false, }); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await testSubjects.existOrFail('tableHeaderCell_createdBy_1'); await testSubjects.existOrFail(`userAvatarTip-${USERNAME_1}`); - await PageObjects.dashboard.gotoDashboardEditMode(DASHBOARD_NAME); - await PageObjects.dashboard.addVisualizations(['A Pie']); - await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME, { + await dashboard.gotoDashboardEditMode(DASHBOARD_NAME); + await dashboard.addVisualizations(['A Pie']); + await dashboard.saveDashboard(DASHBOARD_NAME, { waitDialogIsClosed: false, exitFromEditMode: false, }); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await testSubjects.existOrFail('tableHeaderCell_createdBy_1'); await testSubjects.missingOrFail(`userAvatarTip-${USERNAME_2}`); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/favorite.ts b/x-pack/test/functional/apps/dashboard/group1/favorite.ts index 873d3365e6da25..3fdc206b1252e0 100644 --- a/x-pack/test/functional/apps/dashboard/group1/favorite.ts +++ b/x-pack/test/functional/apps/dashboard/group1/favorite.ts @@ -8,19 +8,12 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'visualize', - 'lens', - 'timePicker', - 'security', - ]); + const { dashboard, security } = getPageObjects(['dashboard', 'security']); const esArchiver = getService('esArchiver'); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); - const security = getService('security'); + const securityService = getService('security'); const spaces = getService('spaces'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); @@ -44,9 +37,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await security.role.create(ROLE, { + await securityService.role.create(ROLE, { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -60,17 +53,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create(USERNAME, { + await securityService.user.create(USERNAME, { password: 'changeme', roles: [ROLE], full_name: USERNAME, }); - await PageObjects.security.login(USERNAME, 'changeme', { + await security.login(USERNAME, 'changeme', { expectSpaceSelector: true, }); - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: { basePath: '/s/custom_space', ensureCurrentUrl: false, @@ -81,10 +74,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below - await PageObjects.security.forceLogout(); + await security.forceLogout(); await spaces.delete(customSpace); - await security.user.delete(USERNAME); - await security.role.delete(ROLE); + await securityService.user.delete(USERNAME); + await securityService.role.delete(ROLE); await kibanaServer.importExport.unload( 'x-pack/test/functional/fixtures/kbn_archiver/dashboard/feature_controls/custom_space', diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts index 4dddf0609a2695..9a210f3de345cb 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts @@ -10,16 +10,9 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const security = getService('security'); + const securityService = getService('security'); const config = getService('config'); - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'security', - 'spaceSelector', - 'share', - 'error', - ]); + const { dashboard, security, error } = getPageObjects(['dashboard', 'security', 'error']); const appsMenu = getService('appsMenu'); const panelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); @@ -46,13 +39,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await kbnServer.savedObjects.cleanStandardList(); await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); @@ -60,7 +53,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global dashboard all privileges, no embeddable application privileges', () => { before(async () => { - await security.role.create('global_dashboard_all_role', { + await securityService.role.create('global_dashboard_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -74,24 +67,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_dashboard_all_user', { + await securityService.user.create('global_dashboard_all_user', { password: 'global_dashboard_all_user-password', roles: ['global_dashboard_all_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_dashboard_all_user', - 'global_dashboard_all_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_dashboard_all_user', 'global_dashboard_all_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_dashboard_all_role'); - await security.user.delete('global_dashboard_all_user'); + await securityService.role.delete('global_dashboard_all_role'); + await securityService.user.delete('global_dashboard_all_user'); }); it('only shows the dashboard navlink', async () => { @@ -100,7 +89,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new Dashboard" button`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: navigationArgs, }); await testSubjects.existOrFail('dashboardLandingPage', { @@ -114,14 +103,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new dashboard shows addNew button`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ args: navigationArgs }); + await dashboard.gotoDashboardURL({ args: navigationArgs }); await testSubjects.existOrFail('emptyDashboardWidget', { timeout: config.get('timeouts.waitFor'), }); }); it(`can view existing Dashboard`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs, }); @@ -131,19 +120,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`does not allow a visualization to be edited`, async () => { - await PageObjects.dashboard.gotoDashboardEditMode('A Dashboard'); + await dashboard.gotoDashboardEditMode('A Dashboard'); await panelActions.expectMissingEditPanelAction(); }); it(`does not allow a map to be edited`, async () => { - await PageObjects.dashboard.gotoDashboardEditMode('dashboard with map'); + await dashboard.gotoDashboardEditMode('dashboard with map'); await panelActions.expectMissingEditPanelAction(); }); }); describe('global dashboard & embeddable all privileges', () => { before(async () => { - await security.role.create('global_dashboard_visualize_all_role', { + await securityService.role.create('global_dashboard_visualize_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -159,13 +148,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_dashboard_visualize_all_user', { + await securityService.user.create('global_dashboard_visualize_all_user', { password: 'global_dashboard_visualize_all_user-password', roles: ['global_dashboard_visualize_all_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_dashboard_visualize_all_user', 'global_dashboard_visualize_all_user-password', { @@ -175,19 +164,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await security.role.delete('global_dashboard_visualize_all_role'); - await security.user.delete('global_dashboard_visualize_all_user'); + await securityService.role.delete('global_dashboard_visualize_all_role'); + await securityService.user.delete('global_dashboard_visualize_all_user'); }); it(`allows a visualization to be edited`, async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardEditMode('A Dashboard'); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardEditMode('A Dashboard'); await panelActions.expectExistsEditPanelAction(); }); it(`allows a map to be edited`, async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardEditMode('dashboard with map'); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardEditMode('dashboard with map'); await panelActions.expectExistsEditPanelAction(); }); @@ -245,7 +234,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global dashboard read-only privileges', () => { before(async () => { - await security.role.create('global_dashboard_read_role', { + await securityService.role.create('global_dashboard_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -259,24 +248,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_dashboard_read_user', { + await securityService.user.create('global_dashboard_read_user', { password: 'global_dashboard_read_user-password', roles: ['global_dashboard_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_dashboard_read_user', - 'global_dashboard_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_dashboard_read_user', 'global_dashboard_read_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_dashboard_read_role'); - await security.user.delete('global_dashboard_read_user'); + await securityService.role.delete('global_dashboard_read_role'); + await securityService.user.delete('global_dashboard_read_user'); }); it('shows dashboard navlink', async () => { @@ -285,7 +270,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page doesn't show "Create new Dashboard" button`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: navigationArgs, }); await testSubjects.existOrFail('dashboardLandingPage', { @@ -295,21 +280,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`shows read-only badge`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: navigationArgs, }); await globalNav.badgeExistsOrFail('Read only'); }); it(`create new dashboard shows the read only warning`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ args: navigationArgs, }); await testSubjects.existOrFail('dashboardEmptyReadOnly', { timeout: 20000 }); }); it(`can view existing Dashboard`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs, }); @@ -350,7 +335,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global dashboard read-only with url_create privileges', () => { before(async () => { - await security.role.create('global_dashboard_read_url_create_role', { + await securityService.role.create('global_dashboard_read_url_create_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -364,13 +349,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_dashboard_read_url_create_user', { + await securityService.user.create('global_dashboard_read_url_create_user', { password: 'global_dashboard_read_url_create_user-password', roles: ['global_dashboard_read_url_create_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_dashboard_read_url_create_user', 'global_dashboard_read_url_create_user-password', { @@ -380,8 +365,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await security.role.delete('global_dashboard_read_url_create_role'); - await security.user.delete('global_dashboard_read_url_create_user'); + await securityService.role.delete('global_dashboard_read_url_create_role'); + await securityService.user.delete('global_dashboard_read_url_create_user'); }); it('shows dashboard navlink', async () => { @@ -390,7 +375,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page doesn't show "Create new Dashboard" button`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: navigationArgs, }); await testSubjects.existOrFail('dashboardLandingPage', { timeout: 10000 }); @@ -402,14 +387,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new dashboard shows the read only warning`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ args: navigationArgs, }); await testSubjects.existOrFail('dashboardEmptyReadOnly', { timeout: 20000 }); }); it(`can view existing Dashboard`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs }); + await dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs }); await testSubjects.existOrFail('embeddablePanelHeading-APie', { timeout: 10000 }); }); @@ -441,7 +426,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('no dashboard privileges', () => { before(async () => { - await security.role.create('no_dashboard_privileges_role', { + await securityService.role.create('no_dashboard_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -455,13 +440,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_dashboard_privileges_user', { + await securityService.user.create('no_dashboard_privileges_user', { password: 'no_dashboard_privileges_user-password', roles: ['no_dashboard_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'no_dashboard_privileges_user', 'no_dashboard_privileges_user-password', { @@ -471,8 +456,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await security.role.delete('no_dashboard_privileges_role'); - await security.user.delete('no_dashboard_privileges_user'); + await securityService.role.delete('no_dashboard_privileges_role'); + await securityService.user.delete('no_dashboard_privileges_user'); }); it(`doesn't show dashboard navLink`, async () => { @@ -481,25 +466,25 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows 403`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: navigationArgs, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); it(`create new dashboard shows 403`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ args: navigationArgs }); - await PageObjects.error.expectForbidden(); + await dashboard.gotoDashboardURL({ args: navigationArgs }); + await error.expectForbidden(); }); it(`edit dashboard for object which doesn't exist shows 403`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ id: 'i-dont-exist', args: navigationArgs }); - await PageObjects.error.expectForbidden(); + await dashboard.gotoDashboardURL({ id: 'i-dont-exist', args: navigationArgs }); + await error.expectForbidden(); }); it(`edit dashboard for object which exists shows 403`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs }); - await PageObjects.error.expectForbidden(); + await dashboard.gotoDashboardURL({ id: 'i-exist', args: navigationArgs }); + await error.expectForbidden(); }); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_spaces.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_spaces.ts index 2f04d12bdac6d3..6801d7ad4e4675 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_spaces.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_spaces.ts @@ -12,7 +12,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const config = getService('config'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'dashboard', 'security', 'spaceSelector', 'error']); + const { common, dashboard, error } = getPageObjects(['common', 'dashboard', 'error']); const appsMenu = getService('appsMenu'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); @@ -41,7 +41,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => await spacesService.delete(customSpace)); it('shows dashboard navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -49,7 +49,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new Dashboard" button`, async () => { - await PageObjects.dashboard.gotoDashboardListingURL({ + await dashboard.gotoDashboardListingURL({ args: { basePath: '/s/custom_space', ensureCurrentUrl: false, @@ -63,7 +63,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new dashboard shows addNew button`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ args: { basePath: '/s/custom_space', ensureCurrentUrl: false, @@ -76,7 +76,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can view existing Dashboard`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ id: '8fba09d8-df3f-5aa1-83cc-65f7fbcbc0d9', args: { basePath: '/s/custom_space', @@ -108,7 +108,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => await spacesService.delete('custom_space')); it(`doesn't show dashboard navlink`, async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -116,18 +116,18 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new dashboard shows 404`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ args: { basePath: '/s/custom_space', ensureCurrentUrl: false, shouldLoginIfPrompted: false, }, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); it(`edit dashboard for object which doesn't exist shows 404`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ id: 'i-dont-exist', args: { basePath: '/s/custom_space', @@ -135,11 +135,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldLoginIfPrompted: false, }, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); it(`edit dashboard for object which exists shows 404`, async () => { - await PageObjects.dashboard.gotoDashboardURL({ + await dashboard.gotoDashboardURL({ id: 'i-exist', args: { basePath: '/s/custom_space', @@ -147,7 +147,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldLoginIfPrompted: false, }, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts index 07dcf1ac031827..8922bca6d7fdf8 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts @@ -9,24 +9,24 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'timeToVisualize', - 'timePicker', - 'dashboard', - 'visEditor', - 'visualize', - 'security', - 'common', - 'header', - 'lens', - ]); + const { timeToVisualize, timePicker, dashboard, visEditor, visualize, security, header, lens } = + getPageObjects([ + 'timeToVisualize', + 'timePicker', + 'dashboard', + 'visEditor', + 'visualize', + 'security', + 'header', + 'lens', + ]); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardExpect = getService('dashboardExpect'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); - const security = getService('security'); + const securityService = getService('security'); const find = getService('find'); const kbnServer = getService('kibanaServer'); @@ -42,9 +42,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await security.role.create('dashboard_write_vis_read', { + await securityService.role.create('dashboard_write_vis_read', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -59,13 +59,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('dashboard_write_vis_read_user', { + await securityService.user.create('dashboard_write_vis_read_user', { password: 'dashboard_write_vis_read_user-password', roles: ['dashboard_write_vis_read'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'dashboard_write_vis_read_user', 'dashboard_write_vis_read_user-password', { @@ -77,10 +77,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await security.role.delete('dashboard_write_vis_read'); - await security.user.delete('dashboard_write_vis_read_user'); + await securityService.role.delete('dashboard_write_vis_read'); + await securityService.user.delete('dashboard_write_vis_read_user'); await kbnServer.savedObjects.cleanStandardList(); await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); @@ -88,79 +88,73 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('lens by value works without library save permissions', () => { before(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); it('can add a lens panel by value', async () => { - await PageObjects.lens.createAndAddLensFromDashboard({}); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await lens.createAndAddLensFromDashboard({}); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(1); }); it('edits to a by value lens panel are properly applied', async () => { - await PageObjects.dashboard.waitForRenderComplete(); - await dashboardPanelActions.openContextMenu(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.saveAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); + await lens.switchToVisualization('pie'); + await lens.saveAndReturn(); + await dashboard.waitForRenderComplete(); const partitionVisExists = await testSubjects.exists('partitionVisChart'); expect(partitionVisExists).to.be(true); }); it('disables save to library button without visualize save permissions', async () => { - await PageObjects.dashboard.waitForRenderComplete(); - await dashboardPanelActions.openContextMenu(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.clickEdit(); const saveButton = await testSubjects.find('lnsApp_saveButton'); expect(await saveButton.getAttribute('disabled')).to.equal('true'); - await PageObjects.lens.saveAndReturn(); - await PageObjects.timeToVisualize.resetNewDashboard(); + await lens.saveAndReturn(); + await timeToVisualize.resetNewDashboard(); }); it('should allow new lens to be added by value, but not by reference', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('lnsApp_saveButton'); const libraryCheckbox = await find.byCssSelector('#add-to-library-checkbox'); expect(await libraryCheckbox.getAttribute('disabled')).to.equal('true'); - await PageObjects.timeToVisualize.saveFromModal('New Lens from Modal', { + await timeToVisualize.saveFromModal('New Lens from Modal', { addToDashboard: 'new', saveAsNew: true, saveToLibrary: false, }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'New Lens from Modal' - ); - expect(isLinked).to.be(false); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); }); @@ -169,69 +163,67 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const modifiedMarkdownText = 'Modified markdown text'; before(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); it('can add a markdown panel by value', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await dashboard.waitForRenderComplete(); await dashboardAddPanel.clickMarkdownQuickButton(); - await PageObjects.visEditor.setMarkdownTxt(originalMarkdownText); - await PageObjects.visEditor.clickGo(); + await visEditor.setMarkdownTxt(originalMarkdownText); + await visEditor.clickGo(); - await PageObjects.visualize.saveVisualizationAndReturn(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await visualize.saveVisualizationAndReturn(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(1); }); it('edits to a by value visualize panel are properly applied', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visEditor.setMarkdownTxt(modifiedMarkdownText); - await PageObjects.visEditor.clickGo(); - await PageObjects.visualize.saveVisualizationAndReturn(); + await header.waitUntilLoadingHasFinished(); + await visEditor.setMarkdownTxt(modifiedMarkdownText); + await visEditor.clickGo(); + await visualize.saveVisualizationAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); const markdownText = await testSubjects.find('markdownBody'); expect(await markdownText.getVisibleText()).to.eql(modifiedMarkdownText); - const newPanelCount = PageObjects.dashboard.getPanelCount(); + const newPanelCount = dashboard.getPanelCount(); expect(newPanelCount).to.eql(1); }); it('disables save to library button without visualize save permissions', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('visualizeSaveButton'); - await PageObjects.visualize.saveVisualizationAndReturn(); - await PageObjects.timeToVisualize.resetNewDashboard(); + await visualize.saveVisualizationAndReturn(); + await timeToVisualize.resetNewDashboard(); }); it('should allow new visualization to be added by value, but not by reference', async function () { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickMetric(); - await PageObjects.visualize.clickNewSearch(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickMetric(); + await visualize.clickNewSearch(); + await timePicker.setDefaultAbsoluteRange(); await testSubjects.click('visualizeSaveButton'); - await PageObjects.visualize.ensureSavePanelOpen(); + await visualize.ensureSavePanelOpen(); const libraryCheckbox = await find.byCssSelector('#add-to-library-checkbox'); expect(await libraryCheckbox.getAttribute('disabled')).to.equal('true'); - await PageObjects.timeToVisualize.saveFromModal('My New Vis 1', { + await timeToVisualize.saveFromModal('My New Vis 1', { addToDashboard: 'new', }); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardExpect.metricValuesExist(['14,005']); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts index cb5713e4d03ee9..5265e52bc5e911 100644 --- a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts +++ b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'spaceSelector', 'header']); + const { common, dashboard, spaceSelector, header } = getPageObjects([ + 'common', + 'dashboard', + 'spaceSelector', + 'header', + ]); const globalNav = getService('globalNav'); const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); @@ -34,46 +39,46 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('goes back to last opened url', async function () { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); - await PageObjects.common.navigateToApp('home'); - await PageObjects.dashboard.navigateToAppFromAppsMenu(); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('A Dashboard'); + await common.navigateToApp('home'); + await dashboard.navigateToAppFromAppsMenu(); + await dashboard.loadSavedDashboard('A Dashboard'); + await header.waitUntilLoadingHasFinished(); const activeTitle = await globalNav.getLastBreadcrumb(); expect(activeTitle).to.be('A Dashboard'); }); it('remembers url after switching spaces', async function () { // default space - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('A Dashboard'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space - await PageObjects.dashboard.navigateToAppFromAppsMenu(); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard in another space'); + await dashboard.navigateToAppFromAppsMenu(); + await dashboard.loadSavedDashboard('A Dashboard in another space'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('default'); - await PageObjects.spaceSelector.expectHomePage('default'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('default'); + await spaceSelector.expectHomePage('default'); // default space - await PageObjects.dashboard.navigateToAppFromAppsMenu(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToAppFromAppsMenu(); + await dashboard.waitForRenderComplete(); const activeTitleDefaultSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleDefaultSpace).to.be('A Dashboard'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space - await PageObjects.dashboard.navigateToAppFromAppsMenu(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToAppFromAppsMenu(); + await dashboard.waitForRenderComplete(); const activeTitleOtherSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleOtherSpace).to.be('A Dashboard in another space'); }); diff --git a/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts b/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts index 66b31842df00ae..caca6dca59c3fd 100644 --- a/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts +++ b/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const renderable = getService('renderable'); const dashboardExpect = getService('dashboardExpect'); const appMenu = getService('appsMenu'); - const PageObjects = getPageObjects([ + const { common, header, home, discover, dashboard, timePicker } = getPageObjects([ 'common', 'header', 'home', @@ -32,14 +32,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('sample data dashboard', function describeIndexTests() { before(async () => { await esArchiver.emptyKibanaIndex(); - await PageObjects.common.sleep(5000); - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.sleep(5000); + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.addSampleDataSet('flights'); + await header.waitUntilLoadingHasFinished(); + await home.addSampleDataSet('flights'); await retry.tryForTime(10000, async () => { - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); + const isInstalled = await home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(true); }); @@ -107,32 +107,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // refresh page to make sure ui settings update is picked up await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await appMenu.clickLink('Discover'); - await PageObjects.discover.selectIndexPattern('Kibana Sample Data Flights'); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); + await discover.selectIndexPattern('Kibana Sample Data Flights'); + await timePicker.setCommonlyUsedTime('sample_data range'); await retry.try(async function () { - const hitCount = parseInt(await PageObjects.discover.getHitCount(), 10); + const hitCount = parseInt(await discover.getHitCount(), 10); expect(hitCount).to.be.greaterThan(0); }); }); after(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.removeSampleDataSet('flights'); - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); + await header.waitUntilLoadingHasFinished(); + await home.removeSampleDataSet('flights'); + const isInstalled = await home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(false); }); it('should launch sample flights data set dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); + await header.waitUntilLoadingHasFinished(); + await timePicker.setCommonlyUsedTime('sample_data range'); + await header.waitUntilLoadingHasFinished(); // check at least one visualization await renderable.waitForRender(); @@ -141,14 +141,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await appMenu.clickLink('Discover'); await retry.try(async function () { - const hitCount = parseInt(await PageObjects.discover.getHitCount(), 10); + const hitCount = parseInt(await discover.getHitCount(), 10); expect(hitCount).to.be.greaterThan(0); }); await appMenu.clickLink('Dashboard', { category: 'recentlyViewed', closeCollapsibleNav: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); log.debug('Checking charts rendered'); await elasticChart.waitForRenderComplete('xyVisChart'); @@ -157,14 +157,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('toggle from Discover to Dashboard attempt 1', async () => { await appMenu.clickLink('Discover'); await retry.try(async function () { - const hitCount = parseInt(await PageObjects.discover.getHitCount(), 10); + const hitCount = parseInt(await discover.getHitCount(), 10); expect(hitCount).to.be.greaterThan(0); }); await appMenu.clickLink('Dashboard', { category: 'recentlyViewed', closeCollapsibleNav: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); log.debug('Checking charts rendered'); await elasticChart.waitForRenderComplete('xyVisChart'); @@ -173,14 +173,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('toggle from Discover to Dashboard attempt 2', async () => { await appMenu.clickLink('Discover'); await retry.try(async function () { - const hitCount = parseInt(await PageObjects.discover.getHitCount(), 10); + const hitCount = parseInt(await discover.getHitCount(), 10); expect(hitCount).to.be.greaterThan(0); }); await appMenu.clickLink('Dashboard', { category: 'recentlyViewed', closeCollapsibleNav: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); log.debug('Checking charts rendered'); await elasticChart.waitForRenderComplete('xyVisChart'); diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts index 19d44ba6a60350..3e648f5000945a 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'visualize', 'lens', 'timePicker']); + const { dashboard, visualize, lens, timePicker } = getPageObjects([ + 'dashboard', + 'visualize', + 'lens', + 'timePicker', + ]); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); @@ -22,9 +27,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); after(async () => { @@ -35,65 +40,65 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('can add a lens panel by value', async () => { - await PageObjects.lens.createAndAddLensFromDashboard({}); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await lens.createAndAddLensFromDashboard({}); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(1); }); it('edits to a by value lens panel are properly applied', async () => { - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.saveAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); + await lens.switchToVisualization('pie'); + await lens.saveAndReturn(); + await dashboard.waitForRenderComplete(); const partitionVisExists = await testSubjects.exists('partitionVisChart'); expect(partitionVisExists).to.be(true); }); it('editing and saving a lens by value panel retains number of panels', async () => { - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); - await PageObjects.dashboard.waitForRenderComplete(); + const originalPanelCount = await dashboard.getPanelCount(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.switchToVisualization('treemap'); - await PageObjects.lens.saveAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await lens.switchToVisualization('treemap'); + await lens.saveAndReturn(); + await dashboard.waitForRenderComplete(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount); }); it('updates panel on dashboard when a by value panel is saved to library', async () => { const newTitle = 'look out library, here I come!'; - const originalPanelCount = await PageObjects.dashboard.getPanelCount(); - await PageObjects.dashboard.waitForRenderComplete(); + const originalPanelCount = await dashboard.getPanelCount(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.save(newTitle, false, true); - await PageObjects.dashboard.waitForRenderComplete(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + await lens.save(newTitle, false, true); + await dashboard.waitForRenderComplete(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(originalPanelCount); - const titles = await PageObjects.dashboard.getPanelTitles(); + const titles = await dashboard.getPanelTitles(); expect(titles.indexOf(newTitle)).to.not.be(-1); }); it('is no longer linked to a dashboard after visiting the visualize listing page', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickLensWidget(); - await PageObjects.timePicker.ensureHiddenNoDataPopover(); - await PageObjects.lens.configureDimension({ + await visualize.navigateToNewVisualization(); + await visualize.clickLensWidget(); + await timePicker.ensureHiddenNoDataPopover(); + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.notLinkedToOriginatingApp(); + await lens.waitForVisualization('xyVisChart'); + await lens.notLinkedToOriginatingApp(); // return to origin should not be present in save modal await testSubjects.click('lnsApp_saveButton'); diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts index 6cfdc7356a4b5d..a55c3c3c0433c6 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts @@ -9,12 +9,10 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'common', + const { dashboard, maps, timeToVisualize } = getPageObjects([ 'dashboard', 'maps', 'timeToVisualize', - 'visualize', ]); const log = getService('log'); @@ -28,51 +26,51 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { async function createAndAddMapByValue() { log.debug(`createAndAddMapByValue`); - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); + const inViewMode = await dashboard.getIsInViewMode(); if (inViewMode) { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); } await dashboardAddPanel.clickEditorMenuButton(); await testSubjects.setValue('dashboardPanelSelectionFlyout__searchInput', 'maps'); await dashboardAddPanel.clickVisType('maps'); - await PageObjects.maps.clickSaveAndReturnButton(); + await maps.clickSaveAndReturnButton(); } async function editByValueMap(saveToLibrary = false, saveToDashboard = true) { - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); + const inViewMode = await dashboard.getIsInViewMode(); if (inViewMode) { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); } await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.maps.clickAddLayer(); - await PageObjects.maps.selectLayerGroupCard(); + await maps.clickAddLayer(); + await maps.selectLayerGroupCard(); await testSubjects.click('importFileButton'); if (saveToLibrary) { await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.ensureSaveModalIsOpen; + await timeToVisualize.ensureSaveModalIsOpen; - await PageObjects.timeToVisualize.saveFromModal(`my map ${mapCounter++}`, { + await timeToVisualize.saveFromModal(`my map ${mapCounter++}`, { redirectToOrigin: saveToDashboard, }); if (!saveToDashboard) { - await PageObjects.dashboard.navigateToAppFromAppsMenu(); + await dashboard.navigateToAppFromAppsMenu(); } } else { - await PageObjects.maps.clickSaveAndReturnButton(); + await maps.clickSaveAndReturnButton(); } - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); } async function createNewDashboard() { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); } describe('dashboard maps by value', function () { @@ -95,7 +93,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('can add a map by value', async () => { await createNewDashboard(); await createAndAddMapByValue(); - const newPanelCount = await PageObjects.dashboard.getPanelCount(); + const newPanelCount = await dashboard.getPanelCount(); expect(newPanelCount).to.eql(1); }); }); @@ -108,12 +106,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('retains the same number of panels', async () => { - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.equal(1); }); it('updates the panel on return', async () => { - const hasLayer = await PageObjects.maps.doesLayerExist('Layer group'); + const hasLayer = await maps.doesLayerExist('Layer group'); expect(hasLayer).to.be(true); }); }); @@ -127,14 +125,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('updates the existing panel when adding to dashboard', async () => { await editByValueMap(true); - const hasLayer = await PageObjects.maps.doesLayerExist('Layer group'); + const hasLayer = await maps.doesLayerExist('Layer group'); expect(hasLayer).to.be(true); }); it('does not update the panel when only saving to library', async () => { await editByValueMap(true, false); - const hasLayer = await PageObjects.maps.doesLayerExist('Layer group'); + const hasLayer = await maps.doesLayerExist('Layer group'); expect(hasLayer).to.be(false); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts index e82c73dddc294b..04d7794a00751d 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts @@ -15,8 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']); + const { common, dashboard, header } = getPageObjects(['common', 'dashboard', 'header']); describe('saved searches by value', () => { before(async () => { @@ -29,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ + await common.setTime({ from: 'Sep 22, 2015 @ 00:00:00.000', to: 'Sep 23, 2015 @ 00:00:00.000', }); @@ -37,73 +36,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); const addSearchEmbeddableToDashboard = async () => { await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const rows = await dataGrid.getDocTableRows(); expect(rows.length).to.be.above(0); }; it('should allow cloning a by ref saved search embeddable to a by value embeddable', async () => { await addSearchEmbeddableToDashboard(); - let panels = await testSubjects.findAll(`embeddablePanel`); - expect(panels.length).to.be(1); - expect( - await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panels[0] - ) - ).to.be(true); - await dashboardPanelActions.clonePanelByTitle('RenderingTest:savedsearch'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); - panels = await testSubjects.findAll('embeddablePanel'); - expect(panels.length).to.be(2); - expect( - await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panels[0] - ) - ).to.be(true); - expect( - await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panels[1] - ) - ).to.be(false); + let titles = await dashboard.getPanelTitles(); + expect(titles.length).to.be(1); + await dashboardPanelActions.expectLinkedToLibrary(titles[0]); + await dashboardPanelActions.clonePanel(titles[0]); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + titles = await dashboard.getPanelTitles(); + expect(titles.length).to.be(2); + await dashboardPanelActions.expectLinkedToLibrary(titles[0]); + await dashboardPanelActions.expectNotLinkedToLibrary(titles[1]); }); it('should allow unlinking a by ref saved search embeddable from library', async () => { await addSearchEmbeddableToDashboard(); - let panels = await testSubjects.findAll(`embeddablePanel`); - expect(panels.length).to.be(1); - expect( - await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panels[0] - ) - ).to.be(true); - await dashboardPanelActions.unlinkFromLibrary(panels[0]); - await testSubjects.existOrFail('unlinkPanelSuccess'); - panels = await testSubjects.findAll('embeddablePanel'); - expect(panels.length).to.be(1); - expect( - await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panels[0] - ) - ).to.be(false); + let titles = await dashboard.getPanelTitles(); + expect(titles.length).to.be(1); + await dashboardPanelActions.expectLinkedToLibrary(titles[0]); + await dashboardPanelActions.unlinkFromLibrary(titles[0]); + titles = await dashboard.getPanelTitles(); + expect(titles.length).to.be(1); + await dashboardPanelActions.expectNotLinkedToLibrary(titles[0]); }); }); } diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts index 69f4f0e8f4915d..81fade0255cf7f 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts @@ -18,8 +18,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const dashboardPanelActions = getService('dashboardPanelActions'); + const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); - const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects', 'dashboard']); + const { settings, savedObjects, dashboard } = getPageObjects([ + 'settings', + 'savedObjects', + 'dashboard', + ]); describe('Lens - Export import saved objects between versions', () => { before(async () => { @@ -27,9 +32,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/es_archives/getting_started/shakespeare' ); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.importFile( + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.importFile( path.join(__dirname, 'exports', 'lens_dashboard_migration_test_7_12_1.ndjson') ); }); @@ -41,28 +46,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to import dashboard with various Lens panels from 7.12.1', async () => { // this will catch cases where there is an error in the migrations. - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); it('should render all panels on the dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('[7.12.1] Lens By Value Test Dashboard'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('[7.12.1] Lens By Value Test Dashboard'); // dashboard should load properly - await PageObjects.dashboard.expectOnDashboard('[7.12.1] Lens By Value Test Dashboard'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard('[7.12.1] Lens By Value Test Dashboard'); + await dashboard.waitForRenderComplete(); // There should be 0 error embeddables on the dashboard - const errorEmbeddables = await testSubjects.findAll('embeddableStackError'); + const errorEmbeddables = await testSubjects.findAll('embeddableStackError', 500); expect(errorEmbeddables.length).to.be(0); }); it('should show the edit action for all panels', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); // All panels should be editable. This will catch cases where an error does not create an error embeddable. - const panelTitles = await PageObjects.dashboard.getPanelTitles(); + const panelTitles = await dashboard.getPanelTitles(); for (const title of panelTitles) { await dashboardPanelActions.expectExistsEditPanelAction(title, true); } @@ -70,10 +75,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should retain all panel drilldowns from 7.12.1', async () => { // Both panels configured with drilldowns in 7.12.1 should still have drilldowns. - const totalPanels = await PageObjects.dashboard.getPanelCount(); + const totalPanels = await dashboard.getPanelCount(); let panelsWithDrilldowns = 0; for (let panelIndex = 0; panelIndex < totalPanels; panelIndex++) { - if ((await PageObjects.dashboard.getPanelDrilldownCount(panelIndex)) === 1) { + if ((await dashboardDrilldownPanelActions.getPanelDrilldownCount(panelIndex)) === 1) { panelsWithDrilldowns++; } } diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts index 49996231ecb70d..4fc81d8c00bf0b 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts @@ -14,34 +14,39 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const dashboardPanelActions = getService('dashboardPanelActions'); + const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); - const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects', 'dashboard']); + const { settings, savedObjects, dashboard } = getPageObjects([ + 'settings', + 'savedObjects', + 'dashboard', + ]); describe('TSVB - Export import saved objects between versions', () => { describe('From 7.12.1', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.importFile( + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.importFile( path.join(__dirname, 'exports', 'tsvb_dashboard_migration_test_7_12_1.ndjson') ); }); it('should be able to import dashboard with TSVB panels from 7.12.1', async () => { // this will catch cases where there is an error in the migrations. - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); it('should render all panels on the dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('TSVB Index Pattern Smoke Test'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('TSVB Index Pattern Smoke Test'); // dashboard should load properly - await PageObjects.dashboard.expectOnDashboard('TSVB Index Pattern Smoke Test'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard('TSVB Index Pattern Smoke Test'); + await dashboard.waitForRenderComplete(); // There should be 0 error embeddables on the dashboard const errorEmbeddables = await testSubjects.findAll('embeddableStackError'); @@ -49,10 +54,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the edit action for all panels', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); // All panels should be editable. This will catch cases where an error does not create an error embeddable. - const panelTitles = await PageObjects.dashboard.getPanelTitles(); + const panelTitles = await dashboard.getPanelTitles(); for (const title of panelTitles) { await dashboardPanelActions.expectExistsEditPanelAction(title); } @@ -60,18 +65,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should retain all panel drilldowns from 7.12.1', async () => { // Both panels configured with drilldowns in 7.12.1 should still have drilldowns. - const totalPanels = await PageObjects.dashboard.getPanelCount(); + const totalPanels = await dashboard.getPanelCount(); let panelsWithDrilldowns = 0; let drilldownCount = 0; for (let panelIndex = 0; panelIndex < totalPanels; panelIndex++) { - const panelDrilldownCount = await PageObjects.dashboard.getPanelDrilldownCount( + const panelDrilldownCount = await dashboardDrilldownPanelActions.getPanelDrilldownCount( panelIndex ); if (panelDrilldownCount >= 1) { panelsWithDrilldowns++; } - drilldownCount += await PageObjects.dashboard.getPanelDrilldownCount(panelIndex); + drilldownCount += await dashboardDrilldownPanelActions.getPanelDrilldownCount(panelIndex); } expect(panelsWithDrilldowns).to.be(2); expect(drilldownCount).to.be(3); @@ -87,26 +92,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.importFile( + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.importFile( path.join(__dirname, 'exports', 'tsvb_dashboard_migration_test_7_13_3.ndjson') ); }); it('should be able to import dashboard with TSVB panels from 7.13.3', async () => { // this will catch cases where there is an error in the migrations. - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); it('should render all panels on the dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('TSVB 7.13.3'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('TSVB 7.13.3'); // dashboard should load properly - await PageObjects.dashboard.expectOnDashboard('TSVB 7.13.3'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard('TSVB 7.13.3'); + await dashboard.waitForRenderComplete(); // There should be 0 error embeddables on the dashboard const errorEmbeddables = await testSubjects.findAll('embeddableStackError'); @@ -114,10 +119,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the edit action for all panels', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); // All panels should be editable. This will catch cases where an error does not create an error embeddable. - const panelTitles = await PageObjects.dashboard.getPanelTitles(); + const panelTitles = await dashboard.getPanelTitles(); for (const title of panelTitles) { await dashboardPanelActions.expectExistsEditPanelAction(title); } diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts index 7ba93ff5c22980..b436887b8d8d17 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts @@ -18,8 +18,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const dashboardPanelActions = getService('dashboardPanelActions'); + const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); - const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects', 'dashboard']); + const { settings, savedObjects, dashboard } = getPageObjects([ + 'settings', + 'savedObjects', + 'dashboard', + ]); describe('Visualize - Export import saved objects between versions', () => { before(async () => { @@ -27,9 +32,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/es_archives/getting_started/shakespeare' ); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.savedObjects.importFile( + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); + await savedObjects.importFile( path.join(__dirname, 'exports', 'visualize_dashboard_migration_test_7_12_1.ndjson') ); }); @@ -41,17 +46,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should be able to import dashboard with various Visualize panels from 7.12.1', async () => { // this will catch cases where there is an error in the migrations. - await PageObjects.savedObjects.checkImportSucceeded(); - await PageObjects.savedObjects.clickImportDone(); + await savedObjects.checkImportSucceeded(); + await savedObjects.clickImportDone(); }); it('should render all panels on the dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('[7.12.1] Visualize Test Dashboard'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('[7.12.1] Visualize Test Dashboard'); // dashboard should load properly - await PageObjects.dashboard.expectOnDashboard('[7.12.1] Visualize Test Dashboard'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.expectOnDashboard('[7.12.1] Visualize Test Dashboard'); + await dashboard.waitForRenderComplete(); // There should be 0 error embeddables on the dashboard const errorEmbeddables = await testSubjects.findAll('embeddableStackError'); @@ -59,10 +64,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the edit action for all panels', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); // All panels should be editable. This will catch cases where an error does not create an error embeddable. - const panelTitles = await PageObjects.dashboard.getPanelTitles(); + const panelTitles = await dashboard.getPanelTitles(); for (const title of panelTitles) { await dashboardPanelActions.expectExistsEditPanelAction(title); } @@ -70,10 +75,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should retain all panel drilldowns from 7.12.1', async () => { // Both panels configured with drilldowns in 7.12.1 should still have drilldowns. - const totalPanels = await PageObjects.dashboard.getPanelCount(); + const totalPanels = await dashboard.getPanelCount(); let panelsWithDrilldowns = 0; for (let panelIndex = 0; panelIndex < totalPanels; panelIndex++) { - if ((await PageObjects.dashboard.getPanelDrilldownCount(panelIndex)) === 1) { + if ((await dashboardDrilldownPanelActions.getPanelDrilldownCount(panelIndex)) === 1) { panelsWithDrilldowns++; } } diff --git a/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts b/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts index 06e54854204657..d5070b931b18fa 100644 --- a/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts +++ b/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts @@ -15,14 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardBadgeActions = getService('dashboardBadgeActions'); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'visualize', - 'visEditor', - 'timePicker', - 'lens', - ]); + const { dashboard, lens } = getPageObjects(['dashboard', 'lens']); const DASHBOARD_NAME = 'Custom panel time range test'; @@ -33,31 +26,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard(DASHBOARD_NAME); }); describe('by value', () => { it('can add a custom time range to a panel', async () => { - await PageObjects.lens.createAndAddLensFromDashboard({}); + await lens.createAndAddLensFromDashboard({}); await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.enableCustomTimeRange(); await dashboardCustomizePanel.openDatePickerQuickMenu(); await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); expect(await testSubjects.exists('emptyPlaceholder')).to.be(true); - await PageObjects.dashboard.clickQuickSave(); + await dashboard.clickQuickSave(); }); it('can remove a custom time range from a panel', async () => { await dashboardBadgeActions.clickTimeRangeBadgeAction(); await dashboardCustomizePanel.disableCustomTimeRange(); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectMissingTimeRangeBadgeAction(); expect(await testSubjects.exists('xyVisChart')).to.be(true); }); @@ -71,17 +64,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardCustomizePanel.openDatePickerQuickMenu(); await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); expect(await testSubjects.exists('emptyPlaceholder')).to.be(true); - await PageObjects.dashboard.clickQuickSave(); + await dashboard.clickQuickSave(); }); it('can remove a custom time range from a panel', async () => { await dashboardBadgeActions.clickTimeRangeBadgeAction(); await dashboardCustomizePanel.disableCustomTimeRange(); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectMissingTimeRangeBadgeAction(); expect(await testSubjects.exists('xyVisChart')).to.be(true); }); diff --git a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts index 33297ac3106306..c3d5bfce6e6210 100644 --- a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts +++ b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts @@ -15,14 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'visualize', - 'visEditor', - 'timePicker', - 'lens', - ]); + const { dashboard, lens } = getPageObjects(['dashboard', 'lens']); const EMPTY_TITLE = '[No Title]'; @@ -33,11 +26,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.dashboard.saveDashboard('Panel Title Test'); - await PageObjects.lens.createAndAddLensFromDashboard({}); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); + await dashboard.saveDashboard('Panel Title Test'); + await lens.createAndAddLensFromDashboard({}); }); beforeEach(async () => { @@ -49,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('by value', () => { it('new panel by value has empty title', async () => { - const [newPanelTitle] = await PageObjects.dashboard.getPanelTitles(); + const [newPanelTitle] = await dashboard.getPanelTitles(); expect(newPanelTitle).to.equal(EMPTY_TITLE); }); @@ -57,16 +50,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.setCustomPanelTitle(''); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.dashboard.clearUnsavedChanges(); + await dashboard.clearUnsavedChanges(); }); it('custom title causes unsaved changes and saving clears it', async () => { await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.setCustomPanelTitle('Custom title'); await dashboardCustomizePanel.clickSaveButton(); - const [panelTitle] = await PageObjects.dashboard.getPanelTitles(); + const [panelTitle] = await dashboard.getPanelTitles(); expect(panelTitle).to.equal('Custom title'); - await PageObjects.dashboard.clearUnsavedChanges(); + await dashboard.clearUnsavedChanges(); }); it('reset title should be hidden on a by value panel', async () => { @@ -102,7 +95,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.legacySaveToLibrary(getVisTitle(true)); await retry.tryForTime(500, async () => { // need to surround in 'retry' due to delays in HTML updates causing the title read to be behind - const [newPanelTitle] = await PageObjects.dashboard.getPanelTitles(); + const [newPanelTitle] = await dashboard.getPanelTitles(); expect(newPanelTitle).to.equal(getVisTitle()); }); }); @@ -122,7 +115,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.navigateToEditorFromFlyout(); // legacySaveToLibrary UI cannot set description - await PageObjects.lens.save( + await lens.save( getVisTitle(true), false, undefined, @@ -150,8 +143,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.customizePanel(); await dashboardCustomizePanel.setCustomPanelTitle('Custom title'); await dashboardCustomizePanel.clickSaveButton(); - await dashboardPanelActions.legacyUnlinkFromLibrary(); - const [newPanelTitle] = await PageObjects.dashboard.getPanelTitles(); + await dashboardPanelActions.legacyUnlinkFromLibrary('Custom title'); + const [newPanelTitle] = await dashboard.getPanelTitles(); expect(newPanelTitle).to.equal('Custom title'); }); @@ -162,14 +155,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.legacySaveToLibrary(getVisTitle(true)); await retry.tryForTime(500, async () => { // need to surround in 'retry' due to delays in HTML updates causing the title read to be behind - const [newPanelTitle] = await PageObjects.dashboard.getPanelTitles(); + const [newPanelTitle] = await dashboard.getPanelTitles(); expect(newPanelTitle).to.equal(getVisTitle()); }); }); it('unlinking a by reference panel without a custom title will keep the library title', async () => { - await dashboardPanelActions.legacyUnlinkFromLibrary(); - const [newPanelTitle] = await PageObjects.dashboard.getPanelTitles(); + await dashboardPanelActions.legacyUnlinkFromLibrary(getVisTitle()); + const [newPanelTitle] = await dashboard.getPanelTitles(); expect(newPanelTitle).to.equal(getVisTitle()); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts index ecd5c86d229554..a89f35d9171302 100644 --- a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts +++ b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts @@ -12,14 +12,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'spaceSelector', - 'header', - 'lens', - 'timePicker', - ]); + const { dashboard, header, lens } = getPageObjects(['dashboard', 'header', 'lens']); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardSettings = getService('dashboardSettings'); const filterBar = getService('filterBar'); @@ -53,83 +46,83 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should sync colors on dashboard for legacy default palette', async function () { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.dashboard.clickCreateDashboardPrompt(); + await dashboard.clickCreateDashboardPrompt(); // create non-filtered xy chart await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.goToTimeRange(); + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', palette: { mode: 'legacy', id: 'default' }, }); - await PageObjects.lens.saveAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.saveAndReturn(); + await header.waitUntilLoadingHasFinished(); // create filtered xy chart await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', palette: { mode: 'legacy', id: 'default' }, }); await filterBar.addFilter({ field: 'geo.src', operation: 'is not', value: 'CN' }); - await PageObjects.lens.saveAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.saveAndReturn(); + await header.waitUntilLoadingHasFinished(); // create datatable vis await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.switchToVisualization('lnsDatatable'); + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'terms', field: 'geo.src', keepOpen: true, }); - await PageObjects.lens.setTermsNumberOfValues(5); - await PageObjects.lens.setTableDynamicColoring('cell'); - await PageObjects.lens.setPalette('default', true); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.setTermsNumberOfValues(5); + await lens.setTableDynamicColoring('cell'); + await lens.setPalette('default', true); + await lens.closeDimensionEditor(); + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.saveAndReturn(); + await lens.saveAndReturn(); // Set dashboard to sync colors - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.toggleSyncColors(true); await dashboardSettings.clickApplyButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const colorMappings1 = Object.entries( - getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(0)) + getColorMapping(await dashboard.getPanelChartDebugState(0)) ); const colorMappings2 = Object.entries( - getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(1)) + getColorMapping(await dashboard.getPanelChartDebugState(1)) ); - const els = await PageObjects.lens.getDatatableCellsByColumn(0); + const els = await lens.getDatatableCellsByColumn(0); const colorMappings3 = await Promise.all( els.map(async (el) => [ await el.getVisibleText(), - chroma((await PageObjects.lens.getStylesFromCell(el))['background-color']).hex(), // eui converts hex to rgb + chroma((await lens.getStylesFromCell(el))['background-color']).hex(), // eui converts hex to rgb ]) ); @@ -154,12 +147,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be possible to disable color sync', async () => { - await PageObjects.dashboard.openSettingsFlyout(); + await dashboard.openSettingsFlyout(); await dashboardSettings.toggleSyncColors(false); await dashboardSettings.clickApplyButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const colorMapping1 = getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(0)); - const colorMapping2 = getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(1)); + await header.waitUntilLoadingHasFinished(); + const colorMapping1 = getColorMapping(await dashboard.getPanelChartDebugState(0)); + const colorMapping2 = getColorMapping(await dashboard.getPanelChartDebugState(1)); const colorsByOrder1 = Object.values(colorMapping1); const colorsByOrder2 = Object.values(colorMapping2); // colors by order of occurence have to be the same diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts index 4f3861eb1f2a01..6c67ecf2825f36 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts @@ -17,7 +17,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); const dashboardDrilldownsManage = getService('dashboardDrilldownsManage'); - const PageObjects = getPageObjects([ + const { + dashboard, + dashboardControls, + common, + header, + timePicker, + settings, + copySavedObjectsToSpace, + } = getPageObjects([ 'dashboard', 'dashboardControls', 'common', @@ -38,9 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const toasts = getService('toasts'); const createDrilldown = async () => { - await PageObjects.dashboard.gotoDashboardEditMode( - dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME - ); + await dashboard.gotoDashboardEditMode(dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME); await toasts.dismissAll(); // toasts get in the way of bottom "Create drilldown" button in flyout // create drilldown @@ -55,18 +61,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardDrilldownsManage.closeFlyout(); // check that drilldown notification badge is shown - expect(await PageObjects.dashboard.getPanelDrilldownCount()).to.be(1); + expect(await dashboardDrilldownPanelActions.getPanelDrilldownCount()).to.be(1); // save dashboard, navigate to view mode await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); - await PageObjects.dashboard.saveDashboard( - dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME, - { - saveAsNew: false, - waitDialogIsClosed: true, - exitFromEditMode: true, - } - ); + await dashboard.saveDashboard(dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME, { + saveAsNew: false, + waitDialogIsClosed: true, + exitFromEditMode: true, + }); await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); }; @@ -74,17 +77,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { dashboardName: string, controls: Array<{ field: string; type: string }> ) => { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.gotoDashboardEditMode(dashboardName); await toasts.dismissAll(); // toasts get in the way of bottom "Save and close" button in create control flyout for (const control of controls) { - await PageObjects.dashboardControls.createControl({ + await dashboardControls.createControl({ controlType: control.type, dataViewTitle: 'logstash-*', fieldName: control.field, }); } - await PageObjects.dashboard.clickQuickSave(); + await dashboard.clickQuickSave(); }; const brushAreaChart = async () => { @@ -110,16 +113,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const navigateAndEnsureIDChange = async (navigationTrigger: () => Promise) => { // before executing action which would trigger navigation: remember current dashboard id in url - const oldDashboardId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const oldDashboardId = await dashboard.getDashboardIdFromCurrentUrl(); // execute navigation action await navigationTrigger(); // wait until dashboard navigates to a new dashboard with area chart await retry.waitFor('navigate to different dashboard', async () => { - const newDashboardId = await PageObjects.dashboard.getDashboardIdFromCurrentUrl(); + const newDashboardId = await dashboard.getDashboardIdFromCurrentUrl(); return typeof newDashboardId === 'string' && oldDashboardId !== newDashboardId; }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }; describe('Dashboard to dashboard drilldown', function () { @@ -127,8 +130,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { log.debug('Dashboard Drilldowns:initTests'); await security.testUser.setRoles(['test_logstash_reader', 'global_dashboard_all']); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); await elasticChart.setNewChartUiDebugFlag(); await createDrilldown(); @@ -147,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('test dashboard to dashboard drilldown', () => { beforeEach(async () => { - await PageObjects.dashboard.gotoDashboardEditMode( + await dashboard.gotoDashboardEditMode( dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME ); }); @@ -166,7 +169,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // ensure that we ended up on the correct destination dashboard. - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); @@ -181,19 +184,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { DRILLDOWN_TO_AREA_CHART_NAME ); expect(typeof href).to.be('string'); // checking that action has a href - const dashboardIdFromHref = PageObjects.dashboard.getDashboardIdFromUrl(href); + const dashboardIdFromHref = dashboard.getDashboardIdFromUrl(href); await navigateAndEnsureIDChange(async () => { await dashboardDrilldownPanelActions.openHrefByText(DRILLDOWN_TO_AREA_CHART_NAME); }); // checking that href points to the dashboard id that we have navigated to. - expect(dashboardIdFromHref).to.be( - await PageObjects.dashboard.getDashboardIdFromCurrentUrl() - ); + expect(dashboardIdFromHref).to.be(await dashboard.getDashboardIdFromCurrentUrl()); // ensure that we ended up on the correct destination dashboard. - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); @@ -213,7 +214,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // ensure that we ended up on the correct destination dashboard. - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); @@ -224,7 +225,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('carries over time range from source dashboard', async () => { const startTime = 'Sep 22, 2015 @ 06:31:44.000'; const endTime = 'Sep 23, 2015 @ 06:31:44.000'; - await PageObjects.timePicker.setAbsoluteRange(startTime, endTime); + await timePicker.setAbsoluteRange(startTime, endTime); // Navigate via drilldown, ensuring that the ID changes. await openContextMenuFromPieSlice(); @@ -233,15 +234,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // ensure that we ended up on the correct destination dashboard. - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); // ensure that the time range has been carried over. - expect(await PageObjects.timePicker.getTimeDurationInHours()).to.be(24); + expect(await timePicker.getTimeDurationInHours()).to.be(24); // reset time range - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); }); it('browser back navigation works after drilldown navigation', async () => { @@ -253,7 +254,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // ensure that we ended up on the correct destination dashboard. - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); @@ -262,18 +263,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // ensure that we have returned to the origin dashboard. - await PageObjects.dashboard.clickCancelOutOfEditMode(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.clickCancelOutOfEditMode(); + await dashboard.waitForRenderComplete(); - await PageObjects.dashboard.expectOnDashboard( + await dashboard.expectOnDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME ); }); it('delete dashboard to dashboard drilldown', async () => { // delete drilldown - await PageObjects.dashboard.switchToEditMode(); - await dashboardDrilldownPanelActions.expectExistsManageDrilldownsAction(); + await dashboard.switchToEditMode(); await dashboardDrilldownPanelActions.clickManageDrilldowns(); await dashboardDrilldownsManage.expectsManageDrilldownsFlyoutOpen(); @@ -281,7 +281,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardDrilldownsManage.closeFlyout(); // check that drilldown notification badge is not shown - expect(await PageObjects.dashboard.getPanelDrilldownCount()).to.be(0); + expect(await dashboardDrilldownPanelActions.getPanelDrilldownCount()).to.be(0); // this drilldown will be available again in the next test because the session storage is cleared. }); @@ -289,10 +289,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('test dashboard to dashboard drilldown with controls', () => { const cleanFiltersAndControls = async (dashboardName: string) => { - await PageObjects.dashboard.gotoDashboardEditMode(dashboardName); + await dashboard.gotoDashboardEditMode(dashboardName); await filterBar.removeAllFilters(); - await PageObjects.dashboardControls.deleteAllControls(); - await PageObjects.dashboard.clickQuickSave(); + await dashboardControls.deleteAllControls(); + await dashboard.clickQuickSave(); }; before('add controls and make selections', async () => { @@ -301,17 +301,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { field: 'geo.src', type: OPTIONS_LIST_CONTROL }, { field: 'bytes', type: RANGE_SLIDER_CONTROL }, ]); - const controlIds = await PageObjects.dashboardControls.getAllControlIds(); + const controlIds = await dashboardControls.getAllControlIds(); const [optionsListControl, rangeSliderControl] = controlIds; - await PageObjects.dashboardControls.optionsListOpenPopover(optionsListControl); - await PageObjects.dashboardControls.optionsListPopoverSelectOption('CN'); - await PageObjects.dashboardControls.optionsListPopoverSelectOption('US'); - await PageObjects.dashboardControls.rangeSliderWaitForLoading(rangeSliderControl); // wait for range slider to respond to options list selections before proceeding - await PageObjects.dashboardControls.rangeSliderSetLowerBound(rangeSliderControl, '1000'); - await PageObjects.dashboardControls.rangeSliderSetUpperBound(rangeSliderControl, '15000'); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.dashboard.clickQuickSave(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboardControls.optionsListOpenPopover(optionsListControl); + await dashboardControls.optionsListPopoverSelectOption('CN'); + await dashboardControls.optionsListPopoverSelectOption('US'); + await dashboardControls.rangeSliderWaitForLoading(rangeSliderControl); // wait for range slider to respond to options list selections before proceeding + await dashboardControls.rangeSliderSetLowerBound(rangeSliderControl, '1000'); + await dashboardControls.rangeSliderSetUpperBound(rangeSliderControl, '15000'); + await dashboard.waitForRenderComplete(); + await dashboard.clickQuickSave(); + await header.waitUntilLoadingHasFinished(); /** Destination Dashboard */ await createControls(dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME, [ @@ -325,7 +325,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('creates filter pills representing controls selections', async () => { - await PageObjects.dashboard.gotoDashboardEditMode( + await dashboard.gotoDashboardEditMode( dashboardDrilldownsManage.DASHBOARD_WITH_PIE_CHART_NAME ); @@ -343,13 +343,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await filterBar.hasFilter('bytes', '1,000 to 15,000')).to.be(true); // control filter pills impact destination dashboard controls - const controlIds = await PageObjects.dashboardControls.getAllControlIds(); + const controlIds = await dashboardControls.getAllControlIds(); const optionsListControl = controlIds[0]; - await PageObjects.dashboardControls.optionsListOpenPopover(optionsListControl); - expect( - await PageObjects.dashboardControls.optionsListPopoverGetAvailableOptionsCount() - ).to.equal(2); - await PageObjects.dashboardControls.optionsListEnsurePopoverIsClosed(optionsListControl); + await dashboardControls.optionsListOpenPopover(optionsListControl); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.equal(2); + await dashboardControls.optionsListEnsurePopoverIsClosed(optionsListControl); }); }); }); @@ -363,8 +361,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { name: 'custom_space', disabledFeatures: [], }); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSavedObjects(); + await settings.navigateTo(); + await settings.clickKibanaSavedObjects(); }); after(async () => { @@ -372,19 +370,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Dashboards linked by a drilldown are both copied to a space', async () => { - await PageObjects.copySavedObjectsToSpace.openCopyToSpaceFlyoutForObject( + await copySavedObjectsToSpace.openCopyToSpaceFlyoutForObject( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); - await PageObjects.copySavedObjectsToSpace.setupForm({ + await copySavedObjectsToSpace.setupForm({ destinationSpaceId, }); - await PageObjects.copySavedObjectsToSpace.startCopy(); + await copySavedObjectsToSpace.startCopy(); // Wait for successful copy await testSubjects.waitForDeleted(`cts-summary-indicator-loading-${destinationSpaceId}`); await testSubjects.existOrFail(`cts-summary-indicator-success-${destinationSpaceId}`); - const summaryCounts = await PageObjects.copySavedObjectsToSpace.getSummaryCounts(); + const summaryCounts = await copySavedObjectsToSpace.getSummaryCounts(); expect(summaryCounts).to.eql({ success: 5, // 2 dashboards (linked by a drilldown) + 2 visualizations + 1 index pattern @@ -393,19 +391,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { errors: 0, }); - await PageObjects.copySavedObjectsToSpace.finishCopy(); + await copySavedObjectsToSpace.finishCopy(); // Actually use copied dashboards in a new space: - await PageObjects.common.navigateToApp('dashboards', { + await common.navigateToApp('dashboards', { basePath: `/s/${destinationSpaceId}`, }); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard( + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // brush area chart and drilldown back to pie chat dashboard await brushAreaChart(); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts index 2e15f19e702acb..3a28182c9f5521 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts @@ -13,7 +13,11 @@ const DRILLDOWN_TO_DISCOVER_URL = 'Go to discover'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); const dashboardDrilldownsManage = getService('dashboardDrilldownsManage'); - const PageObjects = getPageObjects(['dashboard', 'common', 'header', 'timePicker', 'discover']); + const { dashboard, timePicker, discover } = getPageObjects([ + 'dashboard', + 'timePicker', + 'discover', + ]); const log = getService('log'); const browser = getService('browser'); const testSubjects = getService('testSubjects'); @@ -21,12 +25,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Dashboard to URL drilldown', function () { before(async () => { log.debug('Dashboard to URL:initTests'); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); }); it('should create dashboard to URL drilldown and use it to navigate to discover', async () => { - await PageObjects.dashboard.gotoDashboardEditMode( + await dashboard.gotoDashboardEditMode( dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME ); @@ -51,27 +55,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardDrilldownsManage.closeFlyout(); // check that drilldown notification badge is shown - expect(await PageObjects.dashboard.getPanelDrilldownCount()).to.be(2); + expect(await dashboardDrilldownPanelActions.getPanelDrilldownCount()).to.be(2); // save dashboard, navigate to view mode - await PageObjects.dashboard.saveDashboard( - dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME, - { - saveAsNew: false, - waitDialogIsClosed: true, - exitFromEditMode: true, - } - ); + await dashboard.saveDashboard(dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME, { + saveAsNew: false, + waitDialogIsClosed: true, + exitFromEditMode: true, + }); - const originalTimeRangeDurationHours = await PageObjects.timePicker.getTimeDurationInHours(); + const originalTimeRangeDurationHours = await timePicker.getTimeDurationInHours(); await brushAreaChart(); await dashboardDrilldownPanelActions.expectMultipleActionsMenuOpened(); await dashboardDrilldownPanelActions.clickActionByText(DRILLDOWN_TO_DISCOVER_URL); - await PageObjects.discover.waitForDiscoverAppOnScreen(); + await discover.waitForDiscoverAppOnScreen(); // check that new time range duration was applied - const newTimeRangeDurationHours = await PageObjects.timePicker.getTimeDurationInHours(); + const newTimeRangeDurationHours = await timePicker.getTimeDurationInHours(); expect(newTimeRangeDurationHours).to.be.lessThan(originalTimeRangeDurationHours); // check that hours duration is more than 1 hour (meaning that the default time range of last 15 minutes has not been applied) expect(newTimeRangeDurationHours).to.be.greaterThan(1); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts index 9e834b80a2130a..2cf3f91c6a38e6 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts @@ -14,32 +14,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const log = getService('log'); const testSubjects = getService('testSubjects'); - const reporting = getService('reporting'); + const reportingService = getService('reporting'); const dashboardAddPanel = getService('dashboardAddPanel'); const filterBar = getService('filterBar'); const find = getService('find'); const retry = getService('retry'); const toasts = getService('toasts'); - const PageObjects = getPageObjects([ + const { reporting, common, dashboard, timePicker } = getPageObjects([ 'reporting', 'common', 'dashboard', 'timePicker', - 'discover', ]); const navigateToDashboardApp = async () => { log.debug('in navigateToDashboardApp'); - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await retry.tryForTime(10000, async () => { - expect(await PageObjects.dashboard.onDashboardLandingPage()).to.be(true); + expect(await dashboard.onDashboardLandingPage()).to.be(true); }); }; const getCsvReportData = async () => { await toasts.dismissAll(); - const url = await PageObjects.reporting.getReportURL(60000); - const res = await PageObjects.reporting.getResponse(url ?? ''); + const url = await reporting.getReportURL(60000); + const res = await reporting.getResponse(url ?? ''); expect(res.status).to.equal(200); expect(res.get('content-type')).to.equal('text/csv; charset=utf-8'); @@ -69,7 +68,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Default Saved Search Data', () => { before(async () => { await esArchiver.emptyKibanaIndex(); - await reporting.initEcommerce(); + await reportingService.initEcommerce(); await kibanaServer.uiSettings.update({ 'dateFormat:tz': 'UTC' }); }); @@ -78,11 +77,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await reporting.teardownEcommerce(); + await reportingService.teardownEcommerce(); }); it('Generate CSV export of a saved search panel', async function () { - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard - 3 Day Period'); + await dashboard.loadSavedDashboard('Ecom Dashboard - 3 Day Period'); await clickActionsMenu('EcommerceData'); await clickDownloadCsv(); @@ -92,7 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Downloads a filtered CSV export of a saved search panel', async function () { - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard - 3 Day Period'); + await dashboard.loadSavedDashboard('Ecom Dashboard - 3 Day Period'); // add a filter await filterBar.addFilter({ field: 'category', operation: 'is', value: `Men's Shoes` }); @@ -106,9 +105,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Downloads a saved search panel with a custom time range that does not intersect with dashboard time range', async function () { - await PageObjects.dashboard.loadSavedDashboard( - 'Ecom Dashboard - 3 Day Period - custom time range' - ); + await dashboard.loadSavedDashboard('Ecom Dashboard - 3 Day Period - custom time range'); await clickActionsMenu('EcommerceData'); await clickDownloadCsv(); @@ -119,7 +116,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Gets the correct filename if panel titles are hidden', async () => { - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard Hidden Panel Titles'); + await dashboard.loadSavedDashboard('Ecom Dashboard Hidden Panel Titles'); const savedSearchPanel = await find.byCssSelector( '[data-test-embeddable-id="94eab06f-60ac-4a85-b771-3a8ed475c9bb"]' ); // panel title is hidden @@ -141,23 +138,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.emptyKibanaIndex(); - await reporting.initEcommerce(); + await reportingService.initEcommerce(); await kibanaServer.uiSettings.update({ 'dateFormat:tz': 'UTC' }); }); beforeEach(async () => { await navigateToDashboardApp(); log.info(`Creating empty dashboard`); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setAbsoluteRange(from, to); + await dashboard.clickNewDashboard(); + await timePicker.setAbsoluteRange(from, to); log.info(`Adding "${TEST_SEARCH_TITLE}" to dashboard`); await dashboardAddPanel.addSavedSearch(TEST_SEARCH_TITLE); - await PageObjects.dashboard.saveDashboard(TEST_DASHBOARD_TITLE); + await dashboard.saveDashboard(TEST_DASHBOARD_TITLE); }); after(async () => { - await reporting.teardownEcommerce(); - await PageObjects.common.unsetTime(); + await reportingService.teardownEcommerce(); + await common.unsetTime(); }); it('Downloads filtered Discover saved search report', async () => { @@ -175,26 +172,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.emptyKibanaIndex(); - await reporting.initLogs(); + await reportingService.initLogs(); await esArchiver.load('x-pack/test/functional/es_archives/reporting/hugedata'); await kibanaServer.uiSettings.update({ 'dateFormat:tz': 'UTC' }); }); beforeEach(async () => { await navigateToDashboardApp(); - await PageObjects.dashboard.loadSavedDashboard(dashboardWithScriptedFieldsSearch); - await PageObjects.timePicker.setAbsoluteRange( + await dashboard.loadSavedDashboard(dashboardWithScriptedFieldsSearch); + await timePicker.setAbsoluteRange( 'Nov 26, 1981 @ 21:54:15.526', 'Mar 5, 1982 @ 18:17:44.821' ); - await PageObjects.common.sleep(1000); + await common.sleep(1000); await filterBar.addFilter({ field: 'name.keyword', operation: 'is', value: 'Fethany' }); - await PageObjects.common.sleep(1000); + await common.sleep(1000); }); after(async () => { - await reporting.teardownLogs(); + await reportingService.teardownLogs(); await esArchiver.unload('x-pack/test/functional/es_archives/reporting/hugedata'); }); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts index 39420d619a91ff..3f0bf511075c27 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts @@ -16,7 +16,7 @@ export default function ({ getService, updateBaselines, }: FtrProviderContext & { updateBaselines: boolean }) { - const PageObjects = getPageObjects(['reporting', 'common', 'dashboard', 'share']); + const { reporting, dashboard, share } = getPageObjects(['reporting', 'dashboard', 'share']); const esArchiver = getService('esArchiver'); const security = getService('security'); const browser = getService('browser'); @@ -73,7 +73,7 @@ export default function ({ ]); }); after('clean up archives', async () => { - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); await unloadEcommerce(); await es.deleteByQuery({ index: '.reporting-*', @@ -85,20 +85,20 @@ export default function ({ describe('Print PDF button', () => { afterEach(async () => { - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); it('is available if new', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); }); it('is available when saved', async () => { - await PageObjects.dashboard.saveDashboard('My PDF Dashboard'); - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + await dashboard.saveDashboard('My PDF Dashboard'); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); }); }); @@ -114,18 +114,18 @@ export default function ({ // Generating and then comparing reports can take longer than the default 60s timeout because the comparePngs // function is taking about 15 seconds per comparison in jenkins. this.timeout(300000); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); - await PageObjects.reporting.openExportTab(); - await PageObjects.reporting.checkUsePrintLayout(); - await PageObjects.reporting.clickGenerateReportButton(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('Ecom Dashboard'); + await reporting.openExportTab(); + await reporting.checkUsePrintLayout(); + await reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); - const res = await PageObjects.reporting.getResponse(url ?? ''); + const url = await reporting.getReportURL(60000); + const res = await reporting.getResponse(url ?? ''); expect(res.status).to.equal(200); expect(res.get('content-type')).to.equal('application/pdf'); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); }); @@ -138,19 +138,19 @@ export default function ({ }); it('is available if new', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.reporting.openExportTab(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); - await PageObjects.share.closeShareModal(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); + await share.closeShareModal(); }); it('is available when saved', async () => { - await PageObjects.dashboard.saveDashboard('My PNG Dash'); - await PageObjects.reporting.openExportTab(); + await dashboard.saveDashboard('My PNG Dash'); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); await (await testSubjects.find('kibanaChrome')).clickMouseButton(); // close popover }); }); @@ -167,14 +167,14 @@ export default function ({ it('downloads a PDF file with saved search given EuiDataGrid enabled', async function () { await kibanaServer.uiSettings.update({ 'doc_table:legacy': false }); this.timeout(300000); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); - await PageObjects.reporting.openExportTab(); - await PageObjects.reporting.clickGenerateReportButton(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('Ecom Dashboard'); + await reporting.openExportTab(); + await reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); - const res = await PageObjects.reporting.getResponse(url ?? ''); - await PageObjects.share.closeShareModal(); + const url = await reporting.getReportURL(60000); + const res = await reporting.getResponse(url ?? ''); + await share.closeShareModal(); expect(res.status).to.equal(200); expect(res.get('content-type')).to.equal('application/pdf'); @@ -197,28 +197,24 @@ export default function ({ 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce_76.json' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('[K7.6-eCommerce] Revenue Dashboard'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('[K7.6-eCommerce] Revenue Dashboard'); - await PageObjects.reporting.openExportTab(); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); - await PageObjects.reporting.forceSharedItemsContainerSize({ width: 1405 }); - await PageObjects.reporting.clickGenerateReportButton(); - await PageObjects.reporting.removeForceSharedItemsContainerSize(); + await reporting.forceSharedItemsContainerSize({ width: 1405 }); + await reporting.clickGenerateReportButton(); + await reporting.removeForceSharedItemsContainerSize(); - const url = await PageObjects.reporting.getReportURL(60000); - const reportData = await PageObjects.reporting.getRawReportData(url ?? ''); - sessionReportPath = await PageObjects.reporting.writeSessionReport( + const url = await reporting.getReportURL(60000); + const reportData = await reporting.getRawReportData(url ?? ''); + sessionReportPath = await reporting.writeSessionReport( reportFileName, 'png', reportData, REPORTS_FOLDER ); - baselinePath = PageObjects.reporting.getBaselineReportPath( - reportFileName, - 'png', - REPORTS_FOLDER - ); + baselinePath = reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER); }); after(async () => { diff --git a/x-pack/test/functional/apps/data_views/feature_controls/security.ts b/x-pack/test/functional/apps/data_views/feature_controls/security.ts index aa76093e14939a..1cc62baf0abbae 100644 --- a/x-pack/test/functional/apps/data_views/feature_controls/security.ts +++ b/x-pack/test/functional/apps/data_views/feature_controls/security.ts @@ -11,8 +11,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const security = getService('security'); - const PageObjects = getPageObjects(['common', 'settings', 'security']); + const securityService = getService('security'); + const { common, settings, security } = getPageObjects(['common', 'settings', 'security']); const appsMenu = getService('appsMenu'); const testSubjects = getService('testSubjects'); const globalNav = getService('globalNav'); @@ -29,7 +29,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global data views all privileges', () => { before(async () => { - await security.role.create('global_index_patterns_all_role', { + await securityService.role.create('global_index_patterns_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -43,15 +43,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_index_patterns_all_user', { + await securityService.user.create('global_index_patterns_all_user', { password: 'global_index_patterns_all_user-password', roles: ['global_index_patterns_all_role'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login( + await security.login( 'global_index_patterns_all_user', 'global_index_patterns_all_user-password', { @@ -60,15 +60,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); + await settings.navigateTo(); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await Promise.all([ - security.role.delete('global_index_patterns_all_role'), - security.user.delete('global_index_patterns_all_user'), + securityService.role.delete('global_index_patterns_all_role'), + securityService.user.delete('global_index_patterns_all_user'), ]); }); @@ -78,7 +78,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`index pattern listing shows create button`, async () => { - await PageObjects.settings.clickKibanaIndexPatterns(); + await settings.clickKibanaIndexPatterns(); await testSubjects.existOrFail('createDataViewButton'); }); @@ -89,7 +89,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global data views read-only privileges', () => { before(async () => { - await security.role.create('global_index_patterns_read_role', { + await securityService.role.create('global_index_patterns_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -103,13 +103,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_index_patterns_read_user', { + await securityService.user.create('global_index_patterns_read_user', { password: 'global_index_patterns_read_user-password', roles: ['global_index_patterns_read_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_index_patterns_read_user', 'global_index_patterns_read_user-password', { @@ -118,12 +118,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await kibanaServer.uiSettings.replace({}); - await PageObjects.settings.navigateTo(); + await settings.navigateTo(); }); after(async () => { - await security.role.delete('global_index_patterns_read_role'); - await security.user.delete('global_index_patterns_read_user'); + await securityService.role.delete('global_index_patterns_read_role'); + await securityService.user.delete('global_index_patterns_read_user'); }); it('shows management navlink', async () => { @@ -132,7 +132,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`index pattern listing doesn't show create button`, async () => { - await PageObjects.settings.clickKibanaIndexPatterns(); + await settings.clickKibanaIndexPatterns(); await testSubjects.existOrFail('noDataViewsPrompt'); await testSubjects.missingOrFail('createDataViewButton'); }); @@ -144,7 +144,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('no data views privileges', () => { before(async () => { - await security.role.create('no_index_patterns_privileges_role', { + await securityService.role.create('no_index_patterns_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -158,13 +158,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_index_patterns_privileges_user', { + await securityService.user.create('no_index_patterns_privileges_user', { password: 'no_index_patterns_privileges_user-password', roles: ['no_index_patterns_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'no_index_patterns_privileges_user', 'no_index_patterns_privileges_user-password', { @@ -174,8 +174,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await security.role.delete('no_index_patterns_privileges_role'); - await security.user.delete('no_index_patterns_privileges_user'); + await securityService.role.delete('no_index_patterns_privileges_role'); + await securityService.user.delete('no_index_patterns_privileges_user'); }); it('does not show Management navlink', async () => { @@ -184,7 +184,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`doesn't show Data Views in management side-nav`, async () => { - await PageObjects.common.navigateToActualUrl('management', '', { + await common.navigateToActualUrl('management', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); diff --git a/x-pack/test/functional/apps/data_views/feature_controls/spaces.ts b/x-pack/test/functional/apps/data_views/feature_controls/spaces.ts index 847b639370723c..d1ac998f5e46a2 100644 --- a/x-pack/test/functional/apps/data_views/feature_controls/spaces.ts +++ b/x-pack/test/functional/apps/data_views/feature_controls/spaces.ts @@ -12,7 +12,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const config = getService('config'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'settings', 'security']); + const { common, settings } = getPageObjects(['common', 'settings', 'security']); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); const kibanaServer = getService('kibanaServer'); @@ -41,7 +41,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows Management navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -49,8 +49,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`data views listing shows create button`, async () => { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); await testSubjects.existOrFail('createDataViewButton'); }); }); @@ -73,7 +73,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`redirects to management home`, async () => { - await PageObjects.common.navigateToUrl('management', 'kibana/indexPatterns', { + await common.navigateToUrl('management', 'kibana/indexPatterns', { basePath: `/s/custom_space`, ensureCurrentUrl: false, shouldLoginIfPrompted: false, diff --git a/x-pack/test/functional/apps/data_views/spaces/index.ts b/x-pack/test/functional/apps/data_views/spaces/index.ts index fa2b954c47cc62..8f9172fbe0c3ba 100644 --- a/x-pack/test/functional/apps/data_views/spaces/index.ts +++ b/x-pack/test/functional/apps/data_views/spaces/index.ts @@ -8,14 +8,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'common', - 'spaceSelector', - 'home', - 'header', - 'security', - 'settings', - ]); + const { settings } = getPageObjects(['settings']); const spacesService = getService('spaces'); const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); @@ -36,11 +29,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { disabledFeatures: [], }); - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.createIndexPattern('log*'); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); + await settings.createIndexPattern('log*'); - await PageObjects.settings.clickKibanaIndexPatterns(); + await settings.clickKibanaIndexPatterns(); // click manage spaces on first entry // first avatar is in header, so we want the second one diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.js b/x-pack/test/functional/apps/discover/async_scripted_fields.ts similarity index 71% rename from x-pack/test/functional/apps/discover/async_scripted_fields.js rename to x-pack/test/functional/apps/discover/async_scripted_fields.ts index f3ae63dd427aa8..454f99f231435a 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.js +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.ts @@ -7,19 +7,19 @@ // Tests for scripted field in default distribution where async search is used import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; -export default function ({ getService, getPageObjects }) { +export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); // const log = getService('log'); const retry = getService('retry'); const esArchiver = getService('esArchiver'); const log = getService('log'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, settings, discover, header, dashboard } = getPageObjects([ 'common', 'settings', 'discover', - 'timePicker', 'header', 'dashboard', ]); @@ -55,12 +55,12 @@ export default function ({ getService, getPageObjects }) { if (false) { /* If you had to modify the scripted fields, you could un-comment all this, run it, use es_archiver to update 'kibana_scripted_fields_on_logstash' */ - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.createIndexPattern('logsta'); - await PageObjects.settings.clickScriptedFieldsTab(); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); + await settings.createIndexPattern('logsta'); + await settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); - await PageObjects.settings.addScriptedField( + await settings.addScriptedField( 'sharedFail', 'painless', 'string', @@ -72,8 +72,8 @@ export default function ({ getService, getPageObjects }) { ); } - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logsta*'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('logsta*'); await retry.try(async function () { await testSubjects.existOrFail('searchResponseWarningsEmptyPrompt'); @@ -86,18 +86,18 @@ export default function ({ getService, getPageObjects }) { 'global_discover_all', 'global_dashboard_all', ]); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logsta*'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('logsta*'); - await PageObjects.discover.saveSearch('search with warning'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.saveSearch('search with warning'); + await header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch('search with warning'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async function () { await testSubjects.existOrFail('searchResponseWarningsBadgeToogleButton'); @@ -110,13 +110,13 @@ export default function ({ getService, getPageObjects }) { which are now saved in the esArchive. */ - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaIndexPatterns(); - await PageObjects.settings.clickIndexPatternLogstash(); - const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount()); - await PageObjects.settings.clickScriptedFieldsTab(); + await settings.navigateTo(); + await settings.clickKibanaIndexPatterns(); + await settings.clickIndexPatternLogstash(); + const startingCount = parseInt(await settings.getScriptedFieldsTabCount(), 10); + await settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); - await PageObjects.settings.addScriptedField( + await settings.addScriptedField( 'goodScript', 'painless', 'string', @@ -126,12 +126,10 @@ export default function ({ getService, getPageObjects }) { "if (doc['response.raw'].value == '200') { if (doc['url.raw'].size() > 0) { return 'good ' + doc['url.raw'].value } else { return 'good' } } else { if (doc['machine.os.raw'].size() > 0) { return 'bad ' + doc['machine.os.raw'].value } else { return 'bad' } }" ); await retry.try(async function () { - expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be( - startingCount + 1 - ); + expect(parseInt(await settings.getScriptedFieldsTabCount(), 10)).to.be(startingCount + 1); }); - await PageObjects.settings.addScriptedField( + await settings.addScriptedField( 'goodScript2', 'painless', 'string', @@ -141,18 +139,16 @@ export default function ({ getService, getPageObjects }) { "if (doc['url.raw'].size() > 0) { String tempString = \"\"; for ( int i = (doc['url.raw'].value.length() - 1); i >= 0 ; i--) { tempString = tempString + (doc['url.raw'].value).charAt(i); } return tempString; } else { return \"emptyUrl\"; }" ); await retry.try(async function () { - expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be( - startingCount + 2 - ); + expect(parseInt(await settings.getScriptedFieldsTabCount(), 10)).to.be(startingCount + 2); }); } - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('logstash-*'); await queryBar.setQuery('php* OR *jpg OR *css*'); await testSubjects.click('querySubmitButton'); await retry.tryForTime(30000, async function () { - expect(await PageObjects.discover.getHitCount()).to.be('13,301'); + expect(await discover.getHitCount()).to.be('13,301'); }); }); }); diff --git a/x-pack/test/functional/apps/discover/error_handling.ts b/x-pack/test/functional/apps/discover/error_handling.ts index cf362e8a124759..e27900064911c8 100644 --- a/x-pack/test/functional/apps/discover/error_handling.ts +++ b/x-pack/test/functional/apps/discover/error_handling.ts @@ -12,7 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker']); + const { common, discover, timePicker } = getPageObjects(['common', 'discover', 'timePicker']); describe('errors', function describeIndexTests() { before(async function () { @@ -20,8 +20,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/invalid_scripted_field' ); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await common.navigateToApp('discover'); }); after(async function () { @@ -31,7 +31,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // this is the same test as in OSS but it catches different error message issue in different licences describe('invalid scripted field error', () => { it('is rendered', async () => { - await PageObjects.discover.showsErrorCallout(); + await discover.showsErrorCallout(); const painlessStackTrace = await testSubjects.find('painlessStackTrace'); expect(painlessStackTrace).not.to.be(undefined); }); diff --git a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts index 2d6b56c6d375f6..b7496a500c3867 100644 --- a/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts +++ b/x-pack/test/functional/apps/discover/feature_controls/discover_security.ts @@ -20,19 +20,19 @@ export default function (ctx: FtrProviderContext) { const indexPatterns = getService('indexPatterns'); const retry = getService('retry'); const monacoEditor = getService('monacoEditor'); - const security = getService('security'); + const securityService = getService('security'); const globalNav = getService('globalNav'); - const PageObjects = getPageObjects([ - 'common', - 'error', - 'discover', - 'timePicker', - 'security', - 'share', - 'spaceSelector', - 'header', - 'unifiedFieldList', - ]); + const { common, error, discover, timePicker, security, share, header, unifiedFieldList } = + getPageObjects([ + 'common', + 'error', + 'discover', + 'timePicker', + 'security', + 'share', + 'header', + 'unifiedFieldList', + ]); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); const kibanaServer = getService('kibanaServer'); @@ -40,7 +40,7 @@ export default function (ctx: FtrProviderContext) { const logstashIndexName = 'logstash-2015.09.22'; async function setDiscoverTimeRange() { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); } // more tests are in x-pack/test/functional/apps/saved_query_management/feature_controls/security.ts @@ -53,13 +53,13 @@ export default function (ctx: FtrProviderContext) { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await kibanaServer.importExport.unload( 'x-pack/test/functional/fixtures/kbn_archiver/discover/feature_controls/security' @@ -69,7 +69,7 @@ export default function (ctx: FtrProviderContext) { describe('global discover all privileges', () => { before(async () => { - await security.role.create('global_discover_all_role', { + await securityService.role.create('global_discover_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -83,26 +83,22 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('global_discover_all_user', { + await securityService.user.create('global_discover_all_user', { password: 'global_discover_all_user-password', roles: ['global_discover_all_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_discover_all_user', - 'global_discover_all_user-password', - { - expectSpaceSelector: false, - } - ); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await security.login('global_discover_all_user', 'global_discover_all_user-password', { + expectSpaceSelector: false, + }); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('logstash-*'); }); after(async () => { - await security.role.delete('global_discover_all_role'); - await security.user.delete('global_discover_all_user'); + await securityService.role.delete('global_discover_all_role'); + await securityService.user.delete('global_discover_all_user'); }); it('shows discover navlink', async () => { @@ -123,22 +119,22 @@ export default function (ctx: FtrProviderContext) { it('Shows short urls for users with the right privileges', async () => { let actualUrl: string = ''; - await PageObjects.share.clickShareTopNavButton(); + await share.clickShareTopNavButton(); const re = new RegExp( deployment.getHostPort().replace(':80', '').replace(':443', '') + '/app/r.*$' ); await retry.try(async () => { - actualUrl = await PageObjects.share.getSharedUrl(); + actualUrl = await share.getSharedUrl(); expect(actualUrl).to.match(re); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); }); it('shows CSV reports', async () => { - await PageObjects.share.clickShareTopNavButton(); - await PageObjects.share.clickTab('Export'); + await share.clickShareTopNavButton(); + await share.clickTab('Export'); await testSubjects.existOrFail('generateReportButton'); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); savedQuerySecurityUtils.shouldAllowSavingQueries(); @@ -146,7 +142,7 @@ export default function (ctx: FtrProviderContext) { describe('global discover read-only privileges', () => { before(async () => { - await security.role.create('global_discover_read_role', { + await securityService.role.create('global_discover_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -160,24 +156,20 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('global_discover_read_user', { + await securityService.user.create('global_discover_read_user', { password: 'global_discover_read_user-password', roles: ['global_discover_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_discover_read_user', - 'global_discover_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_discover_read_user', 'global_discover_read_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_discover_read_role'); - await security.user.delete('global_discover_read_user'); + await securityService.role.delete('global_discover_read_role'); + await securityService.user.delete('global_discover_read_user'); }); it('shows discover navlink', async () => { @@ -186,8 +178,8 @@ export default function (ctx: FtrProviderContext) { }); it(`doesn't show save button`, async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.waitForTopNavToBeVisible(); + await common.navigateToApp('discover'); + await common.waitForTopNavToBeVisible(); await testSubjects.existOrFail('discoverNewButton', { timeout: 10000 }); await testSubjects.missingOrFail('discoverSaveButton'); }); @@ -197,17 +189,17 @@ export default function (ctx: FtrProviderContext) { }); it(`doesn't show visualize button`, async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.waitForTopNavToBeVisible(); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await common.navigateToApp('discover'); + await common.waitForTopNavToBeVisible(); + await discover.selectIndexPattern('logstash-*'); await setDiscoverTimeRange(); - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); }); it('should allow for copying the snapshot URL', async function () { - await PageObjects.share.clickShareTopNavButton(); - const actualUrl = await PageObjects.share.getSharedUrl(); + await share.clickShareTopNavButton(); + const actualUrl = await share.getSharedUrl(); expect(actualUrl).to.contain(`?l=${DISCOVER_APP_LOCATOR}`); const urlSearchParams = new URLSearchParams(actualUrl); expect(JSON.parse(decompressFromBase64(urlSearchParams.get('lz')!)!)).to.eql({ @@ -229,18 +221,18 @@ export default function (ctx: FtrProviderContext) { pause: true, }, }); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); it(`Doesn't show short urls for users without those privileges`, async () => { - await PageObjects.share.clickShareTopNavButton(); + await share.clickShareTopNavButton(); let actualUrl: string = ''; await retry.try(async () => { - actualUrl = await PageObjects.share.getSharedUrl(); + actualUrl = await share.getSharedUrl(); // only shows in long urls expect(actualUrl).to.contain(DISCOVER_APP_LOCATOR); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); }); savedQuerySecurityUtils.shouldDisallowSavingButAllowLoadingSavedQueries(); @@ -248,7 +240,7 @@ export default function (ctx: FtrProviderContext) { describe('discover read-only privileges with url_create', () => { before(async () => { - await security.role.create('global_discover_read_url_create_role', { + await securityService.role.create('global_discover_read_url_create_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -262,13 +254,13 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('global_discover_read_url_create_user', { + await securityService.user.create('global_discover_read_url_create_user', { password: 'global_discover_read_url_create_user-password', roles: ['global_discover_read_url_create_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_discover_read_url_create_user', 'global_discover_read_url_create_user-password', { @@ -278,8 +270,8 @@ export default function (ctx: FtrProviderContext) { }); after(async () => { - await security.user.delete('global_discover_read_url_create_user'); - await security.role.delete('global_discover_read_url_create_role'); + await securityService.user.delete('global_discover_read_url_create_user'); + await securityService.role.delete('global_discover_read_url_create_role'); }); it('shows discover navlink', async () => { @@ -288,8 +280,8 @@ export default function (ctx: FtrProviderContext) { }); it(`doesn't show save button`, async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.waitForTopNavToBeVisible(); + await common.navigateToApp('discover'); + await common.waitForTopNavToBeVisible(); await testSubjects.existOrFail('discoverNewButton', { timeout: 10000 }); await testSubjects.missingOrFail('discoverSaveButton'); }); @@ -299,23 +291,23 @@ export default function (ctx: FtrProviderContext) { }); it(`doesn't show visualize button`, async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.waitForTopNavToBeVisible(); + await common.navigateToApp('discover'); + await common.waitForTopNavToBeVisible(); await setDiscoverTimeRange(); - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); }); it('Shows short urls for users with the right privileges', async () => { - await PageObjects.share.clickShareTopNavButton(); + await share.clickShareTopNavButton(); let actualUrl: string = ''; const re = new RegExp( deployment.getHostPort().replace(':80', '').replace(':443', '') + '/app/r.*$' ); await retry.try(async () => { - actualUrl = await PageObjects.share.getSharedUrl(); + actualUrl = await share.getSharedUrl(); expect(actualUrl).to.match(re); - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); }); @@ -324,7 +316,7 @@ export default function (ctx: FtrProviderContext) { describe('discover and visualize privileges', () => { before(async () => { - await security.role.create('global_discover_visualize_read_role', { + await securityService.role.create('global_discover_visualize_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -339,13 +331,13 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('global_discover_visualize_read_user', { + await securityService.user.create('global_discover_visualize_read_user', { password: 'global_discover_visualize_read_user-password', roles: ['global_discover_visualize_read_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_discover_visualize_read_user', 'global_discover_visualize_read_user-password', { @@ -355,22 +347,22 @@ export default function (ctx: FtrProviderContext) { }); after(async () => { - await security.role.delete('global_discover_visualize_read_role'); - await security.user.delete('global_discover_visualize_read_user'); + await securityService.role.delete('global_discover_visualize_read_role'); + await securityService.user.delete('global_discover_visualize_read_user'); }); it(`shows the visualize button`, async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.common.waitForTopNavToBeVisible(); + await common.navigateToApp('discover'); + await common.waitForTopNavToBeVisible(); await setDiscoverTimeRange(); - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectFieldListItemVisualize('bytes'); }); }); describe('no discover privileges', () => { before(async () => { - await security.role.create('no_discover_privileges_role', { + await securityService.role.create('no_discover_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -384,7 +376,7 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('no_discover_privileges_user', { + await securityService.user.create('no_discover_privileges_user', { password: 'no_discover_privileges_user-password', roles: ['no_discover_privileges_role'], full_name: 'test user', @@ -392,13 +384,13 @@ export default function (ctx: FtrProviderContext) { // Navigate home before attempting to login or we may get redirected to // Discover with a forbidden error, which hides the chrome and causes - // PageObjects.security.login to fail when checking for the logout button - await PageObjects.common.navigateToUrl('home', '', { + // security.login to fail when checking for the logout button + await common.navigateToUrl('home', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.security.login( + await security.login( 'no_discover_privileges_user', 'no_discover_privileges_user-password', { @@ -408,17 +400,17 @@ export default function (ctx: FtrProviderContext) { }); after(async () => { - await security.role.delete('no_discover_privileges_role'); - await security.user.delete('no_discover_privileges_user'); + await securityService.role.delete('no_discover_privileges_role'); + await securityService.user.delete('no_discover_privileges_user'); }); it('shows 403', async () => { - await PageObjects.common.navigateToUrl('discover', '', { + await common.navigateToUrl('discover', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); await retry.try(async () => { - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); }); }); @@ -441,7 +433,7 @@ export default function (ctx: FtrProviderContext) { { override: true } ); - await security.role.create('discover_only_data_views_role', { + await securityService.role.create('discover_only_data_views_role', { elasticsearch: { indices: [ { names: ['alias-logstash-discover'], privileges: ['read', 'view_index_metadata'] }, @@ -457,13 +449,13 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create('discover_only_data_views_user', { + await securityService.user.create('discover_only_data_views_user', { password: 'discover_only_data_views_user-password', roles: ['discover_only_data_views_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'discover_only_data_views_user', 'discover_only_data_views_user-password', { @@ -471,7 +463,7 @@ export default function (ctx: FtrProviderContext) { } ); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); after(async () => { @@ -487,25 +479,25 @@ export default function (ctx: FtrProviderContext) { }) .expect(200); - await security.role.delete('discover_only_data_views_role'); - await security.user.delete('discover_only_data_views_user'); + await securityService.role.delete('discover_only_data_views_role'); + await securityService.user.delete('discover_only_data_views_user'); }); it('allows to access only via a permitted index alias', async () => { await globalNav.badgeExistsOrFail('Read only'); // can't access logstash index directly - await PageObjects.discover.selectIndexPattern('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectIndexPattern('logstash-*'); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('discoverNoResultsCheckIndices'); // but can access via a permitted alias for the logstash index - await PageObjects.discover.selectIndexPattern('alias-logstash-discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectIndexPattern('alias-logstash-discover'); + await header.waitUntilLoadingHasFinished(); await setDiscoverTimeRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('discoverNoResultsCheckIndices'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDocTableLoadingComplete(); // expand a row await dataGrid.clickRowToggle(); diff --git a/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts b/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts index af10d983521281..0c0b11616e94b6 100644 --- a/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts +++ b/x-pack/test/functional/apps/discover/feature_controls/discover_spaces.ts @@ -12,13 +12,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const config = getService('config'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects([ + const { common, error, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'error', - 'discover', 'timePicker', - 'security', - 'spaceSelector', 'unifiedFieldList', ]); const testSubjects = getService('testSubjects'); @@ -26,7 +23,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); async function setDiscoverTimeRange() { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); } describe('spaces', () => { @@ -64,7 +61,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows discover navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -72,7 +69,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows save button', async () => { - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { basePath: '/s/custom_space', }); await testSubjects.existOrFail('discoverSaveButton', { @@ -81,12 +78,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows "visualize" field button', async () => { - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { basePath: '/s/custom_space', }); await setDiscoverTimeRange(); - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectFieldListItemVisualize('bytes'); }); }); @@ -112,7 +109,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`doesn't show discover navlink`, async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -120,13 +117,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`shows 404`, async () => { - await PageObjects.common.navigateToUrl('discover', '', { + await common.navigateToUrl('discover', '', { basePath: '/s/custom_space', shouldLoginIfPrompted: false, ensureCurrentUrl: false, useActualUrl: true, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); }); @@ -151,12 +148,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('Does not show the "visualize" field button', async () => { - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { basePath: '/s/custom_space', }); await setDiscoverTimeRange(); - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectMissingFieldListItemVisualize('bytes'); }); }); @@ -177,7 +174,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows empty prompt when no data views exist', async () => { - await PageObjects.common.navigateToUrl('discover', '', { + await common.navigateToUrl('discover', '', { basePath: '/s/custom_space_no_index_patterns', ensureCurrentUrl: false, shouldUseHashForSubUrl: false, diff --git a/x-pack/test/functional/apps/discover/preserve_url.ts b/x-pack/test/functional/apps/discover/preserve_url.ts index 278f1928335ec1..f7a5623d012205 100644 --- a/x-pack/test/functional/apps/discover/preserve_url.ts +++ b/x-pack/test/functional/apps/discover/preserve_url.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'spaceSelector', 'header']); + const { common, discover, spaceSelector, header } = getPageObjects([ + 'common', + 'discover', + 'spaceSelector', + 'header', + ]); const globalNav = getService('globalNav'); const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); @@ -33,44 +38,44 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('goes back to last opened url', async function () { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.saveSearch('A Search'); - await PageObjects.common.navigateToApp('home'); - await PageObjects.header.clickDiscover(); + await common.navigateToApp('discover'); + await discover.saveSearch('A Search'); + await common.navigateToApp('home'); + await header.clickDiscover(); const activeTitle = await globalNav.getLastBreadcrumb(); expect(activeTitle).to.be('A Search'); }); it('remembers url after switching spaces', async function () { // default space - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.loadSavedSearch('A Search'); + await common.navigateToApp('discover'); + await discover.loadSavedSearch('A Search'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space - await PageObjects.header.clickDiscover(); - await PageObjects.discover.saveSearch('A Search in another space'); + await header.clickDiscover(); + await discover.saveSearch('A Search in another space'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('default'); - await PageObjects.spaceSelector.expectHomePage('default'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('default'); + await spaceSelector.expectHomePage('default'); // default space - await PageObjects.header.clickDiscover(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.clickDiscover(); + await discover.waitUntilSearchingHasFinished(); const activeTitleDefaultSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleDefaultSpace).to.be('A Search'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space - await PageObjects.header.clickDiscover(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.clickDiscover(); + await discover.waitUntilSearchingHasFinished(); const activeTitleOtherSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleOtherSpace).to.be('A Search in another space'); }); diff --git a/x-pack/test/functional/apps/discover/reporting.ts b/x-pack/test/functional/apps/discover/reporting.ts index 41882ef1307901..b86d30efe984f6 100644 --- a/x-pack/test/functional/apps/discover/reporting.ts +++ b/x-pack/test/functional/apps/discover/reporting.ts @@ -18,7 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const browser = getService('browser'); const retry = getService('retry'); - const PageObjects = getPageObjects([ + const { reporting, common, discover, timePicker, share, header } = getPageObjects([ 'reporting', 'common', 'discover', @@ -40,11 +40,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // close any open notification toasts await toasts.dismissAll(); - await PageObjects.reporting.openExportTab(); - await PageObjects.reporting.clickGenerateReportButton(); + await reporting.openExportTab(); + await reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(timeout); - const res = await PageObjects.reporting.getResponse(url ?? ''); + const url = await reporting.getReportURL(timeout); + const res = await reporting.getResponse(url ?? ''); expect(res.status).to.equal(200); expect(res.get('content-type')).to.equal('text/csv; charset=utf-8'); @@ -56,8 +56,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.emptyKibanaIndex(); await reportingAPI.initEcommerce(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('ecommerce'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('ecommerce'); }); after(async () => { @@ -66,16 +66,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('is available if new', async () => { - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); - await PageObjects.share.closeShareModal(); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); + await share.closeShareModal(); }); it('becomes available when saved', async () => { - await PageObjects.discover.saveSearch('my search - expectEnabledGenerateReportButton'); - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); - await PageObjects.share.closeShareModal(); + await discover.saveSearch('my search - expectEnabledGenerateReportButton'); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); + await share.closeShareModal(); }); }); @@ -99,21 +99,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('ecommerce'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('ecommerce'); }); it('generates a report with single timefilter', async () => { - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.timePicker.setCommonlyUsedTime('Last_24 hours'); - await PageObjects.discover.saveSearch('single-timefilter-search'); + await discover.clickNewSearchButton(); + await timePicker.setCommonlyUsedTime('Last_24 hours'); + await discover.saveSearch('single-timefilter-search'); // get shared URL value const sharedURL = await browser.getCurrentUrl(); // click 'Copy POST URL' - await PageObjects.share.clickShareTopNavButton(); - await PageObjects.reporting.openExportTab(); + await share.clickShareTopNavButton(); + await reporting.openExportTab(); const copyButton = await testSubjects.find('shareReportingCopyURL'); const reportURL = decodeURIComponent( (await copyButton.getAttribute('data-share-url')) ?? '' @@ -141,10 +141,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('generates a report from a new search with data: default', async () => { - await PageObjects.discover.clickNewSearchButton(); - await PageObjects.reporting.setTimepickerInEcommerceDataRange(); + await discover.clickNewSearchButton(); + await reporting.setTimepickerInEcommerceDataRange(); - await PageObjects.discover.saveSearch('my search - with data - expectReportCanBeCreated'); + await discover.saveSearch('my search - with data - expectReportCanBeCreated'); const res = await getReport(); expect(res.status).to.equal(200); @@ -155,8 +155,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('generates a report with no data', async () => { - await PageObjects.reporting.setTimepickerInEcommerceNoDataRange(); - await PageObjects.discover.saveSearch('my search - no data - expectReportCanBeCreated'); + await reporting.setTimepickerInEcommerceNoDataRange(); + await discover.saveSearch('my search - no data - expectReportCanBeCreated'); const res = await getReport(); expect(res.text).to.be(`\n`); @@ -165,12 +165,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('generates a large export', async () => { const fromTime = 'Apr 27, 2019 @ 23:56:51.374'; const toTime = 'Aug 23, 2019 @ 16:18:51.821'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); - await PageObjects.discover.clickNewSearchButton(); + await timePicker.setAbsoluteRange(fromTime, toTime); + await discover.clickNewSearchButton(); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('4,675'); + expect(await discover.getHitCount()).to.equal('4,675'); }); - await PageObjects.discover.saveSearch('large export'); + await discover.saveSearch('large export'); // match file length, the beginning and the end of the csv file contents const { text: csvFile } = await getReport({ timeout: 80 * 1000 }); @@ -180,12 +180,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('generate a report using ES|QL', async () => { - await PageObjects.discover.selectTextBaseLang(); + await discover.selectTextBaseLang(); const testQuery = `from ecommerce | STATS total_sales = SUM(taxful_total_price) BY day_of_week | SORT total_sales DESC`; await monacoEditor.setCodeEditorValue(testQuery); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const res = await getReport(); expect(res.status).to.equal(200); @@ -249,8 +249,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await reset(); await createDocs(); await reportingAPI.initLogs(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.loadSavedSearch('Sparse Columns'); + await common.navigateToApp('discover'); + await discover.loadSavedSearch('Sparse Columns'); }); after(async () => { @@ -261,9 +261,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { beforeEach(async () => { const fromTime = 'Jan 10, 2005 @ 00:00:00.000'; const toTime = 'Dec 23, 2006 @ 00:00:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal(TEST_DOC_COUNT.toString()); + expect(await discover.getHitCount()).to.equal(TEST_DOC_COUNT.toString()); }); }); @@ -281,13 +281,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const setupPage = async () => { const fromTime = 'Jun 22, 2019 @ 00:00:00.000'; const toTime = 'Jun 26, 2019 @ 23:30:00.000'; - await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime); + await timePicker.setAbsoluteRange(fromTime, toTime); }; before(async () => { await reportingAPI.initEcommerce(); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('ecommerce'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('ecommerce'); }); after(async () => { @@ -299,13 +299,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); afterEach(async () => { - await PageObjects.reporting.checkForReportingToasts(); + await reporting.checkForReportingToasts(); }); it('generates a report with data', async () => { - await PageObjects.discover.loadSavedSearch('Ecommerce Data'); + await discover.loadSavedSearch('Ecommerce Data'); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('740'); + expect(await discover.getHitCount()).to.equal('740'); }); const { text: csvFile } = await getReport(); @@ -313,15 +313,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('generates a report with filtered data', async () => { - await PageObjects.discover.loadSavedSearch('Ecommerce Data'); + await discover.loadSavedSearch('Ecommerce Data'); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('740'); + expect(await discover.getHitCount()).to.equal('740'); }); // filter await filterBar.addFilter({ field: 'category', operation: 'is', value: `Men's Shoes` }); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('154'); + expect(await discover.getHitCount()).to.equal('154'); }); const { text: csvFile } = await getReport(); @@ -329,10 +329,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('generates a report with discover:searchFieldsFromSource = true', async () => { - await PageObjects.discover.loadSavedSearch('Ecommerce Data'); + await discover.loadSavedSearch('Ecommerce Data'); await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('740'); + expect(await discover.getHitCount()).to.equal('740'); }); await setFieldsFromSource(true); diff --git a/x-pack/test/functional/apps/discover/saved_queries.ts b/x-pack/test/functional/apps/discover/saved_queries.ts index 3daf70e3f560cc..5f7df1348e6e2d 100644 --- a/x-pack/test/functional/apps/discover/saved_queries.ts +++ b/x-pack/test/functional/apps/discover/saved_queries.ts @@ -12,9 +12,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const spaces = getService('spaces'); - const PageObjects = getPageObjects([ + const { common, settings, shareSavedObjectsToSpace } = getPageObjects([ 'common', - 'discover', 'settings', 'shareSavedObjectsToSpace', ]); @@ -48,7 +47,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Manage saved queries', () => { it('delete saved query shared in multiple spaces', async () => { // Navigate to Discover & create a saved query - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await queryBar.setQuery('response:200'); await queryBar.submitQuery(); await savedQueryManagementComponent.saveNewQuery(savedQueryName, '', true, false); @@ -56,16 +55,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await savedQueryManagementComponent.closeSavedQueryManagementComponent(); // Navigate to settings & share the saved query between multiple spaces - await PageObjects.common.navigateToApp('settings'); - await PageObjects.settings.clickKibanaSavedObjects(); - await PageObjects.shareSavedObjectsToSpace.openShareToSpaceFlyoutForObject(savedQueryName); - await PageObjects.shareSavedObjectsToSpace.setupForm({ + await common.navigateToApp('settings'); + await settings.clickKibanaSavedObjects(); + await shareSavedObjectsToSpace.openShareToSpaceFlyoutForObject(savedQueryName); + await shareSavedObjectsToSpace.setupForm({ destinationSpaceId, }); - await PageObjects.shareSavedObjectsToSpace.saveShare(); + await shareSavedObjectsToSpace.saveShare(); // Navigate back to Discover and delete the query - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await savedQueryManagementComponent.deleteSavedQuery(savedQueryName); // Refresh to ensure the object is actually deleted @@ -77,7 +76,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const name = `${savedQueryName}-update`; // Navigate to Discover & create a saved query - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await queryBar.setQuery('response:200'); await queryBar.submitQuery(); await savedQueryManagementComponent.saveNewQuery(name, '', true, false); @@ -90,7 +89,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await savedQueryManagementComponent.updateCurrentlyLoadedQuery('', true, false); // Navigate to Discover ensure updated query exists - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await savedQueryManagementComponent.savedQueryExistOrFail(name); await savedQueryManagementComponent.closeSavedQueryManagementComponent(); await savedQueryManagementComponent.deleteSavedQuery(name); diff --git a/x-pack/test/functional/apps/discover/saved_search_embeddable.ts b/x-pack/test/functional/apps/discover/saved_search_embeddable.ts index 3f3f58dcdaf169..ea003436282583 100644 --- a/x-pack/test/functional/apps/discover/saved_search_embeddable.ts +++ b/x-pack/test/functional/apps/discover/saved_search_embeddable.ts @@ -17,7 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']); + const { common, dashboard, header } = getPageObjects(['common', 'dashboard', 'header']); describe('discover saved search embeddable', () => { before(async () => { @@ -30,7 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ + await common.setTime({ from: 'Sep 22, 2015 @ 00:00:00.000', to: 'Sep 23, 2015 @ 00:00:00.000', }); @@ -38,29 +38,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); const addSearchEmbeddableToDashboard = async (title = 'Rendering-Test:-saved-search') => { await dashboardAddPanel.addSavedSearch(title); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const rows = await dataGrid.getDocTableRows(); expect(rows.length).to.be.above(0); }; const refreshDashboardPage = async (requireRenderComplete = false) => { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); if (requireRenderComplete) { - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); } }; @@ -90,7 +90,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ], }); await addSearchEmbeddableToDashboard(searchTitle); - await PageObjects.dashboard.saveDashboard('Dashboard with deleted saved search', { + await dashboard.saveDashboard('Dashboard with deleted saved search', { waitDialogIsClosed: true, exitFromEditMode: false, saveAsNew: true, @@ -101,9 +101,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await refreshDashboardPage(); await testSubjects.existOrFail('embeddableError'); - const panels = await PageObjects.dashboard.getDashboardPanels(); + const panels = await dashboard.getDashboardPanels(); await dashboardPanelActions.removePanel(panels[0]); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('embeddableError'); }); }); diff --git a/x-pack/test/functional/apps/discover/saved_searches.ts b/x-pack/test/functional/apps/discover/saved_searches.ts index ef4d3890d31451..3b039c8da9eee3 100644 --- a/x-pack/test/functional/apps/discover/saved_searches.ts +++ b/x-pack/test/functional/apps/discover/saved_searches.ts @@ -11,7 +11,12 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'header', 'discover', 'timePicker', 'dashboard']); + const { common, header, discover, dashboard } = getPageObjects([ + 'common', + 'header', + 'discover', + 'dashboard', + ]); const dashboardAddPanel = getService('dashboardAddPanel'); const dataGrid = getService('dataGrid'); const panelActions = getService('dashboardPanelActions'); @@ -35,7 +40,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.importExport.load(ecommerceSOPath); await kibanaServer.uiSettings.update(defaultSettings); - await PageObjects.common.setTime({ from, to }); + await common.setTime({ from, to }); }); after('clean up archives', async () => { @@ -43,13 +48,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await kibanaServer.importExport.unload(ecommerceSOPath); await kibanaServer.uiSettings.unset('doc_table:legacy'); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); describe('Customize time range', () => { it('should be possible to customize time range for saved searches on dashboards', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('Ecommerce Data'); expect(await dataGrid.getDocCount()).to.be(500); @@ -63,41 +68,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_90 days'); await dashboardCustomizePanel.clickSaveButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await dataGrid.hasNoResults()).to.be(true); }); }); it(`should unselect saved search when navigating to a 'new'`, async function () { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('ecommerce'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('ecommerce'); await filterBar.addFilter({ field: 'category', operation: 'is', value: `Men's Shoes` }); await queryBar.setQuery('customer_gender:MALE'); await queryBar.submitQuery(); - await PageObjects.discover.saveSearch('test-unselect-saved-search'); + await discover.saveSearch('test-unselect-saved-search'); expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(true); expect(await queryBar.getQueryString()).to.eql('customer_gender:MALE'); - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); expect(await testSubjects.getVisibleText('discover-dataView-switch-link')).to.be('ecommerce'); expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); - await PageObjects.discover.selectIndexPattern('ecommerce'); + await discover.selectIndexPattern('ecommerce'); expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); - await PageObjects.discover.clickNewSearchButton(); + await discover.clickNewSearchButton(); expect(await testSubjects.getVisibleText('discover-dataView-switch-link')).to.be('ecommerce'); }); }); diff --git a/x-pack/test/functional/apps/discover/value_suggestions.ts b/x-pack/test/functional/apps/discover/value_suggestions.ts index 8d0c0ac5a969ac..f949a890d90c2f 100644 --- a/x-pack/test/functional/apps/discover/value_suggestions.ts +++ b/x-pack/test/functional/apps/discover/value_suggestions.ts @@ -14,15 +14,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const filterBar = getService('filterBar'); const dataGrid = getService('dataGrid'); - const PageObjects = getPageObjects(['common', 'timePicker', 'settings', 'context']); + const { common, timePicker, settings, context } = getPageObjects([ + 'common', + 'timePicker', + 'settings', + 'context', + ]); async function setAutocompleteUseTimeRange(value: boolean) { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox( - UI_SETTINGS.AUTOCOMPLETE_USE_TIMERANGE, - value - ); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.toggleAdvancedSettingCheckbox(UI_SETTINGS.AUTOCOMPLETE_USE_TIMERANGE, value); } describe('value suggestions', function describeIndexTests() { @@ -36,12 +38,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'doc_table:legacy': false, }); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { await kibanaServer.uiSettings.unset('doc_table:legacy'); - await PageObjects.common.unsetTime(); + await common.unsetTime(); await kibanaServer.savedObjects.cleanStandardList(); }); @@ -51,7 +53,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); describe('discover', () => { @@ -60,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('dont show up if outside of range', async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Mar 1, 2020 @ 00:00:00.000', 'Nov 1, 2020 @ 00:00:00.000' ); @@ -70,13 +72,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('show up if in range', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await queryBar.setQuery('extension.raw : '); await queryBar.expectSuggestions({ count: 5, contains: '"jpg"' }); }); it('also displays descriptions for operators', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await queryBar.setQuery('extension.raw'); await queryBar.expectSuggestionsDescription({ count: 2 }); }); @@ -89,13 +91,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows all autosuggest options for a filter in discover context app', async () => { // Set a good time range - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); // navigate to context await dataGrid.clickRowToggle({ rowIndex: 0 }); const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); await rowActions[1].click(); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); // Apply filter in context view await filterBar.addFilter({ field: 'geo.dest', operation: 'is', value: 'US' }); @@ -109,7 +111,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); }); afterEach(async () => { @@ -117,13 +119,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.clearAdvancedSettings(UI_SETTINGS.AUTOCOMPLETE_USE_TIMERANGE); + await settings.navigateTo(); + await settings.clickKibanaSettings(); + await settings.clearAdvancedSettings(UI_SETTINGS.AUTOCOMPLETE_USE_TIMERANGE); }); it('DO show up if outside of range', async () => { - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Mar 1, 2020 @ 00:00:00.000', 'Nov 1, 2020 @ 00:00:00.000' ); @@ -133,7 +135,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('show up', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); await queryBar.setQuery('extension.raw : '); await queryBar.expectSuggestions({ count: 5, contains: '"jpg"' }); }); diff --git a/x-pack/test/functional/apps/discover/value_suggestions_non_timebased.ts b/x-pack/test/functional/apps/discover/value_suggestions_non_timebased.ts index 7d8f8a302b05ce..b40c74bf06e415 100644 --- a/x-pack/test/functional/apps/discover/value_suggestions_non_timebased.ts +++ b/x-pack/test/functional/apps/discover/value_suggestions_non_timebased.ts @@ -11,7 +11,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const queryBar = getService('queryBar'); - const PageObjects = getPageObjects(['common', 'settings', 'context', 'header']); + const { common } = getPageObjects(['common']); describe('value suggestions non time based', function describeIndexTests() { before(async function () { @@ -38,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('shows all autosuggest options for a filter in discover context app', async () => { - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await queryBar.setQuery('type.keyword : '); await queryBar.expectSuggestions({ count: 1, contains: '"apache"' }); }); diff --git a/x-pack/test/functional/apps/discover/visualize_field.ts b/x-pack/test/functional/apps/discover/visualize_field.ts index eca02426e06d15..1b7e3dd1eb566d 100644 --- a/x-pack/test/functional/apps/discover/visualize_field.ts +++ b/x-pack/test/functional/apps/discover/visualize_field.ts @@ -18,11 +18,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); const dataViews = getService('dataViews'); - const PageObjects = getPageObjects([ + const { common, discover, timePicker, lens, header, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', - 'unifiedSearch', 'lens', 'header', 'unifiedFieldList', @@ -36,7 +35,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }; async function setDiscoverTimeRange() { - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await timePicker.setDefaultAbsoluteRange(); } function assertMatchesExpectedData(state: DebugState) { @@ -58,7 +57,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.common.navigateToApp('discover'); + await common.navigateToApp('discover'); await setDiscoverTimeRange(); }); @@ -70,14 +69,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows "visualize" field button', async () => { - await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); - await PageObjects.unifiedFieldList.expectFieldListItemVisualize('bytes'); + await unifiedFieldList.clickFieldListItem('bytes'); + await unifiedFieldList.expectFieldListItemVisualize('bytes'); }); it('visualizes field to Lens and loads fields to the dimesion editor', async () => { - await PageObjects.unifiedFieldList.findFieldByName('bytes'); - await PageObjects.unifiedFieldList.clickFieldListItemVisualize('bytes'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.findFieldByName('bytes'); + await unifiedFieldList.clickFieldListItemVisualize('bytes'); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); expect(dimensions).to.have.length(2); @@ -91,9 +90,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { operation: 'is between', value: { from: '3500', to: '4000' }, }); - await PageObjects.unifiedFieldList.findFieldByName('geo.src'); - await PageObjects.unifiedFieldList.clickFieldListItemVisualize('geo.src'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.findFieldByName('geo.src'); + await unifiedFieldList.clickFieldListItemVisualize('geo.src'); + await header.waitUntilLoadingHasFinished(); expect(await filterBar.hasFilter('bytes', '3,500 to 4,000')).to.be(true); }); @@ -101,18 +100,18 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should preserve query in lens', async () => { await queryBar.setQuery('machine.os : ios'); await queryBar.submitQuery(); - await PageObjects.unifiedFieldList.findFieldByName('geo.dest'); - await PageObjects.unifiedFieldList.clickFieldListItemVisualize('geo.dest'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedFieldList.findFieldByName('geo.dest'); + await unifiedFieldList.clickFieldListItemVisualize('geo.dest'); + await header.waitUntilLoadingHasFinished(); expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); }); it('should visualize correctly using breakdown field', async () => { - await PageObjects.discover.chooseBreakdownField('extension.raw'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.chooseBreakdownField('extension.raw'); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramEditVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.try(async () => { const breakdownLabel = await testSubjects.find( 'lnsDragDrop_domDraggable_Top 3 values of extension.raw' @@ -137,62 +136,62 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); await testSubjects.click('unifiedHistogramEditVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dataViews.waitForSwitcherToBe('logst*'); }); it('should visualize correctly ES|QL queries in Discover', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await testSubjects.exists('unifiedHistogramChart')).to.be(true); expect(await testSubjects.exists('xyVisChart')).to.be(true); - await PageObjects.discover.chooseLensSuggestion('pie'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.chooseLensSuggestion('pie'); + await header.waitUntilLoadingHasFinished(); expect(await testSubjects.exists('partitionVisChart')).to.be(true); }); it('should allow changing dimensions', async () => { await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); expect(await testSubjects.exists('xyVisChart')).to.be(true); - expect(await PageObjects.lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.configureTextBasedLanguagesDimension({ + expect(await lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); + await lens.removeDimension('lnsXY_xDimensionPanel'); + await header.waitUntilLoadingHasFinished(); + await lens.configureTextBasedLanguagesDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', field: 'extension', }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.lens.getCurrentChartDebugStateForVizType('xyVisChart'); + await header.waitUntilLoadingHasFinished(); + const data = await lens.getCurrentChartDebugStateForVizType('xyVisChart'); assertMatchesExpectedData(data!); }); it('should visualize correctly ES|QL queries in Lens', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('lens flyout', async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger-textBased'); @@ -201,16 +200,16 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should visualize correctly ES|QL queries based on index patterns', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('lens flyout', async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger-textBased'); @@ -219,70 +218,70 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should save and edit chart in the dashboard on the fly', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramSaveVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.lens.saveModal('TextBasedChart', false, false, false, 'new'); + await lens.saveModal('TextBasedChart', false, false, false, 'new'); await testSubjects.existOrFail('embeddablePanelHeading-TextBasedChart'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardPanelActions.clickInlineEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.configureTextBasedLanguagesDimension({ + await header.waitUntilLoadingHasFinished(); + expect(await lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); + await lens.removeDimension('lnsXY_xDimensionPanel'); + await header.waitUntilLoadingHasFinished(); + await lens.configureTextBasedLanguagesDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', field: 'extension', }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.lens.getCurrentChartDebugStateForVizType('xyVisChart'); + await header.waitUntilLoadingHasFinished(); + const data = await lens.getCurrentChartDebugStateForVizType('xyVisChart'); assertMatchesExpectedData(data!); }); it('should allow editing the query in the dashboard', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // save the visualization await testSubjects.click('unifiedHistogramSaveVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.saveModal('TextBasedChart1', false, false, false, 'new'); + await header.waitUntilLoadingHasFinished(); + await lens.saveModal('TextBasedChart1', false, false, false, 'new'); await testSubjects.existOrFail('embeddablePanelHeading-TextBasedChart1'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // open the inline editing flyout await dashboardPanelActions.clickInlineEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // change the query await monacoEditor.setCodeEditorValue('from logstash-* | stats maxB = max(bytes)'); await testSubjects.click('TextBasedLangEditor-run-query-button'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - expect((await PageObjects.lens.getMetricVisualizationData()).length).to.be.equal(1); + expect((await lens.getMetricVisualizationData()).length).to.be.equal(1); // change the query to display a datatabler await monacoEditor.setCodeEditorValue('from logstash-* | limit 10'); await testSubjects.click('TextBasedLangEditor-run-query-button'); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); expect(await testSubjects.exists('lnsDataTable')).to.be(true); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.configureTextBasedLanguagesDimension({ + await lens.configureTextBasedLanguagesDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', field: 'bytes', keepOpen: true, @@ -295,21 +294,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should default title when saving chart in Discover (even when modal is closed and reopened)', async () => { - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await monacoEditor.setCodeEditorValue( 'from logstash-* | stats averageB = avg(bytes) by extension' ); await testSubjects.click('querySubmitButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramSaveVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); let title = await testSubjects.getAttribute('savedObjectTitle', 'value'); expect(title).to.equal('Bar vertical stacked'); await testSubjects.click('saveCancelButton'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('unifiedHistogramSaveVisualization'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); title = await testSubjects.getAttribute('savedObjectTitle', 'value'); expect(title).to.equal('Bar vertical stacked'); }); diff --git a/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts b/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts index ca1060c2249e96..1f2c2643fb8d1f 100644 --- a/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts +++ b/x-pack/test/functional/apps/graph/feature_controls/graph_security.ts @@ -10,8 +10,13 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); - const security = getService('security'); - const PageObjects = getPageObjects(['common', 'graph', 'security', 'error', 'header']); + const securityService = getService('security'); + const { common, security, error, header } = getPageObjects([ + 'common', + 'security', + 'error', + 'header', + ]); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); const globalNav = getService('globalNav'); @@ -20,18 +25,18 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); describe('global graph all privileges', () => { before(async () => { - await security.role.create('global_graph_all_role', { + await securityService.role.create('global_graph_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -45,24 +50,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_graph_all_user', { + await securityService.user.create('global_graph_all_user', { password: 'global_graph_all_user-password', roles: ['global_graph_all_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_graph_all_user', - 'global_graph_all_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_graph_all_user', 'global_graph_all_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_graph_all_role'); - await security.user.delete('global_graph_all_user'); + await securityService.role.delete('global_graph_all_role'); + await securityService.user.delete('global_graph_all_user'); }); it('shows graph navlink', async () => { @@ -71,8 +72,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('landing page shows "Create new graph" button', async () => { - await PageObjects.common.navigateToApp('graph'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('graph'); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('graphLandingPage', { timeout: 10000 }); await testSubjects.existOrFail('graphCreateGraphPromptButton'); }); @@ -82,8 +83,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('allows creating a new workspace', async () => { - await PageObjects.common.navigateToApp('graph'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('graph'); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('graphCreateGraphPromptButton'); const breadcrumb = await testSubjects.find('~graphCurrentGraphBreadcrumb'); expect(await breadcrumb.getVisibleText()).to.equal('Unsaved graph'); @@ -96,7 +97,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global graph read-only privileges', () => { before(async () => { - await security.role.create('global_graph_read_role', { + await securityService.role.create('global_graph_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -110,24 +111,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_graph_read_user', { + await securityService.user.create('global_graph_read_user', { password: 'global_graph_read_user-password', roles: ['global_graph_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_graph_read_user', - 'global_graph_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_graph_read_user', 'global_graph_read_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('global_graph_read_role'); - await security.user.delete('global_graph_read_user'); + await securityService.role.delete('global_graph_read_role'); + await securityService.user.delete('global_graph_read_user'); }); it('shows graph navlink', async () => { @@ -136,8 +133,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('does not show a "Create new Workspace" button', async () => { - await PageObjects.common.navigateToApp('graph'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('graph'); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('graphLandingPage', { timeout: 10000 }); await testSubjects.missingOrFail('newItemButton'); }); @@ -149,7 +146,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('no graph privileges', () => { before(async () => { - await security.role.create('no_graph_privileges_role', { + await securityService.role.create('no_graph_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -163,24 +160,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_graph_privileges_user', { + await securityService.user.create('no_graph_privileges_user', { password: 'no_graph_privileges_user-password', roles: ['no_graph_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'no_graph_privileges_user', - 'no_graph_privileges_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('no_graph_privileges_user', 'no_graph_privileges_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('no_graph_privileges_role'); - await security.user.delete('no_graph_privileges_user'); + await securityService.role.delete('no_graph_privileges_role'); + await securityService.user.delete('no_graph_privileges_user'); }); it(`doesn't show graph navlink`, async () => { @@ -189,12 +182,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`navigating to app displays a 403`, async () => { - await PageObjects.common.navigateToUrl('graph', '', { + await common.navigateToUrl('graph', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); }); }); diff --git a/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts b/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts index af03a827a43e80..68be7e653b8727 100644 --- a/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts +++ b/x-pack/test/functional/apps/graph/feature_controls/graph_spaces.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'graph', 'security', 'error', 'header']); + const { common, header, error } = getPageObjects(['common', 'error', 'header']); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); @@ -33,28 +33,28 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows graph navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); expect(navLinks).to.contain('Graph'); }); it('landing page shows "Create new graph" button', async () => { - await PageObjects.common.navigateToApp('graph', { + await common.navigateToApp('graph', { basePath: '/s/custom_space', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('graphLandingPage', { timeout: 10000 }); await testSubjects.existOrFail('graphCreateGraphPromptButton'); }); it('allows creating a new graph', async () => { - await PageObjects.common.navigateToApp('graph', { + await common.navigateToApp('graph', { basePath: '/s/custom_space', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('graphCreateGraphPromptButton'); const breadcrumb = await testSubjects.find('~graphCurrentGraphBreadcrumb'); expect(await breadcrumb.getVisibleText()).to.equal('Unsaved graph'); @@ -75,21 +75,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`doesn't show graph navlink`, async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); expect(navLinks).not.to.contain('Graph'); }); it(`navigating to app shows 404`, async () => { - await PageObjects.common.navigateToUrl('graph', '', { + await common.navigateToUrl('graph', '', { basePath: '/s/custom_space', shouldLoginIfPrompted: false, ensureCurrentUrl: false, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); }); }); diff --git a/x-pack/test/functional/apps/graph/graph.ts b/x-pack/test/functional/apps/graph/graph.ts index b3ee5282370021..32684342b22015 100644 --- a/x-pack/test/functional/apps/graph/graph.ts +++ b/x-pack/test/functional/apps/graph/graph.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['settings', 'common', 'graph', 'header']); + const { settings, common, graph, header } = getPageObjects([ + 'settings', + 'common', + 'graph', + 'header', + ]); const kibanaServer = getService('kibanaServer'); const log = getService('log'); const esArchiver = getService('esArchiver'); @@ -21,13 +26,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('load graph/secrepo data'); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/graph/secrepo'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.navigateToApp('settings'); + await common.navigateToApp('settings'); log.debug('create secrepo index pattern'); - await PageObjects.settings.createIndexPattern('secrepo', '@timestamp'); + await settings.createIndexPattern('secrepo', '@timestamp'); log.debug('navigateTo graph'); - await PageObjects.common.navigateToApp('graph'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.graph.createWorkspace(); + await common.navigateToApp('graph'); + await header.waitUntilLoadingHasFinished(); + await graph.createWorkspace(); }); after(async () => { @@ -80,16 +85,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { async function buildGraph() { // select fields url.parts, url, params and src - await PageObjects.graph.addFields(['url.parts', 'url', 'params', 'src']); - await PageObjects.graph.query('admin'); - await PageObjects.common.sleep(8000); + await graph.addFields(['url.parts', 'url', 'params', 'src']); + await graph.query('admin'); + await common.sleep(8000); } it('should show correct node labels', async function () { - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.graph.selectIndexPattern('secrepo'); + await header.waitUntilLoadingHasFinished(); + await graph.selectIndexPattern('secrepo'); await buildGraph(); - const { nodes } = await PageObjects.graph.getGraphObjects(); + const { nodes } = await graph.getGraphObjects(); const circlesText = nodes.map(({ label }) => label); expect(circlesText.length).to.equal(expectedNodes.length); const unexpectedCircleTexts = circlesText.filter((t) => !expectedNodes.includes(t)); @@ -103,7 +108,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedConnectionCount = Object.values(expectedConnections) .map((connections) => Object.values(connections).length) .reduce((acc, n) => acc + n, 0); - const { edges } = await PageObjects.graph.getGraphObjects(); + const { edges } = await graph.getGraphObjects(); expect(edges.length).to.be(expectedConnectionCount); edges.forEach((edge) => { const from = edge.sourceNode.label!; @@ -113,14 +118,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should save Graph workspace', async function () { - const graphExists = await PageObjects.graph.saveGraph(graphName); + const graphExists = await graph.saveGraph(graphName); expect(graphExists).to.eql(true); }); // open the same graph workspace again and make sure the results are the same it('should open Graph workspace', async function () { - await PageObjects.graph.openGraph(graphName); - const { nodes } = await PageObjects.graph.getGraphObjects(); + await graph.openGraph(graphName); + const { nodes } = await graph.getGraphObjects(); const circlesText = nodes.map(({ label }) => label); expect(circlesText.length).to.equal(expectedNodes.length); circlesText.forEach((circleText) => { @@ -130,9 +135,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create new Graph workspace', async function () { - await PageObjects.graph.newGraph(); - await PageObjects.graph.selectIndexPattern('secrepo'); - const { nodes, edges } = await PageObjects.graph.getGraphObjects(); + await graph.newGraph(); + await graph.selectIndexPattern('secrepo'); + const { nodes, edges } = await graph.getGraphObjects(); expect(nodes).to.be.empty(); expect(edges).to.be.empty(); }); @@ -140,31 +145,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show venn when clicking a line', async function () { await buildGraph(); - await PageObjects.graph.isolateEdge('test', '/test/wp-admin/'); + await graph.isolateEdge('test', '/test/wp-admin/'); - await PageObjects.graph.stopLayout(); - await PageObjects.common.sleep(1000); + await graph.stopLayout(); + await common.sleep(1000); await browser.execute(() => { const event = document.createEvent('SVGEvents'); event.initEvent('click', true, true); return document.getElementsByClassName('gphEdge--clickable')[0].dispatchEvent(event); }); - await PageObjects.common.sleep(1000); - await PageObjects.graph.startLayout(); + await common.sleep(1000); + await graph.startLayout(); - const vennTerm1 = await PageObjects.graph.getVennTerm1(); + const vennTerm1 = await graph.getVennTerm1(); log.debug('vennTerm1 = ' + vennTerm1); - const vennTerm2 = await PageObjects.graph.getVennTerm2(); + const vennTerm2 = await graph.getVennTerm2(); log.debug('vennTerm2 = ' + vennTerm2); - const smallVennTerm1 = await PageObjects.graph.getSmallVennTerm1(); + const smallVennTerm1 = await graph.getSmallVennTerm1(); log.debug('smallVennTerm1 = ' + smallVennTerm1); - const smallVennTerm12 = await PageObjects.graph.getSmallVennTerm12(); + const smallVennTerm12 = await graph.getSmallVennTerm12(); log.debug('smallVennTerm12 = ' + smallVennTerm12); - const smallVennTerm2 = await PageObjects.graph.getSmallVennTerm2(); + const smallVennTerm2 = await graph.getSmallVennTerm2(); log.debug('smallVennTerm2 = ' + smallVennTerm2); expect(vennTerm1).to.be('/test/wp-admin/'); @@ -175,10 +180,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should delete graph', async function () { - await PageObjects.graph.goToListingPage(); - expect(await PageObjects.graph.getWorkspaceCount()).to.equal(1); - await PageObjects.graph.deleteGraph(graphName); - expect(await PageObjects.graph.getWorkspaceCount()).to.equal(0); + await graph.goToListingPage(); + expect(await graph.getWorkspaceCount()).to.equal(1); + await graph.deleteGraph(graphName); + expect(await graph.getWorkspaceCount()).to.equal(0); }); }); } diff --git a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts index 685d01d0ec6f11..38f66db31dc92b 100644 --- a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts +++ b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts @@ -10,18 +10,16 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ - 'visualize', - 'lens', - 'header', - 'unifiedSearch', - 'dashboard', - 'timeToVisualize', - 'common', - 'discover', - 'unifiedFieldList', - 'share', - ]); + const { visualize, lens, header, dashboard, timeToVisualize, discover, unifiedFieldList } = + getPageObjects([ + 'visualize', + 'lens', + 'header', + 'dashboard', + 'timeToVisualize', + 'discover', + 'unifiedFieldList', + ]); const elasticChart = getService('elasticChart'); const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); @@ -48,8 +46,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } async function setupAdHocDataView() { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); await dataViews.createFromSearchBar({ name: '*stash*', adHoc: true }); await dataViews.waitForSwitcherToBe('*stash*'); @@ -62,7 +60,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [, discoverHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const actualIndexPattern = await ( await testSubjects.find('discover-dataView-switch-link') @@ -75,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const waitForPageReady = async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('page ready after refresh', async () => { const queryBarVisible = await testSubjects.exists('globalQueryBar'); return queryBarVisible; @@ -85,123 +83,121 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens ad hoc data view tests', () => { it('should allow building a chart based on ad hoc data view', async () => { await setupAdHocDataView(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); assertMatchesExpectedData(data!); - await PageObjects.lens.removeLayer(); + await lens.removeLayer(); }); it('should allow adding and using a field', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.switchToVisualization('lnsDatatable'); await retry.try(async () => { await dataViews.clickAddFieldFromSearchBar(); await fieldEditor.setName('runtimefield'); await fieldEditor.enableValue(); await fieldEditor.typeScript("emit('abc')"); await fieldEditor.save(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForField('runtimefield'); - await PageObjects.lens.dragFieldToWorkspace('runtimefield'); + await header.waitUntilLoadingHasFinished(); + await lens.searchField('runtime'); + await lens.waitForField('runtimefield'); + await lens.dragFieldToWorkspace('runtimefield'); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal( - 'Top 5 values of runtimefield' - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('abc'); - await PageObjects.lens.removeLayer(); + await lens.waitForVisualization(); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 5 values of runtimefield'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('abc'); + await lens.removeLayer(); }); it('should allow switching to another data view and back', async () => { await dataViews.switchTo('logstash-*'); - await PageObjects.lens.waitForFieldMissing('runtimefield'); + await lens.waitForFieldMissing('runtimefield'); await dataViews.switchTo('*stash*'); - await PageObjects.lens.waitForField('runtimefield'); + await lens.waitForField('runtimefield'); }); it('should allow removing a field', async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.removeField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.removeField('runtimefield'); await fieldEditor.confirmDelete(); - await PageObjects.lens.waitForFieldMissing('runtimefield'); + await lens.waitForFieldMissing('runtimefield'); }); it('should allow adding an ad-hoc chart to a dashboard', async () => { - await PageObjects.lens.switchToVisualization('lnsMetric'); + await lens.switchToVisualization('lnsMetric'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_primaryMetricDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('mtrVis'); - const metricData = await PageObjects.lens.getMetricVisualizationData(); + await lens.waitForVisualization('mtrVis'); + const metricData = await lens.getMetricVisualizationData(); expect(metricData[0].value).to.eql('5,727.322'); expect(metricData[0].title).to.eql('Average of bytes'); - await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + await lens.save('New Lens from Modal', false, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); expect(metricData[0].value).to.eql('5,727.322'); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow saving the ad-hoc chart into a saved object', async () => { await setupAdHocDataView(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsMetric'); + await lens.switchToVisualization('lnsMetric'); - await PageObjects.lens.waitForVisualization('mtrVis'); - await PageObjects.lens.save('Lens with adhoc data view'); - await PageObjects.lens.waitForVisualization('mtrVis'); - const metricData = await PageObjects.lens.getMetricVisualizationData(); + await lens.waitForVisualization('mtrVis'); + await lens.save('Lens with adhoc data view'); + await lens.waitForVisualization('mtrVis'); + const metricData = await lens.getMetricVisualizationData(); expect(metricData[0].value).to.eql('5,727.322'); expect(metricData[0].title).to.eql('Average of bytes'); }); it('should be possible to share a URL of a visualization with adhoc dataViews', async () => { - const url = await PageObjects.lens.getUrl(); + const url = await lens.getUrl(); await browser.openNewTab(); const [lensWindowHandler] = await browser.getAllWindowHandles(); await browser.navigateTo(url); // check that it's the same configuration in the new URL when ready - await PageObjects.header.waitUntilLoadingHasFinished(); - expect( - await PageObjects.lens.getDimensionTriggerText('lnsMetric_primaryMetricDimensionPanel') - ).to.eql('Average of bytes'); + await header.waitUntilLoadingHasFinished(); + expect(await lens.getDimensionTriggerText('lnsMetric_primaryMetricDimensionPanel')).to.eql( + 'Average of bytes' + ); await browser.closeCurrentWindow(); await browser.switchToWindow(lensWindowHandler); }); it('should be possible to download a visualization with adhoc dataViews', async () => { - await PageObjects.lens.setCSVDownloadDebugFlag(true); - await PageObjects.lens.openCSVDownloadShare(); + await lens.setCSVDownloadDebugFlag(true); + await lens.openCSVDownloadShare(); - const csv = await PageObjects.lens.getCSVContent(); + const csv = await lens.getCSVContent(); expect(csv).to.be.ok(); expect(Object.keys(csv!)).to.have.length(1); - await PageObjects.lens.setCSVDownloadDebugFlag(false); + await lens.setCSVDownloadDebugFlag(false); }); it('should navigate to discover correctly', async () => { @@ -209,7 +205,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const actualIndexPattern = await ( await testSubjects.find('discover-dataView-switch-link') @@ -219,14 +215,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const actualDiscoverQueryHits = await testSubjects.getVisibleText('discoverQueryHits'); expect(actualDiscoverQueryHits).to.be('14,005'); - const prevDataViewId = await PageObjects.discover.getCurrentDataViewId(); + const prevDataViewId = await discover.getCurrentDataViewId(); - await PageObjects.discover.addRuntimeField( - '_bytes-runtimefield', - `emit(doc["bytes"].value.toString())` - ); - await PageObjects.unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); - const newDataViewId = await PageObjects.discover.getCurrentDataViewId(); + await discover.addRuntimeField('_bytes-runtimefield', `emit(doc["bytes"].value.toString())`); + await unifiedFieldList.clickFieldListItemToggle('_bytes-runtimefield'); + const newDataViewId = await discover.getCurrentDataViewId(); expect(newDataViewId).not.to.equal(prevDataViewId); expect(await dataViews.isAdHoc()).to.be(true); @@ -237,30 +230,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should navigate to discover from embeddable correctly', async () => { const [lensHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(lensHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await setupAdHocDataView(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.save( - 'embeddable-test-with-adhoc-data-view', - false, - false, - false, - 'new' - ); + await lens.save('embeddable-test-with-adhoc-data-view', false, false, false, 'new'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await checkDiscoverNavigationResult(); await browser.closeCurrentWindow(); const [daashboardHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(daashboardHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // adhoc data view should be persisted after refresh await browser.refresh(); diff --git a/x-pack/test/functional/apps/lens/group1/index.ts b/x-pack/test/functional/apps/lens/group1/index.ts index 1f02923816c644..fa95e898e8e90a 100644 --- a/x-pack/test/functional/apps/lens/group1/index.ts +++ b/x-pack/test/functional/apps/lens/group1/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -54,7 +54,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -65,7 +65,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esNode.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts b/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts index 75d3d7ca6caf1c..84bf66c26191d5 100644 --- a/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts +++ b/x-pack/test/functional/apps/lens/group1/multiple_data_views.ts @@ -10,7 +10,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'lens']); + const { common, visualize, lens } = getPageObjects(['common', 'visualize', 'lens']); const filterBar = getService('filterBar'); const elasticChart = getService('elasticChart'); const testSubjects = getService('testSubjects'); @@ -49,7 +49,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const visTitle = 'xyChart with multiple data views'; before(async () => { - await PageObjects.common.setTime({ + await common.setTime({ from: 'Oct 23, 2018 @ 07:00:00.000', to: 'Oct 23, 2018 @ 08:00:00.000', }); @@ -65,7 +65,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/long_window_logstash_index_pattern' ); - await PageObjects.common.navigateToApp('lens'); + await common.navigateToApp('lens'); }); after(async () => { @@ -84,32 +84,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await elasticChart.setNewChartUiDebugFlag(true); // Logstash layer - await PageObjects.lens.switchDataPanelIndexPattern('long-window-logstash-*'); + await lens.switchDataPanelIndexPattern('long-window-logstash-*'); await testSubjects.click('fieldToggle-bytes'); // Flights layer - await PageObjects.lens.switchDataPanelIndexPattern('kibana_sample_data_flights'); - await PageObjects.lens.createLayer('data'); + await lens.switchDataPanelIndexPattern('kibana_sample_data_flights'); + await lens.createLayer('data'); await testSubjects.click('fieldToggle-DistanceKilometers'); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData]); }); it('ignores global filters on layers using a data view without the filter field', async () => { await filterBar.addFilter({ field: 'Carrier', operation: 'exists' }); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); assertMatchesExpectedData(data, [expectedLogstashData, expectedFlightsData]); - await PageObjects.lens.save(visTitle); + await lens.save(visTitle); }); it('applies global filters on layers using data view a without the filter field', async () => { await kibanaServer.uiSettings.update({ 'courier:ignoreFilterIfFieldNotInIndex': false }); - await PageObjects.common.navigateToApp('visualize'); + await common.navigateToApp('visualize'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.visualize.openSavedVisualization(visTitle); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await visualize.openSavedVisualization(visTitle); + const data = await lens.getCurrentChartDebugState('xyVisChart'); assertMatchesExpectedData(data, [expectedFlightsData]); }); }); diff --git a/x-pack/test/functional/apps/lens/group1/smokescreen.ts b/x-pack/test/functional/apps/lens/group1/smokescreen.ts index bf02959b08b8fd..dbe48cdd395da0 100644 --- a/x-pack/test/functional/apps/lens/group1/smokescreen.ts +++ b/x-pack/test/functional/apps/lens/group1/smokescreen.ts @@ -10,7 +10,7 @@ import { range } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const find = getService('find'); const listingTable = getService('listingTable'); const testSubjects = getService('testSubjects'); @@ -21,49 +21,49 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens smokescreen tests', () => { it('should allow creation of lens xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: '@message.raw', }); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.removeDimension('lnsDatatable_rows'); - await PageObjects.lens.switchToVisualization('area'); + await lens.switchToVisualization('lnsDatatable'); + await lens.removeDimension('lnsDatatable_rows'); + await lens.switchToVisualization('area'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.save('Afancilenstest'); + await lens.save('Afancilenstest'); // Ensure the visualization shows up in the visualize list, and takes // us back to the visualization as we configured it. - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Afancilenstest'); - await PageObjects.lens.clickVisualizeListItemTitle('Afancilenstest'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.clickVisualizeListItemTitle('Afancilenstest'); + await lens.goToTimeRange(); + await lens.waitForVisualization('xyVisChart'); - expect(await PageObjects.lens.getTitle()).to.eql('Afancilenstest'); + expect(await lens.getTitle()).to.eql('Afancilenstest'); // .echLegendItem__title is the only viable way of getting the xy chart's // legend item(s), so we're using a class selector here. @@ -72,487 +72,476 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create an xy visualization with filters aggregation', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); // Change the IP field to filters - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', operation: 'filters', keepOpen: true, }); - await PageObjects.lens.addFilterToAgg(`geo.src : CN`); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.addFilterToAgg(`geo.src : CN`); + await lens.waitForVisualization('xyVisChart'); // Verify that the field was persisted from the transition - expect(await PageObjects.lens.getFiltersAggLabels()).to.eql([`"ip" : *`, `geo.src : CN`]); + expect(await lens.getFiltersAggLabels()).to.eql([`"ip" : *`, `geo.src : CN`]); expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); }); it('should transition from metric to table to metric', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Artistpreviouslyknownaslens'); - await PageObjects.lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('Maximum of bytes'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('19,986'); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); + await lens.goToTimeRange(); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await lens.switchToVisualization('lnsDatatable'); + expect(await lens.getDatatableHeaderText()).to.eql('Maximum of bytes'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('19,986'); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); }); it('should transition from a multi-layer stacked bar to a multi-layer line chart and correctly remove all layers', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer(); + await lens.createLayer(); - expect(await PageObjects.lens.hasChartSwitchWarning('line')).to.eql(false); + expect(await lens.hasChartSwitchWarning('line')).to.eql(false); - await PageObjects.lens.switchToVisualization('line'); + await lens.switchToVisualization('line'); - expect(await PageObjects.lens.getLayerType(0)).to.eql('Line'); + expect(await lens.getLayerType(0)).to.eql('Line'); // expect first layer to be line, second layer to be bar chart - expect(await PageObjects.lens.getLayerType(1)).to.eql('Bar'); - await PageObjects.lens.configureDimension({ + expect(await lens.getLayerType(1)).to.eql('Bar'); + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'machine.ram', }); - expect(await PageObjects.lens.getLayerCount()).to.eql(2); - await PageObjects.lens.removeLayer(); - await PageObjects.lens.removeLayer(); + expect(await lens.getLayerCount()).to.eql(2); + await lens.removeLayer(); + await lens.removeLayer(); await testSubjects.existOrFail('workspace-drag-drop-prompt'); }); it('should transition selected layer in a multi layer bar using layer chart switch', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer('data', undefined, 'bar'); - expect(await PageObjects.lens.getLayerType(1)).to.eql('Bar'); + await lens.createLayer('data', undefined, 'bar'); + expect(await lens.getLayerType(1)).to.eql('Bar'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'machine.ram', }); // only changes one layer for compatible chart - await PageObjects.lens.switchToVisualization('line', undefined, 1); - expect(await PageObjects.lens.getLayerType(0)).to.eql('Bar'); - expect(await PageObjects.lens.getLayerType(1)).to.eql('Line'); + await lens.switchToVisualization('line', undefined, 1); + expect(await lens.getLayerType(0)).to.eql('Bar'); + expect(await lens.getLayerType(1)).to.eql('Line'); // generates new one layer chart based on selected layer - await PageObjects.lens.switchToVisualization('pie', undefined, 1); - expect(await PageObjects.lens.getLayerType(0)).to.eql('Pie'); - const sliceByText = await PageObjects.lens.getDimensionTriggerText( - 'lnsPie_sliceByDimensionPanel' - ); - const sizeByText = await PageObjects.lens.getDimensionTriggerText( - 'lnsPie_sizeByDimensionPanel' - ); + await lens.switchToVisualization('pie', undefined, 1); + expect(await lens.getLayerType(0)).to.eql('Pie'); + const sliceByText = await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel'); + const sizeByText = await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel'); expect(sliceByText).to.be('Top 5 values of geo.src'); expect(sizeByText).to.be('Average of machine.ram'); }); it('should edit settings of xy line chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.removeDimension('lnsXY_splitDimensionPanel'); - await PageObjects.lens.switchToVisualization('line'); - await PageObjects.lens.configureDimension({ + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.removeDimension('lnsXY_splitDimensionPanel'); + await lens.switchToVisualization('line'); + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'max', field: 'memory', keepOpen: true, }); - await PageObjects.lens.editDimensionLabel('Test of label'); - await PageObjects.lens.editDimensionFormat('Percent'); - await PageObjects.lens.editDimensionColor('#ff0000'); - await PageObjects.lens.openVisualOptions(); + await lens.editDimensionLabel('Test of label'); + await lens.editDimensionFormat('Percent'); + await lens.editDimensionColor('#ff0000'); + await lens.openVisualOptions(); - await PageObjects.lens.setCurvedLines('CURVE_MONOTONE_X'); - await PageObjects.lens.editMissingValues('Linear'); + await lens.setCurvedLines('CURVE_MONOTONE_X'); + await lens.editMissingValues('Linear'); - await PageObjects.lens.assertMissingValues('Linear'); + await lens.assertMissingValues('Linear'); - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); - await PageObjects.lens.assertColor('#ff0000'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.assertColor('#ff0000'); await testSubjects.existOrFail('indexPattern-dimension-formatDecimals'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - 'Test of label' - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql('Test of label'); }); it('should not show static value tab for data layers', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); // Quick functions and Formula tabs should be visible expect(await testSubjects.exists('lens-dimensionTabs-quickFunctions')).to.eql(true); expect(await testSubjects.exists('lens-dimensionTabs-formula')).to.eql(true); // Static value tab should not be visible expect(await testSubjects.exists('lens-dimensionTabs-static_value')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should be able to add very long labels and still be able to remove a dimension', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); const longLabel = 'Veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long label wrapping multiple lines'; - await PageObjects.lens.editDimensionLabel(longLabel); - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.editDimensionLabel(longLabel); + await lens.waitForVisualization('xyVisChart'); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - longLabel - ); - expect(await PageObjects.lens.canRemoveDimension('lnsXY_yDimensionPanel')).to.equal(true); - await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql(longLabel); + expect(await lens.canRemoveDimension('lnsXY_yDimensionPanel')).to.equal(true); + await lens.removeDimension('lnsXY_yDimensionPanel'); await testSubjects.missingOrFail('lnsXY_yDimensionPanel > lns-dimensionTrigger'); }); it('should allow creation of a multi-axis chart and switching multiple times', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('bar'); + await lens.goToTimeRange(); + await lens.switchToVisualization('bar'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'unique_count', field: 'bytes', keepOpen: true, }); - await PageObjects.lens.changeAxisSide('right'); - let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.changeAxisSide('right'); + let data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y.length).to.eql(2); expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(true); - await PageObjects.lens.changeAxisSide('left'); - data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.changeAxisSide('left'); + data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y.length).to.eql(1); expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(false); - await PageObjects.lens.changeAxisSide('right'); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.changeAxisSide('right'); + await lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should show value labels on bar charts when enabled', async () => { // enable value labels - await PageObjects.lens.openTextOptions(); + await lens.openTextOptions(); await testSubjects.click('lns_valueLabels_inside'); // check for value labels - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.bars?.[0].labels).not.to.eql(0); }); it('should override axis title', async () => { const axisTitle = 'overridden axis'; - await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton'); + await lens.toggleToolbarPopover('lnsLeftAxisButton'); await testSubjects.setValue('lnsyLeftAxisTitle', axisTitle, { clearWithKeyboard: true, }); - let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + let data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y?.[1].title).to.eql(axisTitle); // hide the gridlines await testSubjects.click('lnsshowyLeftAxisGridlines'); - data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y?.[1].gridlines.length).to.eql(0); }); it('should transition from a multi-layer stacked bar to treemap chart using suggestions', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer(); + await lens.createLayer(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.save('twolayerchart'); + await lens.save('twolayerchart'); await testSubjects.click('lnsSuggestion-treemap > lnsSuggestion'); - expect(await PageObjects.lens.getLayerCount()).to.eql(1); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_groupByDimensionPanel')).to.eql( + expect(await lens.getLayerCount()).to.eql(1); + expect(await lens.getDimensionTriggerText('lnsPie_groupByDimensionPanel')).to.eql( 'Top 5 values of geo.dest' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( 'Average of bytes' ); }); it('should transition from line chart to pie chart and to bar chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - expect(await PageObjects.lens.hasChartSwitchWarning('pie')).to.eql(true); - await PageObjects.lens.switchToVisualization('pie'); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + expect(await lens.hasChartSwitchWarning('pie')).to.eql(true); + await lens.switchToVisualization('pie'); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( 'Top 3 values of ip' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( 'Average of bytes' ); - expect(await PageObjects.lens.hasChartSwitchWarning('bar')).to.eql(false); - await PageObjects.lens.switchToVisualization('bar'); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.hasChartSwitchWarning('bar')).to.eql(false); + await lens.switchToVisualization('bar'); + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( 'Top 3 values of ip' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Average of bytes' ); }); it('should transition from bar chart to line chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('line'); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.switchToVisualization('line'); + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Average of bytes' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( 'Top 3 values of ip' ); }); it('should transition from pie chart to treemap chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsPieVis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsPieVis'); - await PageObjects.lens.goToTimeRange(); - expect(await PageObjects.lens.hasChartSwitchWarning('treemap')).to.eql(false); - await PageObjects.lens.switchToVisualization('treemap'); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsPie_groupByDimensionPanel') - ).to.eql(['Top 7 values of geo.dest', 'Top 3 values of geo.src']); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + await lens.clickVisualizeListItemTitle('lnsPieVis'); + await lens.goToTimeRange(); + expect(await lens.hasChartSwitchWarning('treemap')).to.eql(false); + await lens.switchToVisualization('treemap'); + expect(await lens.getDimensionTriggersTexts('lnsPie_groupByDimensionPanel')).to.eql([ + 'Top 7 values of geo.dest', + 'Top 3 values of geo.src', + ]); + expect(await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( 'Average of bytes' ); }); it('should create a pie chart and switch to datatable', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.configureDimension({ + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('pie'); + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect(await PageObjects.lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + expect(await lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); + await lens.switchToVisualization('lnsDatatable'); - expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('2015-09-20 00:00'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.eql('Average of bytes'); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('6,011.351'); + expect(await lens.getDatatableHeaderText()).to.eql('@timestamp per 3 hours'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('2015-09-20 00:00'); + expect(await lens.getDatatableHeaderText(1)).to.eql('Average of bytes'); + expect(await lens.getDatatableCellText(0, 1)).to.eql('6,011.351'); }); it('should create a heatmap chart and transition to barchart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('heatmap', 'heat'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('heatmap', 'heat'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_yDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_cellPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect(await PageObjects.lens.hasChartSwitchWarning('bar')).to.eql(false); - await PageObjects.lens.switchToVisualization('bar'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.hasChartSwitchWarning('bar')).to.eql(false); + await lens.switchToVisualization('bar'); + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Average of bytes' ); }); it('should create a valid XY chart with references', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'moving_average', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ operation: 'sum', field: 'bytes', }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'cumulative_sum', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ field: 'Records', }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); // Two Y axes that are both valid expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); }); it('should allow formatting on references', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'moving_average', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ operation: 'sum', field: 'bytes', }); - await PageObjects.lens.editDimensionFormat('Number'); - await PageObjects.lens.closeDimensionEditor(); + await lens.editDimensionFormat('Number'); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); const values = await Promise.all( - range(0, 6).map((index) => PageObjects.lens.getDatatableCellText(index, 1)) + range(0, 6).map((index) => lens.getDatatableCellText(index, 1)) ); expect(values).to.eql([ '-', @@ -572,144 +561,142 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { * 3. Being able to switch charts while in partial config */ it('should handle edge cases in reference-based operations', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'cumulative_sum', }); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + expect(await lens.getWorkspaceErrorCount()).to.eql(1); - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(2); + await lens.removeDimension('lnsXY_xDimensionPanel'); + expect(await lens.getWorkspaceErrorCount()).to.eql(2); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( '@timestamp', 'lnsXY_xDimensionPanel > lns-empty-dimension' ); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + expect(await lens.getWorkspaceErrorCount()).to.eql(1); - expect(await PageObjects.lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + expect(await lens.hasChartSwitchWarning('lnsDatatable')).to.eql(false); + await lens.switchToVisualization('lnsDatatable'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql( + expect(await lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql( 'Cumulative sum of (incomplete)' ); }); it('should keep the field selection while transitioning to every reference-based operation', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'counter_rate', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'cumulative_sum', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'differences', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'moving_average', }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Moving average of Sum of bytes' ); }); it('should not leave an incomplete column in the visualization config with field-based operation', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - undefined - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql(undefined); }); it('should revert to previous configuration and not leave an incomplete column in the visualization config with reference-based operations', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'moving_average', field: 'Records', }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Moving average of Count of records' ); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'median', isPreviousIncompatible: true, keepOpen: true, }); - expect(await PageObjects.lens.isDimensionEditorOpen()).to.eql(true); + expect(await lens.isDimensionEditorOpen()).to.eql(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Moving average of Count of records' ); }); it('should transition from unique count to last value', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'unique_count', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'last_value', field: 'bytes', isPreviousIncompatible: true, }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Last value of bytes' ); }); @@ -721,34 +708,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } else { indexPatternString = 'log*'; } - await PageObjects.lens.switchFirstLayerIndexPattern(indexPatternString); - expect(await PageObjects.lens.getFirstLayerIndexPattern()).to.equal(indexPatternString); + await lens.switchFirstLayerIndexPattern(indexPatternString); + expect(await lens.getFirstLayerIndexPattern()).to.equal(indexPatternString); }); it('should allow filtering by legend on an xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'extension.raw', }); - await PageObjects.lens.filterLegend('jpg'); + await lens.filterLegend('jpg'); const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); expect(hasExtensionFilter).to.be(true); @@ -756,30 +743,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow filtering by legend on a pie chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('pie'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('pie'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'extension.raw', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'agent.raw', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.filterLegend('jpg'); + await lens.filterLegend('jpg'); const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); expect(hasExtensionFilter).to.be(true); @@ -787,21 +774,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show visual options button group for a pie chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.switchToVisualization('pie'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.switchToVisualization('pie'); - const hasVisualOptionsButton = await PageObjects.lens.hasVisualOptionsButton(); + const hasVisualOptionsButton = await lens.hasVisualOptionsButton(); expect(hasVisualOptionsButton).to.be(true); - await PageObjects.lens.openVisualOptions(); + await lens.openVisualOptions(); await retry.try(async () => { - expect(await PageObjects.lens.hasEmptySizeRatioButtonGroup()).to.be(true); + expect(await lens.hasEmptySizeRatioButtonGroup()).to.be(true); }); }); it('should allow edit meta-data for Lens chart on listing page', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Afancilenstest'); await listingTable.inspectVisualization(); await listingTable.editVisualizationDetails({ @@ -813,10 +800,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should correctly optimize multiple percentile metrics', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); for (const percentileValue of [90, 95.5, 99.9]) { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'percentile', field: 'bytes', @@ -826,7 +813,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { const value = `${percentileValue}`; // Can not use testSubjects because data-test-subj is placed range input and number input - const percentileInput = await PageObjects.lens.getNumericFieldReady( + const percentileInput = await lens.getNumericFieldReady( 'lns-indexPattern-percentile-input' ); await percentileInput.type(value); @@ -837,10 +824,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); } - await PageObjects.lens.waitForVisualization('xyVisChart'); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(0); + await lens.waitForVisualization('xyVisChart'); + expect(await lens.getWorkspaceErrorCount()).to.eql(0); }); }); } diff --git a/x-pack/test/functional/apps/lens/group2/field_formatters.ts b/x-pack/test/functional/apps/lens/group2/field_formatters.ts index 5c52f2bd03acc7..33c2c02e7b372d 100644 --- a/x-pack/test/functional/apps/lens/group2/field_formatters.ts +++ b/x-pack/test/functional/apps/lens/group2/field_formatters.ts @@ -10,7 +10,7 @@ import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'header']); + const { visualize, lens, header } = getPageObjects(['visualize', 'lens', 'header']); const retry = getService('retry'); const fieldEditor = getService('fieldEditor'); const dataViews = getService('dataViews'); @@ -18,17 +18,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens fields formatters tests', () => { describe('keyword formatters', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); }); after(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.removeField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.removeField('runtimefield'); await fieldEditor.confirmDelete(); - await PageObjects.lens.waitForFieldMissing('runtimefield'); + await lens.waitForFieldMissing('runtimefield'); }); it('should display url formatter correctly', async () => { await retry.try(async () => { @@ -40,94 +40,90 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.setUrlFieldFormat('https://www.elastic.co?{{value}}'); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForField('runtimefield'); - await PageObjects.lens.dragFieldToWorkspace('runtimefield'); + await header.waitUntilLoadingHasFinished(); + await lens.searchField('runtime'); + await lens.waitForField('runtimefield'); + await lens.dragFieldToWorkspace('runtimefield'); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal( - 'Top 5 values of runtimefield' - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql( - 'https://www.elastic.co?CN' - ); + await lens.waitForVisualization(); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 5 values of runtimefield'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('https://www.elastic.co?CN'); }); it('should display static lookup formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.STATIC_LOOKUP); await fieldEditor.setStaticLookupFormat('CN', 'China'); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('China'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('China'); }); it('should display color formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.COLOR); await fieldEditor.setColorFormat('CN', '#ffffff', '#ff0000'); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellSpanStyle(0, 0); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellSpanStyle(0, 0); expect(styleObj['background-color']).to.be('rgb(255, 0, 0)'); expect(styleObj.color).to.be('rgb(255, 255, 255)'); }); it('should display string formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.STRING); await fieldEditor.setStringFormat('lower'); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('cn'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('cn'); }); it('should display truncate string formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.clearScript(); await fieldEditor.typeScript("emit(doc['links.raw'].value)"); await fieldEditor.setFormat(FIELD_FORMAT_IDS.TRUNCATE); await fieldEditor.setTruncateFormatLength('3'); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('dal...'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('dal...'); }); }); describe('number formatters', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); }); after(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.removeField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.removeField('runtimefield'); await fieldEditor.confirmDelete(); - await PageObjects.lens.waitForFieldMissing('runtimefield'); + await lens.waitForFieldMissing('runtimefield'); }); it('should display bytes number formatter correctly', async () => { await retry.try(async () => { @@ -139,69 +135,69 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.setFormat(FIELD_FORMAT_IDS.BYTES); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.configureDimension({ + await header.waitUntilLoadingHasFinished(); + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'average', field: 'runtimefield', }); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('5.6KB'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('5.6KB'); }); it('should display currency number formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.CURRENCY); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('$5,727.32'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('$5,727.32'); }); it('should display duration number formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.DURATION); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('2 hours'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('2 hours'); }); it('should display percentage number formatter correctly', async () => { await retry.try(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setFormat(FIELD_FORMAT_IDS.PERCENT); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('572,732.21%'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('572,732.21%'); }); }); describe('formatter order', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); }); after(async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.removeField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.removeField('runtimefield'); await fieldEditor.confirmDelete(); - await PageObjects.lens.waitForFieldMissing('runtimefield'); + await lens.waitForFieldMissing('runtimefield'); }); it('should be overridden by Lens formatter', async () => { await retry.try(async () => { @@ -213,18 +209,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.setFormat(FIELD_FORMAT_IDS.BYTES); await fieldEditor.save(); await fieldEditor.waitUntilClosed(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'average', field: 'runtimefield', keepOpen: true, }); - await PageObjects.lens.editDimensionFormat('Bits (1000)', { decimals: 3, prefix: 'blah' }); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('5.727kbitblah'); + await lens.editDimensionFormat('Bits (1000)', { decimals: 3, prefix: 'blah' }); + await lens.closeDimensionEditor(); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('5.727kbitblah'); }); }); }); diff --git a/x-pack/test/functional/apps/lens/group2/fields_list.ts b/x-pack/test/functional/apps/lens/group2/fields_list.ts index dff265f0c4a40d..b08538829b13f4 100644 --- a/x-pack/test/functional/apps/lens/group2/fields_list.ts +++ b/x-pack/test/functional/apps/lens/group2/fields_list.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'timePicker', 'header']); + const { visualize, lens, timePicker, header } = getPageObjects([ + 'visualize', + 'lens', + 'timePicker', + 'header', + ]); const find = getService('find'); const log = getService('log'); const testSubjects = getService('testSubjects'); @@ -24,8 +29,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { for (const datasourceType of ['form-based', 'ad-hoc', 'ad-hoc-no-timefield']) { describe(`${datasourceType} datasource`, () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); if (datasourceType !== 'form-based') { await dataViews.createFromSearchBar({ @@ -37,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } if (datasourceType !== 'ad-hoc-no-timefield') { - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); } await retry.try(async () => { @@ -46,7 +51,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.enableValue(); await fieldEditor.typeScript("emit('abc')"); await fieldEditor.save(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('fieldEditor'); }); }); @@ -57,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a histogram and top values popover for numeric field', async () => { - const [fieldId] = await PageObjects.lens.findFieldIdsByType('number'); + const [fieldId] = await lens.findFieldIdsByType('number'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for popover @@ -79,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a top values popover for a keyword field', async () => { - const [fieldId] = await PageObjects.lens.findFieldIdsByType('keyword'); + const [fieldId] = await lens.findFieldIdsByType('keyword'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for popover @@ -99,7 +104,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show a date histogram popover for a date field', async () => { - const [fieldId] = await PageObjects.lens.findFieldIdsByType('date'); + const [fieldId] = await lens.findFieldIdsByType('date'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for popover @@ -115,7 +120,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show examples for geo points field', async () => { - const [fieldId] = await PageObjects.lens.findFieldIdsByType('geo_point'); + const [fieldId] = await lens.findFieldIdsByType('geo_point'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for top values chart @@ -125,10 +130,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show stats for a numeric runtime field', async () => { - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForMissingField('Records'); - await PageObjects.lens.waitForField('runtime_number'); - const [fieldId] = await PageObjects.lens.findFieldIdsByType('number'); + await lens.searchField('runtime'); + await lens.waitForMissingField('Records'); + await lens.waitForField('runtime_number'); + const [fieldId] = await lens.findFieldIdsByType('number'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for popover @@ -151,9 +156,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show stats for a keyword runtime field', async () => { - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForField('runtime_string'); - const [fieldId] = await PageObjects.lens.findFieldIdsByType('keyword'); + await lens.searchField('runtime'); + await lens.waitForField('runtime_string'); + const [fieldId] = await lens.findFieldIdsByType('keyword'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); // check for popover @@ -166,12 +171,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '[data-test-subj="lnsFieldListPanelFieldContent"] .echChart' ) ).to.eql(false); - await PageObjects.lens.searchField(''); + await lens.searchField(''); }); it('should change popover content if user defines a filter that affects field values', async () => { // check the current records count for stats - const [fieldId] = await PageObjects.lens.findFieldIdsByType('keyword'); + const [fieldId] = await lens.findFieldIdsByType('keyword'); await log.debug(`Opening field stats for ${fieldId}`); await testSubjects.click(fieldId); const valuesCount = parseInt( @@ -200,7 +205,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await filterBar.removeAllFilters(); await filterBar.addFilter({ field: 'bytes', operation: 'is', value: '-1' }); // check via popup fields have no data - const [fieldId] = await PageObjects.lens.findFieldIdsByType('keyword'); + const [fieldId] = await lens.findFieldIdsByType('keyword'); await log.debug(`Opening field stats for ${fieldId}`); await retry.try(async () => { await testSubjects.click(fieldId); @@ -215,10 +220,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // remove the filter await filterBar.removeAllFilters(); // tweak the time range to 17 Sept 2015 to 18 Sept 2015 - await PageObjects.lens.goToTimeRange( - 'Sep 17, 2015 @ 06:31:44.000', - 'Sep 18, 2015 @ 06:31:44.000' - ); + await lens.goToTimeRange('Sep 17, 2015 @ 06:31:44.000', 'Sep 18, 2015 @ 06:31:44.000'); // check all fields are empty now expect( await (await testSubjects.find('lnsIndexPatternEmptyFields-count')).getVisibleText() @@ -244,9 +246,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { oldField: 10, }, }); - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await timePicker.setCommonlyUsedTime('This_week'); await dataViews.createFromSearchBar({ name: 'field-update-test', @@ -273,11 +275,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }, }); - await PageObjects.lens.waitForField('oldField'); + await lens.waitForField('oldField'); await queryBar.setQuery('oldField: 20'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.waitForField('newField'); + await header.waitUntilLoadingHasFinished(); + await lens.waitForField('newField'); }); }); }); diff --git a/x-pack/test/functional/apps/lens/group2/index.ts b/x-pack/test/functional/apps/lens/group2/index.ts index 33266513323c93..8d74dd4930b891 100644 --- a/x-pack/test/functional/apps/lens/group2/index.ts +++ b/x-pack/test/functional/apps/lens/group2/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); describe('lens app - group 2', () => { const esArchive = 'x-pack/test/functional/es_archives/logstash_functional'; @@ -37,7 +37,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext indexPatternString = localIndexPatternString; await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -48,7 +48,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esNode.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group2/layer_actions.ts b/x-pack/test/functional/apps/lens/group2/layer_actions.ts index 77d36603c02520..cc301c2dd57e55 100644 --- a/x-pack/test/functional/apps/lens/group2/layer_actions.ts +++ b/x-pack/test/functional/apps/lens/group2/layer_actions.ts @@ -9,21 +9,21 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const find = getService('find'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); describe('lens layer actions tests', () => { it('should allow creation of lens xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); // check that no sampling info is shown in the dataView picker expect(await testSubjects.exists('lnsChangeIndexPatternSamplingInfo')).to.be(false); - await PageObjects.lens.openLayerContextMenu(); + await lens.openLayerContextMenu(); // should be 3 actions available expect( @@ -37,11 +37,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // random sampling available await testSubjects.existOrFail('lns-indexPattern-random-sampling-row'); // tweak the value - await PageObjects.lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); + await lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); - expect( - await PageObjects.lens.getRangeInputValue('lns-indexPattern-random-sampling-slider') - ).to.eql( + expect(await lens.getRangeInputValue('lns-indexPattern-random-sampling-slider')).to.eql( 3 // 1% ); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); @@ -52,7 +50,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should expose the ignore global filters control for a data layer', async () => { - await PageObjects.lens.openLayerContextMenu(); + await lens.openLayerContextMenu(); expect( await testSubjects.exists('lns-layerPanel-0 > lnsChangeIndexPatternIgnoringFilters') ).to.be(false); @@ -68,25 +66,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should add an annotation layer and settings shoud be available with ignore filters', async () => { // configure a date histogram - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); // add annotation layer - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); expect( await testSubjects.exists('lns-layerPanel-1 > lnsChangeIndexPatternIgnoringFilters') ).to.be(true); - await PageObjects.lens.openLayerContextMenu(1); + await lens.openLayerContextMenu(1); await testSubjects.click('lnsLayerSettings'); // annotations settings have only ignore filters await testSubjects.click('lns-layerSettings-ignoreGlobalFilters'); @@ -98,24 +96,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add a new visualization layer and disable the sampling if max operation is chosen', async () => { - await PageObjects.lens.createLayer('data'); + await lens.createLayer('data'); - await PageObjects.lens.openLayerContextMenu(2); + await lens.openLayerContextMenu(2); // click on open layer settings await testSubjects.click('lnsLayerSettings'); // tweak the value - await PageObjects.lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); + await lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); // check the sampling is shown await testSubjects.existOrFail('lns-layerPanel-2 > lnsChangeIndexPatternSamplingInfo'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-2 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // now configure a max operation - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-2 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'max', field: 'bytes', @@ -129,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check that sampling info is hidden as disabled now the dataView picker await testSubjects.missingOrFail('lns-layerPanel-2 > lnsChangeIndexPatternSamplingInfo'); // open the layer settings and check that the slider is disabled - await PageObjects.lens.openLayerContextMenu(2); + await lens.openLayerContextMenu(2); // click on open layer settings await testSubjects.click('lnsLayerSettings'); expect( @@ -139,15 +137,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should expose sampling and ignore filters settings for reference lines layer', async () => { - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); - await PageObjects.lens.openLayerContextMenu(3); + await lens.openLayerContextMenu(3); // click on open layer settings await testSubjects.click('lnsLayerSettings'); // random sampling available await testSubjects.existOrFail('lns-indexPattern-random-sampling-row'); // tweak the value - await PageObjects.lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); + await lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); // annotations settings have only ignore filters await testSubjects.click('lns-layerSettings-ignoreGlobalFilters'); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); @@ -162,75 +160,71 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should switch to pie chart and have layer settings available', async () => { - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.openLayerContextMenu(); + await lens.switchToVisualization('pie'); + await lens.openLayerContextMenu(); // layer settings still available // open the panel await testSubjects.click('lnsLayerSettings'); // check the sampling value - expect( - await PageObjects.lens.getRangeInputValue('lns-indexPattern-random-sampling-slider') - ).to.eql( + expect(await lens.getRangeInputValue('lns-indexPattern-random-sampling-slider')).to.eql( 3 // 1% ); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); }); it('should switch to table and still have layer settings', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.openLayerContextMenu(); + await lens.switchToVisualization('lnsDatatable'); + await lens.openLayerContextMenu(); // layer settings still available // open the panel await testSubjects.click('lnsLayerSettings'); // check the sampling value - expect( - await PageObjects.lens.getRangeInputValue('lns-indexPattern-random-sampling-slider') - ).to.eql( + expect(await lens.getRangeInputValue('lns-indexPattern-random-sampling-slider')).to.eql( 3 // 1% ); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); }); it('should show visualization modifiers for layer settings when embedded in a dashboard', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); // click on open layer settings - await PageObjects.lens.openLayerContextMenu(); + await lens.openLayerContextMenu(); await testSubjects.click('lnsLayerSettings'); // tweak the value - await PageObjects.lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); + await lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 2, 'left'); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); // add another layer with a different sampling rate - await PageObjects.lens.createLayer('data'); + await lens.createLayer('data'); - await PageObjects.lens.openLayerContextMenu(1); + await lens.openLayerContextMenu(1); // click on open layer settings await testSubjects.click('lnsLayerSettings'); // tweak the value - await PageObjects.lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 3, 'left'); + await lens.dragRangeInput('lns-indexPattern-random-sampling-slider', 3, 'left'); await testSubjects.click('lns-indexPattern-dimensionContainerBack'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -238,7 +232,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // add annotation layer // by default annotations ignore global filters - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); await testSubjects.click('lns-layerPanel-2 > lnsXY_xAnnotationsPanel > lns-dimensionTrigger'); @@ -253,9 +247,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.save('sampledVisualization', false, true, false, 'new'); + await lens.save('sampledVisualization', false, true, false, 'new'); // now check for the bottom-left badge await testSubjects.existOrFail('lns-feature-badges-trigger'); diff --git a/x-pack/test/functional/apps/lens/group2/partition.ts b/x-pack/test/functional/apps/lens/group2/partition.ts index cb4894866c23f8..f828c65eab284d 100644 --- a/x-pack/test/functional/apps/lens/group2/partition.ts +++ b/x-pack/test/functional/apps/lens/group2/partition.ts @@ -9,27 +9,27 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const testSubjects = getService('testSubjects'); describe('lens partition charts', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); }); it('should be able to nest up to 3 levels for Pie charts', async () => { - await PageObjects.lens.switchToVisualization('pie'); + await lens.switchToVisualization('pie'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); for (const field of ['ip', 'extension.raw', 'geo.dest']) { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'terms', field, @@ -38,18 +38,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not expose the grouping switch in Pie', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsPie_sliceByDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsPie_sliceByDimensionPanel > lns-dimensionTrigger'); expect(await testSubjects.exists('indexPattern-nesting-switch')).to.eql(false); expect(await testSubjects.exists('indexPattern-nesting-select')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should switch to donut charts keeping all dimensions', async () => { - await PageObjects.lens.setDonutHoleSize('Large'); + await lens.setDonutHoleSize('Large'); expect( await testSubjects.exists('lnsPie_sliceByDimensionPanel > lns-empty-dimension') @@ -61,18 +59,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not expose the grouping switch in Donut', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsPie_sliceByDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsPie_sliceByDimensionPanel > lns-dimensionTrigger'); expect(await testSubjects.exists('indexPattern-nesting-switch')).to.eql(false); expect(await testSubjects.exists('indexPattern-nesting-select')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should switch to treemap chart and keep only the first 2 dimensions', async () => { - await PageObjects.lens.switchToVisualization('treemap'); + await lens.switchToVisualization('treemap'); expect( await testSubjects.exists('lnsPie_groupByDimensionPanel > lns-empty-dimension') @@ -84,18 +80,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not expose the grouping switch in Treemap', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsPie_groupByDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsPie_groupByDimensionPanel > lns-dimensionTrigger'); expect(await testSubjects.exists('indexPattern-nesting-switch')).to.eql(false); expect(await testSubjects.exists('indexPattern-nesting-select')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should switch to Mosaic chart and distribute dimensions as vertical and horizontal', async () => { - await PageObjects.lens.switchToVisualization('mosaic'); + await lens.switchToVisualization('mosaic'); expect( await testSubjects.exists('lnsPie_sliceByDimensionPanel > lns-empty-dimension') @@ -113,17 +107,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should expose the grouping switch in Mosaic', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsPie_verticalAxisDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsPie_verticalAxisDimensionPanel > lns-dimensionTrigger'); expect(await testSubjects.exists('indexPattern-nesting-switch')).to.eql(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should switch to Waffle chart', async () => { - await PageObjects.lens.switchToVisualization('waffle'); + await lens.switchToVisualization('waffle'); expect( await testSubjects.exists('lnsPie_groupByDimensionPanel > lns-empty-dimension') @@ -135,14 +127,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should expose the grouping switch in Waffle', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsPie_groupByDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsPie_groupByDimensionPanel > lns-dimensionTrigger'); expect(await testSubjects.exists('indexPattern-nesting-switch')).to.eql(false); expect(await testSubjects.exists('indexPattern-nesting-select')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); }); } diff --git a/x-pack/test/functional/apps/lens/group2/persistent_context.ts b/x-pack/test/functional/apps/lens/group2/persistent_context.ts index 5f82c0aab22a43..0d34b0f68564d3 100644 --- a/x-pack/test/functional/apps/lens/group2/persistent_context.ts +++ b/x-pack/test/functional/apps/lens/group2/persistent_context.ts @@ -9,12 +9,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { visualize, lens, header, timePicker, navigationalSearch } = getPageObjects([ 'visualize', 'lens', 'header', 'timePicker', - 'common', 'navigationalSearch', ]); const browser = getService('browser'); @@ -41,28 +40,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Navigation search', () => { describe('when opening from empty visualization to existing one', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.navigationalSearch.focus(); - await PageObjects.navigationalSearch.searchFor('type:lens lnsTableVis'); - await PageObjects.navigationalSearch.clickOnOption(0); - await PageObjects.lens.waitForWorkspaceWithVisualization(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await navigationalSearch.focus(); + await navigationalSearch.searchFor('type:lens lnsTableVis'); + await navigationalSearch.clickOnOption(0); + await lens.waitForWorkspaceWithVisualization(); }); it('filters, time and query reflect the visualization state', async () => { - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal( - '404 › Median of bytes' - ); - expect(await PageObjects.lens.getDatatableHeaderText(2)).to.equal( - '503 › Median of bytes' - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('TG'); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('9,931'); + expect(await lens.getDatatableHeaderText(1)).to.equal('404 › Median of bytes'); + expect(await lens.getDatatableHeaderText(2)).to.equal('503 › Median of bytes'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('TG'); + expect(await lens.getDatatableCellText(0, 1)).to.eql('9,931'); }); it('preserves time range', async () => { - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.eql(timePicker.defaultEndTime); // data is correct and top nav is correct }); it('loads filters', async () => { @@ -76,23 +71,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); describe('when opening from existing visualization to empty one', () => { before(async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsTableVis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsTableVis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.navigationalSearch.focus(); - await PageObjects.navigationalSearch.searchFor('type:application lens'); - await PageObjects.navigationalSearch.clickOnOption(0); - await PageObjects.lens.waitForEmptyWorkspace(); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis'); + await lens.clickVisualizeListItemTitle('lnsTableVis'); + await lens.goToTimeRange(); + await navigationalSearch.focus(); + await navigationalSearch.searchFor('type:application lens'); + await navigationalSearch.clickOnOption(0); + await lens.waitForEmptyWorkspace(); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis'); }); it('preserves time range', async () => { // fill the navigation search and select empty // see the time - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.eql(timePicker.defaultEndTime); }); it('cleans filters', async () => { const filterCount = await filterBar.getFilterCount(); @@ -103,7 +98,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(query).to.equal(''); }); it('filters, time and query reflect the visualization state', async () => { - await PageObjects.lens.assertLegacyMetric('Unique count of @timestamp', '14,181'); + await lens.assertLegacyMetric('Unique count of @timestamp', '14,181'); }); }); }); @@ -111,42 +106,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Switching in Visualize App', () => { it('when moving from existing to empty workspace, preserves time range, cleans filters and query', async () => { // go to existing vis - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsTableVis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsTableVis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsTableVis'); + await lens.goToTimeRange(); // go to empty vis - await PageObjects.lens.goToListingPageViaBreadcrumbs(); - await PageObjects.visualize.clickNewVisualization(); - await PageObjects.visualize.waitForGroupsSelectPage(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.waitForEmptyWorkspace(); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis'); + await lens.goToListingPageViaBreadcrumbs(); + await visualize.clickNewVisualization(); + await visualize.waitForGroupsSelectPage(); + await visualize.clickVisType('lens'); + await lens.waitForEmptyWorkspace(); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis'); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.eql(timePicker.defaultEndTime); const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(0); const query = await queryBar.getQueryString(); expect(query).to.equal(''); - await PageObjects.lens.assertLegacyMetric('Unique count of @timestamp', '14,181'); + await lens.assertLegacyMetric('Unique count of @timestamp', '14,181'); }); it('when moving from empty to existing workspace, preserves time range and loads filters and query', async () => { // go to existing vis - await PageObjects.lens.goToListingPageViaBreadcrumbs(); + await lens.goToListingPageViaBreadcrumbs(); await listingTable.searchForItemWithName('lnsTableVis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsTableVis'); + await lens.clickVisualizeListItemTitle('lnsTableVis'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal('404 › Median of bytes'); - expect(await PageObjects.lens.getDatatableHeaderText(2)).to.equal('503 › Median of bytes'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('TG'); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('9,931'); + expect(await lens.getDatatableHeaderText(1)).to.equal('404 › Median of bytes'); + expect(await lens.getDatatableHeaderText(2)).to.equal('503 › Median of bytes'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('TG'); + expect(await lens.getDatatableCellText(0, 1)).to.eql('9,931'); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(timePickerValues.start).to.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.eql(PageObjects.timePicker.defaultEndTime); + const timePickerValues = await timePicker.getTimeConfigAsAbsoluteTimes(); + expect(timePickerValues.start).to.eql(timePicker.defaultStartTime); + expect(timePickerValues.end).to.eql(timePicker.defaultEndTime); const filterCount = await filterBar.getFilterCount(); expect(filterCount).to.equal(1); const query = await queryBar.getQueryString(); @@ -155,32 +150,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should carry over time range and pinned filters to discover', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange( - 'Sep 6, 2015 @ 06:31:44.000', - 'Sep 18, 2025 @ 06:31:44.000' - ); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange('Sep 6, 2015 @ 06:31:44.000', 'Sep 18, 2025 @ 06:31:44.000'); await filterBar.addFilter({ field: 'ip', operation: 'is', value: '97.220.3.248' }); await filterBar.toggleFilterPinned('ip'); - await PageObjects.header.clickDiscover(); - const timeRange = await PageObjects.timePicker.getTimeConfig(); + await header.clickDiscover(); + const timeRange = await timePicker.getTimeConfig(); expect(timeRange.start).to.equal('Sep 6, 2015 @ 06:31:44.000'); expect(timeRange.end).to.equal('Sep 18, 2025 @ 06:31:44.000'); await filterBar.hasFilter('ip', '97.220.3.248', true, true); }); it('should remember time range and pinned filters from discover', async () => { - await PageObjects.lens.goToTimeRange( - 'Sep 7, 2015 @ 06:31:44.000', - 'Sep 19, 2025 @ 06:31:44.000' - ); + await lens.goToTimeRange('Sep 7, 2015 @ 06:31:44.000', 'Sep 19, 2025 @ 06:31:44.000'); await filterBar.toggleFilterEnabled('ip'); await appsMenu.clickLink('Visualize Library', { category: 'kibana' }); - await PageObjects.visualize.clickNewVisualization(); - await PageObjects.visualize.waitForGroupsSelectPage(); - await PageObjects.visualize.clickVisType('lens'); - const timeRange = await PageObjects.timePicker.getTimeConfig(); + await visualize.clickNewVisualization(); + await visualize.waitForGroupsSelectPage(); + await visualize.clickVisType('lens'); + const timeRange = await timePicker.getTimeConfig(); expect(timeRange.start).to.equal('Sep 7, 2015 @ 06:31:44.000'); expect(timeRange.end).to.equal('Sep 19, 2025 @ 06:31:44.000'); await filterBar.hasFilter('ip', '97.220.3.248', false, true); @@ -190,7 +179,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.refresh(); // Lens app can take a while to be fully functional after refresh, retry assertion await retry.try(async () => { - const timeRange = await PageObjects.timePicker.getTimeConfig(); + const timeRange = await timePicker.getTimeConfig(); expect(timeRange.start).to.equal('Sep 7, 2015 @ 06:31:44.000'); expect(timeRange.end).to.equal('Sep 19, 2025 @ 06:31:44.000'); await filterBar.hasFilter('ip', '97.220.3.248', false, true); @@ -198,7 +187,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('keeps selected index pattern after refresh', async () => { - await PageObjects.lens.switchDataPanelIndexPattern('log*'); + await lens.switchDataPanelIndexPattern('log*'); await browser.refresh(); // Lens app can take a while to be fully functional after refresh, retry assertion await dataViews.waitForSwitcherToBe('log*'); @@ -207,22 +196,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('keeps time range and pinned filters after refreshing directly after saving', async () => { // restore defaults so visualization becomes saveable await security.testUser.restoreDefaults(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.save('persistentcontext'); + await lens.save('persistentcontext'); await browser.refresh(); // Lens app can take a while to be fully functional after refresh, retry assertion await retry.try(async () => { - const timeRange = await PageObjects.timePicker.getTimeConfig(); + const timeRange = await timePicker.getTimeConfig(); expect(timeRange.start).to.equal('Sep 7, 2015 @ 06:31:44.000'); expect(timeRange.end).to.equal('Sep 19, 2025 @ 06:31:44.000'); await filterBar.hasFilter('ip', '97.220.3.248', false, true); diff --git a/x-pack/test/functional/apps/lens/group2/table.ts b/x-pack/test/functional/apps/lens/group2/table.ts index 61e8b5f25554c6..f98bb6328c3f91 100644 --- a/x-pack/test/functional/apps/lens/group2/table.ts +++ b/x-pack/test/functional/apps/lens/group2/table.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const listingTable = getService('listingTable'); const find = getService('find'); const retry = getService('retry'); @@ -17,72 +17,72 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens datatable', () => { it('should able to sort a table by a column', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); // Sort by number - await PageObjects.lens.changeTableSortingBy(2, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 2)).to.eql('17,246'); + await lens.changeTableSortingBy(2, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 2)).to.eql('17,246'); // Now sort by IP - await PageObjects.lens.changeTableSortingBy(0, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('78.83.247.30'); + await lens.changeTableSortingBy(0, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('78.83.247.30'); // Change the sorting - await PageObjects.lens.changeTableSortingBy(0, 'descending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); + await lens.changeTableSortingBy(0, 'descending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); // Remove the sorting await retry.try(async () => { - await PageObjects.lens.changeTableSortingBy(0, 'none'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.isDatatableHeaderSorted(0)).to.eql(false); + await lens.changeTableSortingBy(0, 'none'); + await lens.waitForVisualization(); + expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); }); it('should able to sort a last_value column correctly in a table', async () => { // configure last_value with a keyword field - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'last_value', field: 'geo.dest', }); - await PageObjects.lens.changeTableSortingBy(3, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 3)).to.eql('CN'); + await lens.changeTableSortingBy(3, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 3)).to.eql('CN'); - await PageObjects.lens.changeTableSortingBy(3, 'descending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 3)).to.eql('PH'); + await lens.changeTableSortingBy(3, 'descending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 3)).to.eql('PH'); // now configure a new one with an ip field - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'last_value', field: 'ip', }); - await PageObjects.lens.changeTableSortingBy(4, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 4)).to.eql('78.83.247.30'); + await lens.changeTableSortingBy(4, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 4)).to.eql('78.83.247.30'); // Change the sorting - await PageObjects.lens.changeTableSortingBy(4, 'descending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); + await lens.changeTableSortingBy(4, 'descending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); await retry.try(async () => { - await PageObjects.lens.changeTableSortingBy(4, 'none'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.isDatatableHeaderSorted(0)).to.eql(false); + await lens.changeTableSortingBy(4, 'none'); + await lens.waitForVisualization(); + expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); // clear all metrics and reconfigure the default - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.removeDimension('lnsDatatable_metrics'); - await PageObjects.lens.configureDimension({ + await lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); + await lens.removeDimension('lnsDatatable_metrics'); + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -90,10 +90,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should able to use filters cell actions in table', async () => { - const firstCellContent = await PageObjects.lens.getDatatableCellText(0, 0); + const firstCellContent = await lens.getDatatableCellText(0, 0); await retry.try(async () => { - await PageObjects.lens.clickTableCellAction(0, 0, 'lensDatatableFilterOut'); - await PageObjects.lens.waitForVisualization(); + await lens.clickTableCellAction(0, 0, 'lensDatatableFilterOut'); + await lens.waitForVisualization(); expect( await find.existsByCssSelector( `[data-test-subj*="filter-value-${firstCellContent}"][data-test-subj*="filter-negated"]` @@ -103,93 +103,87 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow to configure column visibility', async () => { - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal('Top 3 values of ip'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableHeaderText(2)).to.equal('Average of bytes'); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 3 values of ip'); + expect(await lens.getDatatableHeaderText(1)).to.equal('@timestamp per 3 hours'); + expect(await lens.getDatatableHeaderText(2)).to.equal('Average of bytes'); - await PageObjects.lens.toggleColumnVisibility('lnsDatatable_rows > lns-dimensionTrigger', 1); + await lens.toggleColumnVisibility('lnsDatatable_rows > lns-dimensionTrigger', 1); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal('Average of bytes'); + expect(await lens.getDatatableHeaderText(0)).to.equal('@timestamp per 3 hours'); + expect(await lens.getDatatableHeaderText(1)).to.equal('Average of bytes'); - await PageObjects.lens.toggleColumnVisibility('lnsDatatable_rows > lns-dimensionTrigger', 4); + await lens.toggleColumnVisibility('lnsDatatable_rows > lns-dimensionTrigger', 4); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal('Top 3 values of ip'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableHeaderText(2)).to.equal('Average of bytes'); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 3 values of ip'); + expect(await lens.getDatatableHeaderText(1)).to.equal('@timestamp per 3 hours'); + expect(await lens.getDatatableHeaderText(2)).to.equal('Average of bytes'); }); it('should allow to transpose columns', async () => { - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsDatatable_rows > lns-dimensionTrigger', to: 'lnsDatatable_columns > lns-empty-dimension', }); - // await PageObjects.common.sleep(100000); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.equal( - '169.228.188.120 › Average of bytes' - ); - expect(await PageObjects.lens.getDatatableHeaderText(2)).to.equal( - '78.83.247.30 › Average of bytes' - ); - expect(await PageObjects.lens.getDatatableHeaderText(3)).to.equal( - '226.82.228.233 › Average of bytes' - ); + // await common.sleep(100000); + expect(await lens.getDatatableHeaderText(0)).to.equal('@timestamp per 3 hours'); + expect(await lens.getDatatableHeaderText(1)).to.equal('169.228.188.120 › Average of bytes'); + expect(await lens.getDatatableHeaderText(2)).to.equal('78.83.247.30 › Average of bytes'); + expect(await lens.getDatatableHeaderText(3)).to.equal('226.82.228.233 › Average of bytes'); }); it('should allow to sort by transposed columns', async () => { - await PageObjects.lens.changeTableSortingBy(2, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 2)).to.eql('17,246'); + await lens.changeTableSortingBy(2, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 2)).to.eql('17,246'); }); it('should show dynamic coloring feature for numeric columns', async () => { - await PageObjects.lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); - await PageObjects.lens.setTableDynamicColoring('text'); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellStyle(0, 2); + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + await lens.setTableDynamicColoring('text'); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellStyle(0, 2); expect(styleObj['background-color']).to.be(undefined); expect(styleObj.color).to.be('rgb(133, 189, 177)'); }); it('should allow to color cell background rather than text', async () => { - await PageObjects.lens.setTableDynamicColoring('cell'); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellStyle(0, 2); + await lens.setTableDynamicColoring('cell'); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellStyle(0, 2); expect(styleObj['background-color']).to.be('rgb(133, 189, 177)'); // should also set text color when in cell mode expect(styleObj.color).to.be('rgb(0, 0, 0)'); }); it('should open the palette panel to customize the palette look', async () => { - await PageObjects.lens.openPalettePanel(); - await PageObjects.lens.waitForVisualization(); - await PageObjects.lens.changePaletteTo('temperature'); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellStyle(0, 2); + await lens.openPalettePanel(); + await lens.waitForVisualization(); + await lens.changePaletteTo('temperature'); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellStyle(0, 2); expect(styleObj['background-color']).to.be('rgb(235, 239, 245)'); }); it('should keep the coloring consistent when changing mode', async () => { // Change mode from percent to number await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_number'); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); // check that all remained the same - const styleObj = await PageObjects.lens.getDatatableCellStyle(0, 2); + const styleObj = await lens.getDatatableCellStyle(0, 2); expect(styleObj['background-color']).to.be('rgb(235, 239, 245)'); }); it('should keep the coloring consistent when moving to custom palette from default', async () => { - await PageObjects.lens.changePaletteTo('custom'); - await PageObjects.lens.waitForVisualization(); + await lens.changePaletteTo('custom'); + await lens.waitForVisualization(); // check that all remained the same - const styleObj = await PageObjects.lens.getDatatableCellStyle(0, 2); + const styleObj = await lens.getDatatableCellStyle(0, 2); expect(styleObj['background-color']).to.be('rgb(235, 239, 245)'); }); it('tweak the color stops numeric value', async () => { // restore default palette and percent mode - await PageObjects.lens.changePaletteTo('temperature'); + await lens.changePaletteTo('temperature'); await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_percent'); // now tweak the value await testSubjects.setValue('lnsPalettePanel_dynamicColoring_range_value_0', '30', { @@ -197,9 +191,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // when clicking on another row will trigger a sorting + update await testSubjects.click('lnsPalettePanel_dynamicColoring_range_value_1'); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); // pick a cell without color as is below the range - const styleObj = await PageObjects.lens.getDatatableCellStyle(3, 3); + const styleObj = await lens.getDatatableCellStyle(3, 3); expect(styleObj['background-color']).to.be(undefined); // should also set text color when in cell mode expect(styleObj.color).to.be(undefined); @@ -207,18 +201,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should allow the user to reverse the palette', async () => { await testSubjects.click('lnsPalettePanel_dynamicColoring_reverseColors'); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellStyle(1, 1); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellStyle(1, 1); expect(styleObj['background-color']).to.be('rgb(168, 191, 218)'); // should also set text color when in cell mode expect(styleObj.color).to.be('rgb(0, 0, 0)'); - await PageObjects.lens.closePalettePanel(); + await lens.closePalettePanel(); }); it('should allow to show a summary table for metric columns', async () => { - await PageObjects.lens.setTableSummaryRowFunction('sum'); - await PageObjects.lens.waitForVisualization(); - await PageObjects.lens.assertExactText( + await lens.setTableSummaryRowFunction('sum'); + await lens.waitForVisualization(); + await lens.assertExactText( '[data-test-subj="lnsDataTable-footer-169.228.188.120-›-Average-of-bytes"]', 'Sum: 18,994' ); diff --git a/x-pack/test/functional/apps/lens/group2/table_dashboard.ts b/x-pack/test/functional/apps/lens/group2/table_dashboard.ts index 136f1903420def..ddbe8d4a1ff403 100644 --- a/x-pack/test/functional/apps/lens/group2/table_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group2/table_dashboard.ts @@ -9,45 +9,45 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['lens', 'visualize', 'dashboard']); + const { lens, visualize, dashboard } = getPageObjects(['lens', 'visualize', 'dashboard']); const listingTable = getService('listingTable'); const retry = getService('retry'); const checkTableSorting = async () => { // Sort by number - await PageObjects.lens.changeTableSortingBy(2, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 2)).to.eql('17,246'); + await lens.changeTableSortingBy(2, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 2)).to.eql('17,246'); // Now sort by IP - await PageObjects.lens.changeTableSortingBy(0, 'ascending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('78.83.247.30'); + await lens.changeTableSortingBy(0, 'ascending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('78.83.247.30'); // Change the sorting - await PageObjects.lens.changeTableSortingBy(0, 'descending'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); + await lens.changeTableSortingBy(0, 'descending'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('169.228.188.120'); // Remove the sorting await retry.try(async () => { - await PageObjects.lens.changeTableSortingBy(0, 'none'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.isDatatableHeaderSorted(0)).to.eql(false); + await lens.changeTableSortingBy(0, 'none'); + await lens.waitForVisualization(); + expect(await lens.isDatatableHeaderSorted(0)).to.eql(false); }); }; describe('lens table on dashboard', () => { it('should sort a table by column in dashboard edit mode', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.save('New Table', true, false, false, 'new'); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); + await lens.save('New Table', true, false, false, 'new'); await checkTableSorting(); }); it('should sort a table by column in dashboard view mode', async () => { - await PageObjects.dashboard.saveDashboard('Dashboard with a Lens Table'); + await dashboard.saveDashboard('Dashboard with a Lens Table'); await checkTableSorting(); }); diff --git a/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts b/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts index 6723ebcb3c8e92..570463092678f4 100644 --- a/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { dashboard, visualize, lens, timeToVisualize, common, header } = getPageObjects([ 'dashboard', 'visualize', 'lens', @@ -20,91 +20,89 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const listingTable = getService('listingTable'); const dashboardAddPanel = getService('dashboardAddPanel'); + const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); const security = getService('security'); const createNewLens = async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); }; const createAndSaveDashboard = async (dashboardName: string) => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); await find.clickByButtonText('lnsXYvis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.dashboard.saveDashboard(dashboardName); - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.saveDashboard(dashboardName); + await dashboard.gotoDashboardLandingPage(); await listingTable.searchAndExpectItemsCount('dashboard', dashboardName, 1); }; const loadExistingLens = async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Artistpreviouslyknownaslens'); - await PageObjects.lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); + await lens.goToTimeRange(); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); }; describe('lens add-to-dashboards tests', () => { it('should allow new lens to be added by value to a new dashboard', async () => { await createNewLens(); - await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + await lens.save('New Lens from Modal', false, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'New Lens from Modal' - ); - expect(isLinked).to.be(false); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await dashboardPanelActions.expectNotLinkedToLibrary('New Lens from Modal', true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow existing lens be added by value to a new dashboard', async () => { await loadExistingLens(); - await PageObjects.lens.save('Artistpreviouslyknownaslens Copy', true, false, false, 'new'); + await lens.save('Artistpreviouslyknownaslens Copy', true, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Artistpreviouslyknownaslens Copy' + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await dashboardPanelActions.expectNotLinkedToLibrary( + 'Artistpreviouslyknownaslens Copy', + true ); - expect(isLinked).to.be(false); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow new lens be added by value to an existing dashboard', async () => { await createAndSaveDashboard('My Very Cool Dashboard'); await createNewLens(); - await PageObjects.lens.save( + await lens.save( 'New Lens from Modal', false, false, @@ -113,15 +111,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'My Very Cool Dashboard' ); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'New Lens from Modal' - ); - expect(isLinked).to.be(false); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await dashboardPanelActions.expectNotLinkedToLibrary('New Lens from Modal', true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); }); @@ -129,7 +124,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await createAndSaveDashboard('My Wonderful Dashboard'); await loadExistingLens(); - await PageObjects.lens.save( + await lens.save( 'Artistpreviouslyknownaslens Copy', true, false, @@ -138,59 +133,53 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'My Wonderful Dashboard' ); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Artistpreviouslyknownaslens Copy' + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await dashboardPanelActions.expectNotLinkedToLibrary( + 'Artistpreviouslyknownaslens Copy', + true ); - expect(isLinked).to.be(false); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); }); it('should allow new lens to be added by reference to a new dashboard', async () => { await createNewLens(); - await PageObjects.lens.save('New by ref Lens from Modal', false, false, true, 'new'); + await lens.save('New by ref Lens from Modal', false, false, true, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'New by ref Lens from Modal' - ); - expect(isLinked).to.be(true); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await dashboardPanelActions.expectLinkedToLibrary('New by ref Lens from Modal', true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow existing lens be added by reference to a new dashboard', async () => { await loadExistingLens(); - await PageObjects.lens.save('Artistpreviouslyknownaslens by ref', true, false, true, 'new'); + await lens.save('Artistpreviouslyknownaslens by ref', true, false, true, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Artistpreviouslyknownaslens by ref' - ); - expect(isLinked).to.be(true); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await dashboardPanelActions.expectLinkedToLibrary('Artistpreviouslyknownaslens by ref', true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow new lens be added by reference to an existing dashboard', async () => { await createAndSaveDashboard('My Very Cool Dashboard 2'); await createNewLens(); - await PageObjects.lens.save( + await lens.save( 'New Lens by ref from Modal', false, false, @@ -199,15 +188,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'My Very Cool Dashboard 2' ); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'New Lens by ref from Modal' - ); - expect(isLinked).to.be(true); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await dashboardPanelActions.expectLinkedToLibrary('New Lens by ref from Modal', true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); }); @@ -215,7 +201,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await createAndSaveDashboard('My Wonderful Dashboard 2'); await loadExistingLens(); - await PageObjects.lens.save( + await lens.save( 'Artistpreviouslyknownaslens by ref 2', true, false, @@ -224,56 +210,56 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'My Wonderful Dashboard 2' ); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); - const isLinked = await PageObjects.timeToVisualize.libraryNotificationExists( - 'Artistpreviouslyknownaslens by ref 2' + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await dashboardPanelActions.expectLinkedToLibrary( + 'Artistpreviouslyknownaslens by ref 2', + true ); - expect(isLinked).to.be(true); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(2); }); // issue #111104 it('should add a Lens heatmap to the dashboard', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('heatmap', 'heat'); + await lens.switchToVisualization('heatmap', 'heat'); - await PageObjects.lens.waitForVisualization('heatmapChart'); - await PageObjects.lens.openDimensionEditor('lnsHeatmap_cellPanel > lns-dimensionTrigger'); - await PageObjects.lens.openPalettePanel(); + await lens.waitForVisualization('heatmapChart'); + await lens.openDimensionEditor('lnsHeatmap_cellPanel > lns-dimensionTrigger'); + await lens.openPalettePanel(); await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_number'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.lens.save('New Lens Heatmap', false, false, true, 'new'); + await lens.save('New Lens Heatmap', false, false, true, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.eql(1); }); describe('Capabilities', function capabilitiesTests() { describe('dashboard no-access privileges', () => { before(async () => { - await PageObjects.common.navigateToApp('visualize'); + await common.navigateToApp('visualize'); await security.testUser.setRoles(['test_logstash_reader', 'global_visualize_all']); }); @@ -282,31 +268,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not display dashboard flow prompt', async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.gotoLandingPage(); + await common.navigateToApp('visualize'); + await header.waitUntilLoadingHasFinished(); + await visualize.gotoLandingPage(); const hasPrompt = await testSubjects.exists('visualize-dashboard-flow-prompt'); expect(hasPrompt).to.eql(false); }); it('should not display add-to-dashboard options', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); + await lens.waitForVisualization('legacyMtrVis'); await testSubjects.click('lnsApp_saveButton'); const hasOptions = await testSubjects.exists('add-to-dashboard-options'); @@ -328,31 +314,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not display dashboard flow prompt', async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.gotoLandingPage(); + await common.navigateToApp('visualize'); + await header.waitUntilLoadingHasFinished(); + await visualize.gotoLandingPage(); const hasPrompt = await testSubjects.exists('visualize-dashboard-flow-prompt'); expect(hasPrompt).to.eql(false); }); it('should not display add-to-dashboard options', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); + await lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); + await lens.waitForVisualization('legacyMtrVis'); await testSubjects.click('lnsApp_saveButton'); const hasOptions = await testSubjects.exists('add-to-dashboard-options'); diff --git a/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts b/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts index 8ef5c8993a8ee5..2d92d98dc36061 100644 --- a/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts +++ b/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts @@ -7,13 +7,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { dashboard, visualize, lens, timeToVisualize } = getPageObjects([ 'dashboard', 'visualize', 'lens', 'timeToVisualize', - 'common', - 'header', ]); const find = getService('find'); const log = getService('log'); @@ -23,47 +21,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const elasticChart = getService('elasticChart'); const createNewLens = async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.switchToVisualization('lnsMetric'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.switchToVisualization('lnsMetric'); + await lens.waitForVisualization('mtrVis'); }; const loadExistingLens = async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.waitForVisualization('xyVisChart'); }; describe('lens inline editing tests', () => { it('should allow inline editing of a by value visualization', async () => { await createNewLens(); - await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + await lens.save('New Lens from Modal', false, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickInlineEdit(); log.debug('Adds a secondary dimension'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_secondaryMetricDimensionPanel > lns-empty-dimension', operation: 'max', field: 'bytes', }); await testSubjects.click('applyFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); - const data = await PageObjects.lens.getMetricVisualizationData(); + await dashboard.waitForRenderComplete(); + const data = await lens.getMetricVisualizationData(); const expectedData = [ { title: 'Average of bytes', @@ -80,14 +78,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug(data); expect(data).to.eql(expectedData); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow inline editing of a by reference visualization', async () => { await loadExistingLens(); - await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + await lens.save('xyVisChart Copy', true, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await elasticChart.setNewChartUiDebugFlag(true); await dashboardPanelActions.legacySaveToLibrary('My by reference visualization'); @@ -97,27 +95,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Removes breakdown dimension'); - await PageObjects.lens.removeDimension('lnsXY_splitDimensionPanel'); + await lens.removeDimension('lnsXY_splitDimensionPanel'); await testSubjects.click('applyFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - const data = await PageObjects.lens.getCurrentChartDebugStateForVizType('xyVisChart'); + const data = await lens.getCurrentChartDebugStateForVizType('xyVisChart'); expect(data?.axes?.y.length).to.eql(1); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should reset changes made to the previous state', async () => { await createNewLens(); - await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + await lens.save('New Lens from Modal', false, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickInlineEdit(); log.debug('Adds a secondary dimension'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_secondaryMetricDimensionPanel > lns-empty-dimension', operation: 'max', field: 'bytes', @@ -125,9 +123,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Cancels the changes'); await testSubjects.click('cancelFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); - const data = await PageObjects.lens.getMetricVisualizationData(); + const data = await lens.getMetricVisualizationData(); const expectedData = [ { title: 'Average of bytes', @@ -142,14 +140,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; expect(data).to.eql(expectedData); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow adding an annotation', async () => { await loadExistingLens(); - await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + await lens.save('xyVisChart Copy', true, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await elasticChart.setNewChartUiDebugFlag(true); await dashboardPanelActions.openContextMenu(); @@ -157,7 +155,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Adds annotation'); - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); expect((await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`)).length).to.eql(2); expect( @@ -167,16 +165,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.eql('Event'); await testSubjects.click('applyFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await testSubjects.existOrFail('xyVisAnnotationIcon'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); it('should allow adding a reference line', async () => { await loadExistingLens(); - await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + await lens.save('xyVisChart Copy', true, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await elasticChart.setNewChartUiDebugFlag(true); await dashboardPanelActions.openContextMenu(); @@ -184,23 +182,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Adds reference line'); - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yReferenceLineLeftPanel > lns-dimensionTrigger', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.selectOptionFromComboBox('lns-icon-select', 'bell'); - await PageObjects.lens.closeDimensionEditor(); + await lens.selectOptionFromComboBox('lns-icon-select', 'bell'); + await lens.closeDimensionEditor(); await testSubjects.click('applyFlyoutButton'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await testSubjects.existOrFail('xyVisAnnotationIcon'); - await PageObjects.timeToVisualize.resetNewDashboard(); + await timeToVisualize.resetNewDashboard(); }); }); } diff --git a/x-pack/test/functional/apps/lens/group3/epoch_millis.ts b/x-pack/test/functional/apps/lens/group3/epoch_millis.ts index c13f31c97dc60d..30f3ffddfcff19 100644 --- a/x-pack/test/functional/apps/lens/group3/epoch_millis.ts +++ b/x-pack/test/functional/apps/lens/group3/epoch_millis.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -28,32 +28,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); it('should show field list', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.switchDataPanelIndexPattern('epoch-millis*'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - const fieldList = await PageObjects.lens.findAllFields(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.switchDataPanelIndexPattern('epoch-millis*'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); + const fieldList = await lens.findAllFields(); expect(fieldList).to.contain('@timestamp'); }); it('should able to configure a regular metric', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.waitForVisualization('lnsSuggestion-countOfRecords'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('1'); + await lens.waitForVisualization('lnsSuggestion-countOfRecords'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('1'); }); it('should able to configure a shifted metric', async () => { - await PageObjects.lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); - await PageObjects.lens.enableTimeShift(); - await PageObjects.lens.setTimeShift('3d'); + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + await lens.enableTimeShift(); + await lens.setTimeShift('3d'); - await PageObjects.lens.waitForVisualization('lnsSuggestion-countOfRecords3D'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('2'); + await lens.waitForVisualization('lnsSuggestion-countOfRecords3D'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('2'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group3/index.ts b/x-pack/test/functional/apps/lens/group3/index.ts index f82b409b7ba58f..49cc8ed32eec6d 100644 --- a/x-pack/test/functional/apps/lens/group3/index.ts +++ b/x-pack/test/functional/apps/lens/group3/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -54,7 +54,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -65,7 +65,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group3/runtime_fields.ts b/x-pack/test/functional/apps/lens/group3/runtime_fields.ts index 8803a14ea34fe7..e04a00a64c81a7 100644 --- a/x-pack/test/functional/apps/lens/group3/runtime_fields.ts +++ b/x-pack/test/functional/apps/lens/group3/runtime_fields.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'header']); + const { visualize, lens, header } = getPageObjects(['visualize', 'lens', 'header']); const filterBar = getService('filterBar'); const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); @@ -17,62 +17,58 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens runtime fields', () => { it('should be able to add runtime field and use it', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); await retry.try(async () => { await dataViews.clickAddFieldFromSearchBar(); await fieldEditor.setName('runtimefield'); await fieldEditor.enableValue(); await fieldEditor.typeScript("emit('abc')"); await fieldEditor.save(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForField('runtimefield'); - await PageObjects.lens.dragFieldToWorkspace('runtimefield'); + await header.waitUntilLoadingHasFinished(); + await lens.searchField('runtime'); + await lens.waitForField('runtimefield'); + await lens.dragFieldToWorkspace('runtimefield'); }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal( - 'Top 5 values of runtimefield' - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('abc'); + await lens.waitForVisualization(); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 5 values of runtimefield'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('abc'); }); it('should able to filter runtime fields', async () => { await retry.try(async () => { - await PageObjects.lens.clickTableCellAction(0, 0, 'lensDatatableFilterOut'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.isShowingNoResults()).to.equal(true); + await lens.clickTableCellAction(0, 0, 'lensDatatableFilterOut'); + await lens.waitForVisualization(); + expect(await lens.isShowingNoResults()).to.equal(true); }); await filterBar.removeAllFilters(); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); }); it('should able to edit field', async () => { - await PageObjects.lens.clickField('runtimefield'); - await PageObjects.lens.editField('runtimefield'); + await lens.clickField('runtimefield'); + await lens.editField('runtimefield'); await fieldEditor.setName('runtimefield2', true, true); await fieldEditor.save(); await fieldEditor.confirmSave(); - await PageObjects.lens.searchField('runtime'); - await PageObjects.lens.waitForField('runtimefield2'); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.searchField('runtime'); + await lens.waitForField('runtimefield2'); + await lens.dragFieldToDimensionTrigger( 'runtimefield2', 'lnsDatatable_rows > lns-dimensionTrigger' ); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal( - 'Top 5 values of runtimefield2' - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('abc'); + await lens.waitForVisualization(); + expect(await lens.getDatatableHeaderText(0)).to.equal('Top 5 values of runtimefield2'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('abc'); }); it('should able to remove field', async () => { - await PageObjects.lens.clickField('runtimefield2'); - await PageObjects.lens.removeField('runtimefield2'); + await lens.clickField('runtimefield2'); + await lens.removeField('runtimefield2'); await fieldEditor.confirmDelete(); - await PageObjects.lens.waitForFieldMissing('runtimefield2'); + await lens.waitForFieldMissing('runtimefield2'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group3/terms.ts b/x-pack/test/functional/apps/lens/group3/terms.ts index 13b8492371405d..86c43a7549e0ef 100644 --- a/x-pack/test/functional/apps/lens/group3/terms.ts +++ b/x-pack/test/functional/apps/lens/group3/terms.ts @@ -10,7 +10,7 @@ import moment from 'moment'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens, common } = getPageObjects(['visualize', 'lens', 'common']); const elasticChart = getService('elasticChart'); const testSubjects = getService('testSubjects'); const comboBox = getService('comboBox'); @@ -23,92 +23,92 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens terms', () => { describe('lens multi terms suite', () => { it('should allow creation of lens xy chart with multi terms categories', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', keepOpen: true, }); - await PageObjects.lens.addTermToAgg('geo.dest'); + await lens.addTermToAgg('geo.dest'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( 'Top values of geo.src + 1 other' ); - await PageObjects.lens.openDimensionEditor('lnsXY_xDimensionPanel'); + await lens.openDimensionEditor('lnsXY_xDimensionPanel'); - await PageObjects.lens.addTermToAgg('bytes'); + await lens.addTermToAgg('bytes'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( 'Top values of geo.src + 2 others' ); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data!.bars![0].bars[0].x).to.eql('PE › US › 19,986'); }); it('should allow creation of lens xy chart with multi terms categories split', async () => { - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); + await lens.removeDimension('lnsXY_xDimensionPanel'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', keepOpen: true, }); - await PageObjects.lens.addTermToAgg('geo.dest'); - await PageObjects.lens.addTermToAgg('bytes'); + await lens.addTermToAgg('geo.dest'); + await lens.addTermToAgg('bytes'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.bars?.[0]?.name).to.eql('PE › US › 19,986'); }); it('should not show existing defined fields for new term', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_splitDimensionPanel'); + await lens.openDimensionEditor('lnsXY_splitDimensionPanel'); - await PageObjects.lens.checkTermsAreNotAvailableToAgg(['bytes', 'geo.src', 'geo.dest']); + await lens.checkTermsAreNotAvailableToAgg(['bytes', 'geo.src', 'geo.dest']); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); }); describe('rank by', () => { describe('reset rank on metric change', () => { it('should reset the ranking when using decimals on percentile', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'percentile', field: 'bytes', @@ -118,7 +118,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { const value = '60.5'; // Can not use testSubjects because data-test-subj is placed range input and number input - const percentileInput = await PageObjects.lens.getNumericFieldReady( + const percentileInput = await lens.getNumericFieldReady( 'lns-indexPattern-percentile-input' ); await percentileInput.clearValueWithKeyboard(); @@ -136,11 +136,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // note: this has also the side effect to close the dimension editor await testSubjects.click('toastCloseButton'); - await PageObjects.lens.openDimensionEditor( - 'lnsXY_yDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); - await PageObjects.lens.selectOperation('percentile_rank'); + await lens.selectOperation('percentile_rank'); await retry.try(async () => { const value = '600.5'; @@ -163,18 +161,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); describe('sorting by custom metric', () => { it('should allow sort by custom metric', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', @@ -196,7 +194,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { // Can not use testSubjects because data-test-subj is placed range input and number input - const percentileInput = await PageObjects.lens.getNumericFieldReady( + const percentileInput = await lens.getNumericFieldReady( 'lns-indexPattern-percentile-input' ); await percentileInput.type('60'); @@ -207,14 +205,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.waitForVisualization('xyVisChart'); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( 'Top 5 values of geo.src' ); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data!.bars![0].bars[0].x).to.eql('BN'); expect(data!.bars![0].bars[0].y).to.eql(19265); }); @@ -281,88 +279,88 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); it('should work with empty string values as buckets', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchDataPanelIndexPattern(esIndexPrefix); + await lens.goToTimeRange(); + await lens.switchDataPanelIndexPattern(esIndexPrefix); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'a', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); const seriesBar = data!.bars![0].bars; expect(seriesBar[0].x).to.eql('(empty)'); expect(seriesBar[seriesBar.length - 1].x).to.eql('Other'); }); it('should work with empty string as breakdown', async () => { - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); + await lens.removeDimension('lnsXY_xDimensionPanel'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'a', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data!.bars![0].name).to.eql('(empty)'); expect(data!.bars![data!.bars!.length - 1].name).to.eql('Other'); }); it('should work with nested empty string values', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.removeLayer(); + await lens.removeLayer(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'terms', field: 'a', keepOpen: true, }); - await PageObjects.lens.setTermsNumberOfValues(4); - await PageObjects.lens.closeDimensionEditor(); + await lens.setTermsNumberOfValues(4); + await lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'terms', field: 'b', keepOpen: true, }); - await PageObjects.lens.setTermsNumberOfValues(1); - await PageObjects.lens.closeDimensionEditor(); + await lens.setTermsNumberOfValues(1); + await lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'count', }); - await PageObjects.lens.waitForVisualization(); - await PageObjects.common.sleep(20000); + await lens.waitForVisualization(); + await common.sleep(20000); // a empty value - expect(await PageObjects.lens.getDatatableCellText(1, 0)).to.eql('(empty)'); + expect(await lens.getDatatableCellText(1, 0)).to.eql('(empty)'); // b Other value - expect(await PageObjects.lens.getDatatableCellText(1, 1)).to.eql('Other'); + expect(await lens.getDatatableCellText(1, 1)).to.eql('Other'); // a Other value - expect(await PageObjects.lens.getDatatableCellText(5, 0)).to.eql('Other'); + expect(await lens.getDatatableCellText(5, 0)).to.eql('Other'); // b empty value - expect(await PageObjects.lens.getDatatableCellText(5, 1)).to.eql('(empty)'); + expect(await lens.getDatatableCellText(5, 1)).to.eql('(empty)'); }); }); }); diff --git a/x-pack/test/functional/apps/lens/group4/chart_data.ts b/x-pack/test/functional/apps/lens/group4/chart_data.ts index 2b15d11b1125ec..512f820e7ed75b 100644 --- a/x-pack/test/functional/apps/lens/group4/chart_data.ts +++ b/x-pack/test/functional/apps/lens/group4/chart_data.ts @@ -11,23 +11,23 @@ import { range } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const elasticChart = getService('elasticChart'); describe('lens chart data', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -73,31 +73,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } it('should render xy chart', async () => { - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); assertMatchesExpectedData(data); }); it('should render pie chart', async () => { - await PageObjects.lens.switchToVisualization('pie'); - const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); + await lens.switchToVisualization('pie'); + const data = await lens.getCurrentChartDebugState('partitionVisChart'); assertMatchesExpectedPieData(data); }); it('should render donut chart', async () => { - await PageObjects.lens.setDonutHoleSize('Large'); - const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); + await lens.setDonutHoleSize('Large'); + const data = await lens.getCurrentChartDebugState('partitionVisChart'); assertMatchesExpectedPieData(data); }); it('should render treemap chart', async () => { - await PageObjects.lens.switchToVisualization('treemap', 'treemap'); - const data = await PageObjects.lens.getCurrentChartDebugState('partitionVisChart'); + await lens.switchToVisualization('treemap', 'treemap'); + const data = await lens.getCurrentChartDebugState('partitionVisChart'); assertMatchesExpectedPieData(data); }); it('should render heatmap chart', async () => { - await PageObjects.lens.switchToVisualization('heatmap', 'heat'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + await lens.switchToVisualization('heatmap', 'heat'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert axes expect(debugState?.axes!.x[0].labels).to.eql([ @@ -124,13 +124,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render datatable', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.waitForVisualization(); + await lens.switchToVisualization('lnsDatatable'); + await lens.waitForVisualization(); const terms = await Promise.all( - range(0, 6).map((index) => PageObjects.lens.getDatatableCellText(index, 0)) + range(0, 6).map((index) => lens.getDatatableCellText(index, 0)) ); const values = await Promise.all( - range(0, 6).map((index) => PageObjects.lens.getDatatableCellText(index, 1)) + range(0, 6).map((index) => lens.getDatatableCellText(index, 1)) ); expect(terms).to.eql(expectedData.map(({ x }) => x)); expect(values.map((value) => Math.floor(100 * Number(value.replace(',', ''))) / 100)).to.eql( @@ -139,9 +139,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render metric', async () => { - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Average of bytes', '5,727.322'); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.waitForVisualization('legacyMtrVis'); + await lens.assertLegacyMetric('Average of bytes', '5,727.322'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group4/color_mapping.ts b/x-pack/test/functional/apps/lens/group4/color_mapping.ts index 0fc9f79afec791..932c628a09afa4 100644 --- a/x-pack/test/functional/apps/lens/group4/color_mapping.ts +++ b/x-pack/test/functional/apps/lens/group4/color_mapping.ts @@ -15,23 +15,23 @@ import { import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const elasticChart = getService('elasticChart'); describe('lens color mapping', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'extension.raw', @@ -41,18 +41,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render correct color mapping', async () => { - const chart = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const chart = await lens.getCurrentChartDebugState('xyVisChart'); const legendColors = chart?.legend?.items?.map((item) => item.color.toLowerCase()) ?? []; expect(legendColors).to.eql( ELASTIC_BRAND_PALETTE_COLORS.slice(0, 5).map((c) => c.toLowerCase()) ); }); it('should allow switching color mapping palette', async () => { - await PageObjects.lens.changeColorMappingPalette( + await lens.changeColorMappingPalette( 'lnsXY_splitDimensionPanel > lnsLayerPanel-dimensionLink', EUIAmsterdamColorBlindPalette.id ); - const chart = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const chart = await lens.getCurrentChartDebugState('xyVisChart'); const legendColors = chart?.legend?.items?.map((item) => item.color.toLowerCase()) ?? []; expect(legendColors).to.eql( EUI_AMSTERDAM_PALETTE_COLORS.slice(0, 5).map((c) => c.toLowerCase()) @@ -60,12 +60,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should change categorical color', async () => { - await PageObjects.lens.changeColorMappingCategoricalColors( + await lens.changeColorMappingCategoricalColors( 'lnsXY_splitDimensionPanel > lnsLayerPanel-dimensionLink', 0, 3 ); - const chart = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + const chart = await lens.getCurrentChartDebugState('xyVisChart'); const firstLegendItemColor = chart?.legend?.items?.[0]?.color?.toLowerCase() ?? 'NONE'; expect(firstLegendItemColor).to.eql(EUI_AMSTERDAM_PALETTE_COLORS[3].toLowerCase()); }); diff --git a/x-pack/test/functional/apps/lens/group4/colors.ts b/x-pack/test/functional/apps/lens/group4/colors.ts index 5faf6e05bbcd56..96e1866250da28 100644 --- a/x-pack/test/functional/apps/lens/group4/colors.ts +++ b/x-pack/test/functional/apps/lens/group4/colors.ts @@ -7,28 +7,28 @@ import { ElasticBrandPalette } from '@kbn/coloring'; import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); +export default function ({ getPageObjects }: FtrProviderContext) { + const { visualize, lens } = getPageObjects(['visualize', 'lens']); describe('lens color palette tests', () => { it('should allow to pick legacy color palette in xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: '@message.raw', @@ -36,26 +36,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { keepOpen: true, }); - await PageObjects.lens.assertPalette('negative', true); + await lens.assertPalette('negative', true); }); it('should allow to pick color mapping palette in xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: '@message.raw', @@ -63,25 +63,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { keepOpen: true, }); - await PageObjects.lens.assertPalette(ElasticBrandPalette.id, false); - await PageObjects.lens.closeDimensionEditor(); + await lens.assertPalette(ElasticBrandPalette.id, false); + await lens.closeDimensionEditor(); }); it('should carry over palette to the pie chart', async () => { - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.openDimensionEditor( - 'lnsPie_sliceByDimensionPanel > lns-dimensionTrigger' - ); - await PageObjects.lens.assertPalette(ElasticBrandPalette.id, false); - await PageObjects.lens.closeDimensionEditor(); + await lens.switchToVisualization('pie'); + await lens.openDimensionEditor('lnsPie_sliceByDimensionPanel > lns-dimensionTrigger'); + await lens.assertPalette(ElasticBrandPalette.id, false); + await lens.closeDimensionEditor(); }); it('should carry palette back to the bar chart', async () => { - await PageObjects.lens.switchToVisualization('bar'); - await PageObjects.lens.openDimensionEditor( - 'lnsXY_splitDimensionPanel > lns-dimensionTrigger' - ); - await PageObjects.lens.assertPalette(ElasticBrandPalette.id, false); + await lens.switchToVisualization('bar'); + await lens.openDimensionEditor('lnsXY_splitDimensionPanel > lns-dimensionTrigger'); + await lens.assertPalette(ElasticBrandPalette.id, false); }); }); } diff --git a/x-pack/test/functional/apps/lens/group4/dashboard.ts b/x-pack/test/functional/apps/lens/group4/dashboard.ts index cfa46167b7860d..563023a6d2ee0e 100644 --- a/x-pack/test/functional/apps/lens/group4/dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/dashboard.ts @@ -9,13 +9,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { header, dashboard, timePicker, lens } = getPageObjects([ 'header', - 'common', 'dashboard', 'timePicker', 'lens', - 'discover', ]); const find = getService('find'); @@ -42,7 +40,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens dashboard tests', () => { before(async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await security.testUser.setRoles( [ 'global_dashboard_all', @@ -58,23 +56,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('metric should be embeddable', async () => { - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('Artistpreviouslyknownaslens'); await find.clickByButtonText('Artistpreviouslyknownaslens'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await lens.goToTimeRange(); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); }); it('should be able to add filters/timerange by clicking in XYChart', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); await find.clickByButtonText('lnsXYvis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); await retry.try(async () => { await clickInChart(30, 5); // hardcoded position of bar, depends heavy on data and charts implementation await testSubjects.existOrFail('applyFiltersPopoverButton', { timeout: 2500 }); @@ -85,11 +83,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.missingOrFail('applyFiltersPopoverButton'); }); - await PageObjects.lens.assertExactText( - '[data-test-subj="embeddablePanelHeading-lnsXYvis"]', - 'lnsXYvis' - ); - const time = await PageObjects.timePicker.getTimeConfig(); + await lens.assertExactText('[data-test-subj="embeddablePanelHeading-lnsXYvis"]', 'lnsXYvis'); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal('Sep 21, 2015 @ 09:00:00.000'); expect(time.end).to.equal('Sep 21, 2015 @ 12:00:00.000'); const hasIpFilter = await filterBar.hasFilter('ip', '97.220.3.248'); @@ -97,13 +92,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to add filters by right clicking in XYChart', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); await find.clickByButtonText('lnsXYvis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); await retry.try(async () => { // show the tooltip actions await rightClickInChart(30, 5); // hardcoded position of bar, depends heavy on data and charts implementation @@ -112,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(hasIpFilter).to.be(true); await rightClickInChart(35, 5); // hardcoded position of bar, depends heavy on data and charts implementation await (await find.allByCssSelector('.echTooltipActions__action'))[0].click(); - const time = await PageObjects.timePicker.getTimeConfig(); + const time = await timePicker.getTimeConfig(); expect(time.start).to.equal('Sep 21, 2015 @ 09:00:00.000'); expect(time.end).to.equal('Sep 21, 2015 @ 12:00:00.000'); }); @@ -121,31 +116,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Requires xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled // setting set in kibana.yml to test (not enabled by default) it('should hide old "explore underlying data" action', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); await find.clickByButtonText('lnsXYvis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.dashboard.saveDashboard('lnsDrilldown'); - await panelActions.openContextMenu(); + await lens.goToTimeRange(); + await dashboard.saveDashboard('lnsDrilldown'); - expect(await testSubjects.exists('embeddablePanelAction-ACTION_EXPLORE_DATA')).not.to.be.ok(); + await panelActions.expectMissingPanelAction( + 'embeddablePanelAction-ACTION_EXPLORE_DATA', + 'lnsXYvis' + ); }); it('should be able to add filters by clicking in pie chart', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); await find.clickByButtonText('lnsPieVis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); await clickInChart(5, 5); // hardcoded position of the slice, depends heavy on data and charts implementation - await PageObjects.lens.assertExactText( + await lens.assertExactText( '[data-test-subj="embeddablePanelHeading-lnsPieVis"]', 'lnsPieVis' ); @@ -156,15 +153,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not carry over filters if creating a new lens visualization from within dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRange(); await filterBar.addFilter({ field: 'geo.src', operation: 'is', value: 'US' }); await filterBar.toggleFilterPinned('geo.src'); await filterBar.addFilter({ field: 'geo.dest', operation: 'is', value: 'LS' }); await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const hasGeoDestFilter = await filterBar.hasFilter('geo.dest', 'LS'); expect(hasGeoDestFilter).to.be(false); const hasGeoSrcFilter = await filterBar.hasFilter('geo.src', 'US', true, true); @@ -174,12 +171,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('CSV export action exists in panel context menu', async () => { const ACTION_ID = 'ACTION_EXPORT_CSV'; const ACTION_TEST_SUBJ = `embeddablePanelAction-${ACTION_ID}`; - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); await find.clickByButtonText('lnsPieVis'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await dashboardAddPanel.closeAddPanel(); await retry.try(async () => { @@ -188,40 +185,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show all data from all layers in the inspector', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await header.waitUntilLoadingHasFinished(); + await lens.goToTimeRange(); + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer(); + await lens.createLayer(); - expect(await PageObjects.lens.hasChartSwitchWarning('line')).to.eql(false); + expect(await lens.hasChartSwitchWarning('line')).to.eql(false); - await PageObjects.lens.switchToVisualization('line'); - await PageObjects.lens.configureDimension({ + await lens.switchToVisualization('line'); + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'median', field: 'bytes', }); - await PageObjects.lens.saveAndReturn(); + await lens.saveAndReturn(); await panelActions.openInspector(); await inspector.openInspectorRequestsView(); @@ -230,35 +227,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('unlink lens panel from embeddable library', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); await find.clickByButtonText('lnsPieVis'); await dashboardAddPanel.closeAddPanel(); - const originalPanel = await testSubjects.find('embeddablePanelHeading-lnsPieVis'); - await panelActions.legacyUnlinkFromLibrary(originalPanel); - await testSubjects.existOrFail('unlinkPanelSuccess'); - - const updatedPanel = await testSubjects.find('embeddablePanelHeading-lnsPieVis'); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - updatedPanel - ); - expect(libraryActionExists).to.be(false); + await panelActions.legacyUnlinkFromLibrary('lnsPieVis'); }); it('save lens panel to embeddable library', async () => { - const originalPanel = await testSubjects.find('embeddablePanelHeading-lnsPieVis'); - await panelActions.legacySaveToLibrary('lnsPieVis - copy', originalPanel); - - const updatedPanel = await testSubjects.find('embeddablePanelHeading-lnsPieVis-copy'); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - updatedPanel - ); - expect(libraryActionExists).to.be(true); + await panelActions.legacySaveToLibrary('lnsPieVis - copy', 'lnsPieVis'); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); @@ -266,80 +246,80 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show validation messages if any error appears', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.goToTimeRange(); + await header.waitUntilLoadingHasFinished(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'moving_average', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ operation: 'sum', field: 'bytes', }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); // remove the x dimension to trigger the validation error - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); - await PageObjects.lens.expectSaveAndReturnButtonDisabled(); + await lens.removeDimension('lnsXY_xDimensionPanel'); + await lens.expectSaveAndReturnButtonDisabled(); }); it('should recover lens panel in an error state when fixing search query', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); await find.clickByButtonText('lnsXYvis'); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); // type an invalid search query, hit refresh await queryBar.setQuery('this is > not valid'); await queryBar.submitQuery(); // check the error state - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const errors = await testSubjects.findAll('embeddableStackError'); expect(errors.length).to.be(1); // now remove the query await queryBar.setQuery(''); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // check the success state - await PageObjects.dashboard.verifyNoRenderErrors(); + await dashboard.verifyNoRenderErrors(); }); it('should work in lens with by-value charts', async () => { // create a new dashboard, then a new visualization in Lens. - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await testSubjects.click('dashboardEditorMenuButton'); await testSubjects.click('visType-lens'); // Configure it and save to return to the dashboard. - await PageObjects.lens.waitForField('@timestamp'); - await PageObjects.lens.configureDimension({ + await lens.waitForField('@timestamp'); + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.save('test', true); + await lens.save('test', true); // Edit the visualization now and get back to Lens editor await panelActions.clickInlineEdit(); await testSubjects.click('navigateToLensEditorLink'); // Click on Share, then Copy link and paste the link in a new tab. - const url = await PageObjects.lens.getUrl(); + const url = await lens.getUrl(); await browser.openNewTab(); await browser.navigateTo(url); - expect(await PageObjects.lens.getTitle()).to.be('test'); + expect(await lens.getTitle()).to.be('test'); // need to make sure there aren't extra tabs or it will impact future test suites // close any new tabs that were opened const windowHandlers = await browser.getAllWindowHandles(); diff --git a/x-pack/test/functional/apps/lens/group4/index.ts b/x-pack/test/functional/apps/lens/group4/index.ts index 9627b744300bac..51b3bac4c519f0 100644 --- a/x-pack/test/functional/apps/lens/group4/index.ts +++ b/x-pack/test/functional/apps/lens/group4/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -54,7 +54,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -65,7 +65,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group4/share.ts b/x-pack/test/functional/apps/lens/group4/share.ts index ac3c4a3b22b78f..4d01b3cf65c914 100644 --- a/x-pack/test/functional/apps/lens/group4/share.ts +++ b/x-pack/test/functional/apps/lens/group4/share.ts @@ -9,72 +9,72 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const browser = getService('browser'); const filterBarService = getService('filterBar'); const queryBar = getService('queryBar'); describe('lens share tests', () => { before(async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); }); afterEach(async () => { - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); }); after(async () => { - await PageObjects.lens.setCSVDownloadDebugFlag(false); + await lens.setCSVDownloadDebugFlag(false); }); it('should disable the share button if no request is made', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - expect(await PageObjects.lens.isShareable()).to.eql(false); + expect(await lens.isShareable()).to.eql(false); }); it('should keep the button disabled for incomplete configuration', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - expect(await PageObjects.lens.isShareable()).to.eql(false); + expect(await lens.isShareable()).to.eql(false); }); it('should make the share button available as soon as a valid configuration is generated', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect(await PageObjects.lens.isShareable()).to.eql(true); + expect(await lens.isShareable()).to.eql(true); }); it('should enable both download and URL sharing for valid configuration', async () => { - await PageObjects.lens.clickShareModal(); + await lens.clickShareModal(); - expect(await PageObjects.lens.isShareActionEnabled('export')); - expect(await PageObjects.lens.isShareActionEnabled('link')); + expect(await lens.isShareActionEnabled('export')); + expect(await lens.isShareActionEnabled('link')); }); it('should preserve filter and query when sharing', async () => { await filterBarService.addFilter({ field: 'bytes', operation: 'is', value: '1' }); await queryBar.setQuery('host.keyword www.elastic.co'); await queryBar.submitQuery(); - await PageObjects.lens.save('new'); - const url = await PageObjects.lens.getUrl(); - await PageObjects.lens.closeShareModal(); + await lens.save('new'); + const url = await lens.getUrl(); + await lens.closeShareModal(); await browser.openNewTab(); const [lensWindowHandler] = await browser.getAllWindowHandles(); await browser.navigateTo(url); // check that it's the same configuration in the new URL when ready - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); expect(await filterBarService.getFiltersLabel()).to.eql(['bytes: 1']); expect(await queryBar.getQueryString()).to.be('host.keyword www.elastic.co'); await browser.closeCurrentWindow(); @@ -82,32 +82,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to download CSV data of the current visualization', async () => { - await PageObjects.lens.setCSVDownloadDebugFlag(true); - await PageObjects.lens.openCSVDownloadShare(); + await lens.setCSVDownloadDebugFlag(true); + await lens.openCSVDownloadShare(); - const csv = await PageObjects.lens.getCSVContent(); + const csv = await lens.getCSVContent(); expect(csv).to.be.ok(); expect(Object.keys(csv!)).to.have.length(1); }); it('should be able to download CSV of multi layer visualization', async () => { - await PageObjects.lens.createLayer(); + await lens.createLayer(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'median', field: 'bytes', }); - await PageObjects.lens.openCSVDownloadShare(); + await lens.openCSVDownloadShare(); - const csv = await PageObjects.lens.getCSVContent(); + const csv = await lens.getCSVContent(); expect(csv).to.be.ok(); expect(Object.keys(csv!)).to.have.length(2); }); diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts index 2d9035238452fc..5caf47a41847dc 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { visualize, lens, common, header, discover, unifiedFieldList } = getPageObjects([ 'visualize', 'lens', 'common', @@ -25,20 +25,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('show underlying data', () => { it('should show the open button for a compatible saved visualization', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', operation: 'terms', field: 'extension.raw', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); // expect the button is shown and enabled @@ -47,85 +47,83 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await testSubjects.existOrFail('unifiedDataTableToolbar'); // check the table columns - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'extension.raw', 'bytes']); await browser.closeCurrentWindow(); await browser.switchToWindow(lensWindowHandler); }); it('should show the open button if visualization has an annotation layer', async () => { - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'extension.raw', 'bytes']); await browser.closeCurrentWindow(); await browser.switchToWindow(lensWindowHandler); }); it('should show the open button if visualization has a reference line layer', async () => { - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'extension.raw', 'bytes']); await browser.closeCurrentWindow(); await browser.switchToWindow(lensWindowHandler); }); it('should not show the open button if visualization has multiple data layers', async () => { - await PageObjects.lens.createLayer(); - await PageObjects.lens.configureDimension({ + await lens.createLayer(); + await lens.configureDimension({ dimension: 'lns-layerPanel-3 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-3 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'median', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.isEnabled(`lnsApp_openInDiscover`)).to.be(false); for (const index of [3, 2, 1]) { - await PageObjects.lens.removeLayer(index); + await lens.removeLayer(index); } }); it('should ignore the top values column if other category is enabled', async () => { // Make the breakdown dimention be ignored - await PageObjects.lens.openDimensionEditor( - 'lnsXY_splitDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsXY_splitDimensionPanel > lns-dimensionTrigger'); await testSubjects.click('indexPattern-terms-advanced'); await testSubjects.click('indexPattern-terms-other-bucket'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); // expect the button is shown and enabled await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); expect(await queryBar.getQueryString()).be.eql(''); await browser.closeCurrentWindow(); @@ -134,35 +132,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should show the open button for a compatible saved visualization with a lucene query', async () => { // Make the breakdown dimension contribute to filters again - await PageObjects.lens.openDimensionEditor( - 'lnsXY_splitDimensionPanel > lns-dimensionTrigger' - ); + await lens.openDimensionEditor('lnsXY_splitDimensionPanel > lns-dimensionTrigger'); await testSubjects.click('indexPattern-terms-advanced'); await testSubjects.click('indexPattern-terms-other-bucket'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); // add a lucene query to the yDimension - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); - await PageObjects.lens.enableFilter(); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.enableFilter(); // turn off the KQL switch to change the language to lucene await testSubjects.click('indexPattern-filter-by-input > switchQueryLanguageButton'); await testSubjects.click('luceneLanguageMenuItem'); await testSubjects.click('indexPattern-filter-by-input > switchQueryLanguageButton'); // apparently setting a filter requires some time before and after typing to work properly - await PageObjects.common.sleep(1000); - await PageObjects.lens.setFilterBy('machine.ram:*'); - await PageObjects.common.sleep(1000); + await common.sleep(1000); + await lens.setFilterBy('machine.ram:*'); + await common.sleep(1000); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await header.waitUntilLoadingHasFinished(); + await unifiedFieldList.waitUntilSidebarHasLoaded(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the query expect(await queryBar.getQueryString()).be.eql( @@ -176,9 +172,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the underlying data extracting all filters and columns from a formula', async () => { - await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + await lens.removeDimension('lnsXY_yDimensionPanel'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'formula', formula: `average(memory, kql=`, @@ -190,18 +186,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // the tooltip seems to be there as long as the focus is in the query string await input.pressKeys(browser.keys.RIGHT); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); // expect the button is shown and enabled await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the columns - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'extension.raw', 'memory']); // check the query expect(await queryBar.getQueryString()).be.eql( @@ -212,28 +208,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should extract a filter from a formula global filter', async () => { - await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + await lens.removeDimension('lnsXY_yDimensionPanel'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.enableFilter(); + await lens.enableFilter(); // apparently setting a filter requires some time before and after typing to work properly - await PageObjects.common.sleep(1000); - await PageObjects.lens.setFilterBy('bytes > 4000'); - await PageObjects.common.sleep(1000); + await common.sleep(1000); + await lens.setFilterBy('bytes > 4000'); + await common.sleep(1000); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); // expect the button is shown and enabled await testSubjects.clickWhenNotDisabledWithoutRetry(`lnsApp_openInDiscover`); const [lensWindowHandler, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the query expect(await queryBar.getQueryString()).be.eql( diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts index 1f6b3efd9d0142..70625ecafaa75a 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; const OPEN_IN_DISCOVER_DATA_TEST_SUBJ = 'embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { visualize, lens, dashboard, header, discover, common } = getPageObjects([ 'visualize', 'lens', 'dashboard', @@ -31,13 +31,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens show underlying data from dashboard', () => { it('should show the open button for a compatible saved visualization', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.save('Embedded Visualization', true, false, false, 'new'); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.save('Embedded Visualization', true, false, false, 'new'); - await PageObjects.dashboard.saveDashboard(`Open in Discover Testing ${uuidv4()}`, { + await dashboard.saveDashboard(`Open in Discover Testing ${uuidv4()}`, { saveAsNew: true, exitFromEditMode: true, }); @@ -47,10 +47,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the table columns - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'ip', 'bytes']); await browser.closeCurrentWindow(); @@ -58,17 +58,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show the open button for a compatible saved visualization with annotations and reference line', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.createLayer('annotations'); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await header.waitUntilLoadingHasFinished(); + await lens.createLayer('annotations'); + await lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.createLayer('referenceLine'); - await PageObjects.lens.save('Embedded Visualization', false); + await lens.createLayer('referenceLine'); + await lens.save('Embedded Visualization', false); - await PageObjects.dashboard.saveDashboard(`Open in Discover Testing ${uuidv4()}`, { + await dashboard.saveDashboard(`Open in Discover Testing ${uuidv4()}`, { saveAsNew: false, exitFromEditMode: true, }); @@ -78,10 +78,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('unifiedHistogramChart'); // check the table columns - const columns = await PageObjects.discover.getColumnHeaders(); + const columns = await discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'ip', 'bytes']); await browser.closeCurrentWindow(); @@ -89,7 +89,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should bring both dashboard context and visualization context to discover', async () => { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await savedQueryManagementComponent.openSavedQueryManagementComponent(); @@ -99,9 +99,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await queryBar.submitQuery(); await filterBarService.addFilter({ field: 'geo.src', operation: 'is', value: 'AF' }); // the filter bar seems to need a moment to settle before saving and returning - await PageObjects.common.sleep(1000); + await common.sleep(1000); - await PageObjects.lens.saveAndReturn(); + await lens.saveAndReturn(); await savedQueryManagementComponent.openSavedQueryManagementComponent(); await queryBar.switchQueryLanguage('kql'); await savedQueryManagementComponent.closeSavedQueryManagementComponent(); @@ -113,19 +113,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { value: 'cdn.theacademyofperformingartsandscience.org', }); - await PageObjects.dashboard.clickQuickSave(); + await dashboard.clickQuickSave(); // make sure Open in Discover is also available in edit mode await dashboardPanelActions.expectExistsPanelAction(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); - await PageObjects.dashboard.clickCancelOutOfEditMode(); + await dashboard.clickCancelOutOfEditMode(); await dashboardPanelActions.clickContextMenuItem(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); await retry.waitFor('filter count to be correct', async () => { const filterCount = await filterBarService.getFilterCount(); diff --git a/x-pack/test/functional/apps/lens/group4/time_shift.ts b/x-pack/test/functional/apps/lens/group4/time_shift.ts index de8405c62e4ccb..9cbe84f033ff2c 100644 --- a/x-pack/test/functional/apps/lens/group4/time_shift.ts +++ b/x-pack/test/functional/apps/lens/group4/time_shift.ts @@ -9,79 +9,79 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); describe('time shift', () => { it('should able to configure a shifted metric', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'median', field: 'bytes', }); - await PageObjects.lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); - await PageObjects.lens.enableTimeShift(); - await PageObjects.lens.setTimeShift('6h'); + await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); + await lens.enableTimeShift(); + await lens.setTimeShift('6h'); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('5,994'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 1)).to.eql('5,994'); }); it('should able to configure a regular metric next to a shifted metric', async () => { - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.closeDimensionEditor(); + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(2, 1)).to.eql('5,994'); - expect(await PageObjects.lens.getDatatableCellText(2, 2)).to.eql('5,722.622'); + expect(await lens.getDatatableCellText(2, 1)).to.eql('5,994'); + expect(await lens.getDatatableCellText(2, 2)).to.eql('5,722.622'); }); it('should show an error if terms is used and provide a fix action', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'terms', field: 'ip', }); - expect(await PageObjects.lens.hasFixAction()).to.be(true); - await PageObjects.lens.useFixAction(); + expect(await lens.hasFixAction()).to.be(true); + await lens.useFixAction(); - expect(await PageObjects.lens.getDatatableCellText(2, 2)).to.eql('6,976'); - expect(await PageObjects.lens.getDatatableCellText(2, 3)).to.eql('4,182.5'); + expect(await lens.getDatatableCellText(2, 2)).to.eql('6,976'); + expect(await lens.getDatatableCellText(2, 3)).to.eql('4,182.5'); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.eql('Filters of ip'); + expect(await lens.getDatatableHeaderText(0)).to.eql('Filters of ip'); }); it('should show an error if multi terms is used and provide a fix action', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'terms', field: 'ip', keepOpen: true, }); - await PageObjects.lens.addTermToAgg('geo.src'); + await lens.addTermToAgg('geo.src'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.hasFixAction()).to.be(true); - await PageObjects.lens.useFixAction(); + expect(await lens.hasFixAction()).to.be(true); + await lens.useFixAction(); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.eql('Filters of ip › geo.src'); + expect(await lens.getDatatableHeaderText(1)).to.eql('Filters of ip › geo.src'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group4/tsdb.ts b/x-pack/test/functional/apps/lens/group4/tsdb.ts index 730318f33db97e..bbe1eef8a442c5 100644 --- a/x-pack/test/functional/apps/lens/group4/tsdb.ts +++ b/x-pack/test/functional/apps/lens/group4/tsdb.ts @@ -238,7 +238,7 @@ function sumFirstNValues(n: number, bars: Array<{ y: number }> | undefined): num } export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'timePicker', 'lens', 'dashboard']); + const { common, lens, dashboard } = getPageObjects(['common', 'lens', 'dashboard']); const testSubjects = getService('testSubjects'); const find = getService('find'); const kibanaServer = getService('kibanaServer'); @@ -368,47 +368,47 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('for regular metric', () => { it('defaults to median for non-rolled up metric', async () => { - await PageObjects.common.navigateToApp('lens'); - await PageObjects.lens.waitForField('bytes_gauge'); - await PageObjects.lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + await common.navigateToApp('lens'); + await lens.waitForField('bytes_gauge'); + await lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Median of bytes_gauge' ); }); it('does not show a warning', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel'); await testSubjects.missingOrFail('median-partial-warning'); - await PageObjects.lens.assertNoEditorWarning(); - await PageObjects.lens.closeDimensionEditor(); + await lens.assertNoEditorWarning(); + await lens.closeDimensionEditor(); }); }); describe('for rolled up metric (downsampled)', () => { it('defaults to average for rolled up metric', async () => { - await PageObjects.lens.switchDataPanelIndexPattern(downsampleDataView.dataView); - await PageObjects.lens.removeLayer(); - await PageObjects.lens.waitForField('bytes_gauge'); - await PageObjects.lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + await lens.switchDataPanelIndexPattern(downsampleDataView.dataView); + await lens.removeLayer(); + await lens.waitForField('bytes_gauge'); + await lens.dragFieldToWorkspace('bytes_gauge', 'xyVisChart'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Average of bytes_gauge' ); }); it('shows warnings in editor when using median', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel'); await testSubjects.existOrFail('median-partial-warning'); await testSubjects.click('lns-indexPatternDimension-median'); - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.assertMessageListContains( + await lens.waitForVisualization('xyVisChart'); + await lens.assertMessageListContains( 'Median of bytes_gauge uses a function that is unsupported by rolled up data. Select a different function or change the time range.', 'warning' ); }); it('shows warnings in dashboards as well', async () => { - await PageObjects.lens.save('New', false, false, false, 'new'); + await lens.save('New', false, false, false, 'new'); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.lens.assertMessageListContains( + await dashboard.waitForRenderComplete(); + await lens.assertMessageListContains( 'Median of bytes_gauge uses a function that is unsupported by rolled up data. Select a different function or change the time range.', 'warning' ); @@ -418,13 +418,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('time series special field types support', () => { before(async () => { - await PageObjects.common.navigateToApp('lens'); - await PageObjects.lens.switchDataPanelIndexPattern(tsdbDataView); - await PageObjects.lens.goToTimeRange(); + await common.navigateToApp('lens'); + await lens.switchDataPanelIndexPattern(tsdbDataView); + await lens.goToTimeRange(); }); afterEach(async () => { - await PageObjects.lens.removeLayer(); + await lens.removeLayer(); }); // skip count for now as it's a special function and will @@ -459,14 +459,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (supportedOperations.length) { it(`should allow operations when supported by ${fieldType} field type`, async () => { // Counter rate requires a date histogram dimension configured to work - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // minimum supports all tsdb field types - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: `bytes_${fieldType}`, @@ -484,7 +484,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { for (const supportedOp of supportedOperations) { // try to change to the provided function and check all is ok - await PageObjects.lens.selectOperation(supportedOp.name); + await lens.selectOperation(supportedOp.name); expect( await find.existsByCssSelector( @@ -493,22 +493,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.be(false); // return in a clean state before checking the next operation - await PageObjects.lens.selectOperation('min'); + await lens.selectOperation('min'); } - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); } if (unsupportedOperatons.length) { it(`should notify the incompatibility of unsupported operations for the ${fieldType} field type`, async () => { // Counter rate requires a date histogram dimension configured to work - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // minimum supports all tsdb field types - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: `bytes_${fieldType}`, @@ -529,7 +529,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { for (const unsupportedOp of unsupportedOperatons) { // try to change to the provided function and check if it's in an incompatibility state - await PageObjects.lens.selectOperation(unsupportedOp.name, true); + await lens.selectOperation(unsupportedOp.name, true); const fieldSelectErrorEl = await find.byCssSelector( '[data-test-subj="indexPattern-field-selection-row"] .euiFormErrorText' @@ -540,28 +540,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); // return in a clean state before checking the next operation - await PageObjects.lens.selectOperation('min'); + await lens.selectOperation('min'); } - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); } } describe('show time series dimension groups within breakdown', () => { it('should show the time series dimension group on field picker when configuring a breakdown', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: 'bytes_counter', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', keepOpen: true, @@ -569,24 +569,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const list = await comboBox.getOptionsList('indexPattern-dimension-field'); expect(list).to.contain('Time series dimensions'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it("should not show the time series dimension group on field picker if it's not a breakdown", async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: 'bytes_counter', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', keepOpen: true, }); const list = await comboBox.getOptionsList('indexPattern-dimension-field'); expect(list).to.not.contain('Time series dimensions'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); }); }); @@ -701,10 +701,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }, { override: true } ); - await PageObjects.common.navigateToApp('lens'); + await common.navigateToApp('lens'); await elasticChart.setNewChartUiDebugFlag(true); // go to the - await PageObjects.lens.goToTimeRange( + await lens.goToTimeRange( fromTimeForScenarios, moment .utc(toTimeForScenarios, TIME_PICKER_FORMAT) @@ -731,8 +731,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.lens.switchDataPanelIndexPattern(dataViewName); - await PageObjects.lens.removeLayer(); + await lens.switchDataPanelIndexPattern(dataViewName); + await lens.removeLayer(); }); testingFn(indexes); @@ -774,13 +774,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { runTestsForEachScenario(streamConvertedToTsdbIndex, (indexes) => { it('should detect the data stream has now been upgraded to TSDB', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: `bytes_counter`, @@ -792,30 +792,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { timeout: 500, }) ).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it(`should visualize a date histogram chart for counter field`, async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // check the counter field works - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: `bytes_counter`, }); // and also that the count of documents should be "indexes.length" times overall - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); const counterBars = data?.bars![0].bars; const countBars = data?.bars![1].bars; @@ -876,13 +876,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { runTestsForEachScenario(tsdbConvertedToStream, (indexes) => { it('should keep TSDB restrictions only if a tsdb stream is in the dataView mix', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', field: `bytes_counter`, @@ -894,23 +894,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { timeout: 500, }) ).to.eql(indexes.some(({ tsdb }) => tsdb)); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it(`should visualize a date histogram chart for counter field`, async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // just check the data is shown - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const data = await lens.getCurrentChartDebugState('xyVisChart'); const bars = data?.bars![0].bars; const columnsToCheck = bars ? bars.length / 2 : 0; // due to the flaky nature of exact check here, we're going to relax it @@ -929,7 +929,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should visualize data when moving the time window around the downgrade moment', async () => { // check after the downgrade - await PageObjects.lens.goToTimeRange( + await lens.goToTimeRange( moment .utc(fromTimeForScenarios, TIME_PICKER_FORMAT) .subtract(1, 'hour') @@ -940,23 +940,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { .format(TIME_PICKER_FORMAT) // consider only new documents ); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const dataBefore = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const dataBefore = await lens.getCurrentChartDebugState('xyVisChart'); const barsBefore = dataBefore?.bars![0].bars; expect(barsBefore?.some(({ y }) => y)).to.eql(true); // check after the downgrade - await PageObjects.lens.goToTimeRange( + await lens.goToTimeRange( moment .utc(toTimeForScenarios, TIME_PICKER_FORMAT) .add(1, 'second') @@ -967,8 +967,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { .format(TIME_PICKER_FORMAT) // consider also new documents ); - await PageObjects.lens.waitForVisualization('xyVisChart'); - const dataAfter = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); + const dataAfter = await lens.getCurrentChartDebugState('xyVisChart'); const barsAfter = dataAfter?.bars![0].bars; expect(barsAfter?.some(({ y }) => y)).to.eql(true); }); diff --git a/x-pack/test/functional/apps/lens/group5/drag_and_drop.ts b/x-pack/test/functional/apps/lens/group5/drag_and_drop.ts index d1a449a6fa30bc..144c9f0b8995fa 100644 --- a/x-pack/test/functional/apps/lens/group5/drag_and_drop.ts +++ b/x-pack/test/functional/apps/lens/group5/drag_and_drop.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens, header } = getPageObjects(['visualize', 'lens', 'header']); const listingTable = getService('listingTable'); const xyChartContainer = 'xyVisChart'; @@ -17,48 +17,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens drag and drop tests', () => { describe('basic drag and drop', () => { it('should construct the basic split xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', xyChartContainer); - - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await header.waitUntilLoadingHasFinished(); + await lens.dragFieldToWorkspace('@timestamp', xyChartContainer); + + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); }); it('should allow dropping fields to existing and empty dimension triggers', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( 'clientip', 'lnsDatatable_rows > lns-dimensionTrigger' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_rows')).to.eql( + expect(await lens.getDimensionTriggerText('lnsDatatable_rows')).to.eql( 'Top 3 values of clientip' ); - await PageObjects.lens.dragFieldToDimensionTrigger( - 'bytes', - 'lnsDatatable_rows > lns-empty-dimension' - ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_rows', 1)).to.eql( - 'bytes' - ); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger('bytes', 'lnsDatatable_rows > lns-empty-dimension'); + expect(await lens.getDimensionTriggerText('lnsDatatable_rows', 1)).to.eql('bytes'); + await lens.dragFieldToDimensionTrigger( '@message.raw', 'lnsDatatable_rows > lns-empty-dimension' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_rows', 2)).to.eql( + expect(await lens.getDimensionTriggerText('lnsDatatable_rows', 2)).to.eql( 'Top 3 values of @message.raw' ); }); it('should reorder the elements for the table', async () => { - await PageObjects.lens.reorderDimensions('lnsDatatable_rows', 3, 1); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsDatatable_rows')).to.eql([ + await lens.reorderDimensions('lnsDatatable_rows', 3, 1); + await lens.waitForVisualization(); + expect(await lens.getDimensionTriggersTexts('lnsDatatable_rows')).to.eql([ 'Top 3 values of @message.raw', 'Top 3 values of clientip', 'bytes', @@ -66,168 +59,162 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should move the column to compatible dimension group', async () => { - await PageObjects.lens.switchToVisualization('bar'); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ + await lens.switchToVisualization('bar'); + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ 'Top 3 values of @message.raw', ]); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of clientip']); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of clientip', + ]); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lns-layerPanel-0 > lnsXY_xDimensionPanel > lns-dimensionTrigger', to: 'lns-layerPanel-0 > lnsXY_splitDimensionPanel > lns-dimensionTrigger', }); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql( - [] - ); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of @message.raw']); + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([]); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of @message.raw', + ]); }); it('should move the column to non-compatible dimension group', async () => { - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of @message.raw']); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of @message.raw', + ]); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', to: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', }); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql([]); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql([]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([]); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([]); + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of @message.raw', ]); }); it('should duplicate the column when dragging to empty dimension in the same group', async () => { - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', to: 'lnsXY_yDimensionPanel > lns-empty-dimension', }); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', to: 'lnsXY_yDimensionPanel > lns-empty-dimension', }); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of @message.raw', 'Count of @message.raw [1]', 'Count of @message.raw [2]', ]); }); it('should move duplicated column to non-compatible dimension group', async () => { - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', to: 'lnsXY_xDimensionPanel > lns-empty-dimension', }); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of @message.raw', 'Count of @message.raw [1]', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ 'Top 5 values of @message.raw', ]); }); it('Should duplicate and swap elements when dragging over secondary drop targets', async () => { - await PageObjects.lens.removeLayer(); - await PageObjects.lens.switchToVisualization('bar'); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', xyChartContainer); + await lens.removeLayer(); + await lens.switchToVisualization('bar'); + await lens.dragFieldToWorkspace('@timestamp', xyChartContainer); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lnsXY_xDimensionPanel > lns-dimensionTrigger', 'lnsXY_splitDimensionPanel', 'duplicate', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( '@timestamp [1]' ); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( '@message.raw', 'lnsXY_yDimensionPanel > lns-dimensionTrigger' ); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', 'lnsXY_yDimensionPanel', 'swap', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Count of @timestamp' ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( 'Top 3 values of @message.raw' ); }); it('should combine breakdown dimension with the horizontal one', async () => { - await PageObjects.lens.removeLayer(); - await PageObjects.lens.dragFieldToWorkspace('clientip', xyChartContainer); - await PageObjects.lens.dragFieldToWorkspace('@message.raw', xyChartContainer); + await lens.removeLayer(); + await lens.dragFieldToWorkspace('clientip', xyChartContainer); + await lens.dragFieldToWorkspace('@message.raw', xyChartContainer); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', 'lnsXY_xDimensionPanel', 'combine', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( 'Top values of clientip + 1 other' ); }); it('should combine field to existing horizontal dimension', async () => { - await PageObjects.lens.removeLayer(); - await PageObjects.lens.dragFieldToWorkspace('clientip', xyChartContainer); + await lens.removeLayer(); + await lens.dragFieldToWorkspace('clientip', xyChartContainer); - await PageObjects.lens.dragFieldToExtraDropType( + await lens.dragFieldToExtraDropType( '@message.raw', 'lnsXY_xDimensionPanel', 'combine', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( 'Top values of clientip + 1 other' ); }); it('should combine two multi terms dimensions', async () => { - await PageObjects.lens.removeLayer(); - await PageObjects.lens.dragFieldToWorkspace('clientip', xyChartContainer); + await lens.removeLayer(); + await lens.dragFieldToWorkspace('clientip', xyChartContainer); - await PageObjects.lens.dragFieldToExtraDropType( + await lens.dragFieldToExtraDropType( '@message.raw', 'lnsXY_xDimensionPanel', 'combine', xyChartContainer ); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( '@message.raw', 'lnsXY_splitDimensionPanel > lns-empty-dimension' ); - await PageObjects.lens.dragFieldToExtraDropType( + await lens.dragFieldToExtraDropType( 'geo.src', 'lnsXY_splitDimensionPanel', 'combine', xyChartContainer ); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', 'lnsXY_xDimensionPanel', 'combine', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( 'Top values of clientip + 2 others' ); }); @@ -235,251 +222,239 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('keyboard drag and drop', () => { it('should drop a field to workspace', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.dragFieldWithKeyboard('@timestamp'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); - await PageObjects.lens.assertFocusedField('@timestamp'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await header.waitUntilLoadingHasFinished(); + await lens.dragFieldWithKeyboard('@timestamp'); + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); + await lens.assertFocusedField('@timestamp'); }); it('should drop a field to empty dimension', async () => { - await PageObjects.lens.dragFieldWithKeyboard('bytes', 4); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + await lens.dragFieldWithKeyboard('bytes', 4); + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of records', 'Median of bytes', ]); - await PageObjects.lens.dragFieldWithKeyboard('@message.raw', 1, true); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of @message.raw']); - await PageObjects.lens.assertFocusedField('@message.raw'); + await lens.dragFieldWithKeyboard('@message.raw', 1, true); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of @message.raw', + ]); + await lens.assertFocusedField('@message.raw'); }); it('should drop a field to an existing dimension replacing the old one', async () => { - await PageObjects.lens.dragFieldWithKeyboard('clientip', 1, true); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of clientip']); + await lens.dragFieldWithKeyboard('clientip', 1, true); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of clientip', + ]); - await PageObjects.lens.assertFocusedField('clientip'); + await lens.assertFocusedField('clientip'); }); it('should duplicate an element in a group', async () => { - await PageObjects.lens.dimensionKeyboardDragDrop('lnsXY_yDimensionPanel', 0, 1); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + await lens.dimensionKeyboardDragDrop('lnsXY_yDimensionPanel', 0, 1); + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of records', 'Median of bytes', 'Count of records [1]', ]); - await PageObjects.lens.assertFocusedDimension('Count of records [1]'); + await lens.assertFocusedDimension('Count of records [1]'); }); it('should move dimension to compatible dimension', async () => { - await PageObjects.lens.dimensionKeyboardDragDrop('lnsXY_xDimensionPanel', 0, 5); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql( - [] - ); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['@timestamp']); + await lens.dimensionKeyboardDragDrop('lnsXY_xDimensionPanel', 0, 5); + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([]); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + '@timestamp', + ]); - await PageObjects.lens.dimensionKeyboardDragDrop('lnsXY_splitDimensionPanel', 0, 5, true); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ + await lens.dimensionKeyboardDragDrop('lnsXY_splitDimensionPanel', 0, 5, true); + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ '@timestamp', ]); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql([]); - await PageObjects.lens.assertFocusedDimension('@timestamp'); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([]); + await lens.assertFocusedDimension('@timestamp'); }); it('should move dimension to incompatible dimension', async () => { - await PageObjects.lens.dimensionKeyboardDragDrop('lnsXY_yDimensionPanel', 1, 2); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['bytes']); + await lens.dimensionKeyboardDragDrop('lnsXY_yDimensionPanel', 1, 2); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql(['bytes']); - await PageObjects.lens.dimensionKeyboardDragDrop('lnsXY_xDimensionPanel', 0, 2); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + await lens.dimensionKeyboardDragDrop('lnsXY_xDimensionPanel', 0, 2); + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of records', 'Count of @timestamp', ]); - await PageObjects.lens.assertFocusedDimension('Count of @timestamp'); + await lens.assertFocusedDimension('Count of @timestamp'); }); it('should reorder elements with keyboard', async () => { - await PageObjects.lens.dimensionKeyboardReorder('lnsXY_yDimensionPanel', 0, 1); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ + await lens.dimensionKeyboardReorder('lnsXY_yDimensionPanel', 0, 1); + expect(await lens.getDimensionTriggersTexts('lnsXY_yDimensionPanel')).to.eql([ 'Count of @timestamp', 'Count of records', ]); - await PageObjects.lens.assertFocusedDimension('Count of records'); + await lens.assertFocusedDimension('Count of records'); }); }); describe('workspace drop', () => { it('should always nest time dimension in categorical dimension', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', xyChartContainer); - await PageObjects.lens.waitForVisualization(xyChartContainer); - await PageObjects.lens.dragFieldToWorkspace('clientip', xyChartContainer); - await PageObjects.lens.waitForVisualization(xyChartContainer); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel') - ).to.eql(['Top 3 values of clientip']); - await PageObjects.lens.openDimensionEditor( - 'lnsXY_splitDimensionPanel > lns-dimensionTrigger' - ); - expect(await PageObjects.lens.isTopLevelAggregation()).to.be(true); - await PageObjects.lens.closeDimensionEditor(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await header.waitUntilLoadingHasFinished(); + await lens.dragFieldToWorkspace('@timestamp', xyChartContainer); + await lens.waitForVisualization(xyChartContainer); + await lens.dragFieldToWorkspace('clientip', xyChartContainer); + await lens.waitForVisualization(xyChartContainer); + expect(await lens.getDimensionTriggersTexts('lnsXY_splitDimensionPanel')).to.eql([ + 'Top 3 values of clientip', + ]); + await lens.openDimensionEditor('lnsXY_splitDimensionPanel > lns-dimensionTrigger'); + expect(await lens.isTopLevelAggregation()).to.be(true); + await lens.closeDimensionEditor(); }); it('overwrite existing time dimension if one exists already', async () => { - await PageObjects.lens.searchField('utc'); - await PageObjects.lens.dragFieldToWorkspace('utc_time', xyChartContainer); - await PageObjects.lens.waitForVisualization(xyChartContainer); - await PageObjects.lens.searchField('client'); - await PageObjects.lens.dragFieldToWorkspace('clientip', xyChartContainer); - await PageObjects.lens.waitForVisualization(xyChartContainer); - expect(await PageObjects.lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql([ - 'utc_time', - ]); + await lens.searchField('utc'); + await lens.dragFieldToWorkspace('utc_time', xyChartContainer); + await lens.waitForVisualization(xyChartContainer); + await lens.searchField('client'); + await lens.dragFieldToWorkspace('clientip', xyChartContainer); + await lens.waitForVisualization(xyChartContainer); + expect(await lens.getDimensionTriggersTexts('lnsXY_xDimensionPanel')).to.eql(['utc_time']); }); }); describe('dropping between layers', () => { it('should move the column', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); - await PageObjects.lens.createLayer('data'); + await lens.createLayer('data'); // here the editor will error out as the mandatory vertical axis is missing - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lns-layerPanel-0 > lnsXY_xDimensionPanel > lns-dimensionTrigger', 'lns-layerPanel-1 > lnsXY_xDimensionPanel', 'duplicate', 'workspace-error-message' ); - await PageObjects.lens.assertFocusedDimension('@timestamp [1]'); + await lens.assertFocusedDimension('@timestamp [1]'); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lns-layerPanel-0 > lnsXY_yDimensionPanel > lns-dimensionTrigger', 'lns-layerPanel-1 > lnsXY_yDimensionPanel', 'duplicate', xyChartContainer ); - await PageObjects.lens.assertFocusedDimension('Average of bytes [1]'); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ + await lens.assertFocusedDimension('Average of bytes [1]'); + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ '@timestamp', 'Average of bytes', 'Top 3 values of ip', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ '@timestamp [1]', 'Average of bytes [1]', ]); }); it('should move formula to empty dimension', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'formula', formula: `moving_average(average(bytes), window=5`, }); - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lns-layerPanel-0 > lnsXY_yDimensionPanel > lns-dimensionTrigger', 'lns-layerPanel-1 > lnsXY_yDimensionPanel', 'duplicate', xyChartContainer ); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ '@timestamp', 'moving_average(average(bytes), window=5)', 'Top 3 values of ip', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ '@timestamp [1]', 'moving_average(average(bytes), window=5) [1]', ]); }); it('should replace formula with another formula', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'formula', formula: `sum(bytes) + 5`, }); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lns-layerPanel-0 > lnsXY_yDimensionPanel > lns-dimensionTrigger', to: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-dimensionTrigger', }); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ '@timestamp', 'Top 3 values of ip', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ '@timestamp [1]', 'moving_average(average(bytes), window=5)', ]); }); it('swaps dimensions', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); - await PageObjects.lens.createLayer('data'); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.createLayer('data'); + await lens.dragFieldToDimensionTrigger( 'bytes', 'lns-layerPanel-0 > lnsXY_yDimensionPanel > lns-empty-dimension' ); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( 'bytes', 'lns-layerPanel-1 > lnsXY_splitDimensionPanel > lns-empty-dimension' ); // here the editor will error out as the mandatory vertical axis is missing - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lns-layerPanel-1 > lnsXY_splitDimensionPanel > lns-dimensionTrigger', 'lns-layerPanel-0 > lnsXY_splitDimensionPanel', 'swap', 'workspace-error-message' ); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ '@timestamp', 'Average of bytes', 'Median of bytes', 'bytes', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ 'Top 3 values of ip', ]); }); it('can combine dimensions', async () => { // here the editor will error out as the mandatory vertical axis is missing - await PageObjects.lens.dragDimensionToExtraDropType( + await lens.dragDimensionToExtraDropType( 'lns-layerPanel-0 > lnsXY_splitDimensionPanel > lns-dimensionTrigger', 'lns-layerPanel-1 > lnsXY_splitDimensionPanel', 'combine', 'workspace-error-message' ); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-0')).to.eql([ '@timestamp', 'Average of bytes', 'Median of bytes', ]); - expect(await PageObjects.lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ + expect(await lens.getDimensionTriggersTexts('lns-layerPanel-1')).to.eql([ 'Top values of ip + 1 other', ]); }); diff --git a/x-pack/test/functional/apps/lens/group5/formula.ts b/x-pack/test/functional/apps/lens/group5/formula.ts index e02548d7108ca6..95404faf5a99d4 100644 --- a/x-pack/test/functional/apps/lens/group5/formula.ts +++ b/x-pack/test/functional/apps/lens/group5/formula.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens, common } = getPageObjects(['visualize', 'lens', 'common']); const find = getService('find'); const listingTable = getService('listingTable'); const browser = getService('browser'); @@ -20,20 +20,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens formula', () => { it('should transition from count to formula', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'average', field: 'bytes', keepOpen: true, }); - await PageObjects.lens.switchToFormula(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.switchToFormula(); + await lens.waitForVisualization('xyVisChart'); // .echLegendItem__title is the only viable way of getting the xy chart's // legend item(s), so we're using a class selector here. // 4th item is the other bucket @@ -41,12 +41,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should update and delete a formula', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count(kql=`, @@ -57,17 +57,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await input.type('*'); await retry.try(async () => { - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('14,005'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('14,005'); }); }); it('should insert single quotes and escape when needed to create valid KQL', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count(kql=`, @@ -79,222 +79,220 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await input.pressKeys(browser.keys.ARROW_LEFT); await input.type(`Men's Clothing`); - await PageObjects.common.sleep(100); + await common.sleep(100); - await PageObjects.lens.expectFormulaText(`count(kql='Men\\'s Clothing ')`); + await lens.expectFormulaText(`count(kql='Men\\'s Clothing ')`); - await PageObjects.lens.typeFormula('count(kql='); + await lens.typeFormula('count(kql='); input = await find.activeElement(); await input.type(`Men\'s Clothing`); - await PageObjects.common.sleep(100); + await common.sleep(100); - await PageObjects.lens.expectFormulaText(`count(kql='Men\\'s Clothing')`); + await lens.expectFormulaText(`count(kql='Men\\'s Clothing')`); }); it('should insert single quotes and escape when needed to create valid field name', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); await dataViews.clickAddFieldFromSearchBar(); await fieldEditor.setName(`ab' "'`, true, true); await fieldEditor.enableValue(); await fieldEditor.typeScript("emit('abc')"); await fieldEditor.save(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'unique_count', field: `ab`, keepOpen: true, }); - await PageObjects.lens.switchToFormula(); - await PageObjects.lens.expectFormulaText(`unique_count('ab\\' "\\'')`); + await lens.switchToFormula(); + await lens.expectFormulaText(`unique_count('ab\\' "\\'')`); - await PageObjects.lens.typeFormula('unique_count('); + await lens.typeFormula('unique_count('); const input = await find.activeElement(); await input.type('ab'); await input.pressKeys(browser.keys.ENTER); - await PageObjects.common.sleep(100); + await common.sleep(100); - await PageObjects.lens.expectFormulaText(`unique_count('ab\\' "\\'')`); + await lens.expectFormulaText(`unique_count('ab\\' "\\'')`); }); it('should persist a broken formula on close', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); // Close immediately - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `asdf`, }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql('asdf'); + expect(await lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql('asdf'); - await PageObjects.lens.assertMessageListContains('Field asdf was not found.', 'error'); + await lens.assertMessageListContains('Field asdf was not found.', 'error'); }); it('should keep the formula when entering expanded mode', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.toggleFullscreen(); + await lens.toggleFullscreen(); const element = await find.byCssSelector('.monaco-editor'); expect(await element.getVisibleText()).to.equal('count()'); }); it('should allow an empty formula combined with a valid formula', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count()`, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', }); - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(0); + await lens.waitForVisualization(); + expect(await lens.getWorkspaceErrorCount()).to.eql(0); }); it('should duplicate a moving average formula and be a valid table with conditional coloring', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `moving_average(sum(bytes), window=5`, keepOpen: true, }); - await PageObjects.lens.setTableDynamicColoring('text'); - await PageObjects.lens.waitForVisualization(); - const styleObj = await PageObjects.lens.getDatatableCellStyle(1, 1); + await lens.setTableDynamicColoring('text'); + await lens.waitForVisualization(); + const styleObj = await lens.getDatatableCellStyle(1, 1); expect(styleObj['background-color']).to.be(undefined); expect(styleObj.color).not.to.be(undefined); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsDatatable_metrics > lns-dimensionTrigger', to: 'lnsDatatable_metrics > lns-empty-dimension', }); - expect(await PageObjects.lens.getDatatableCellText(1, 1)).to.eql('222,420'); - expect(await PageObjects.lens.getDatatableCellText(1, 2)).to.eql('222,420'); + expect(await lens.getDatatableCellText(1, 1)).to.eql('222,420'); + expect(await lens.getDatatableCellText(1, 2)).to.eql('222,420'); }); it('should keep the formula if the user does not fully transition to a quick function', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.switchToQuickFunctions(); + await lens.switchToQuickFunctions(); await testSubjects.click(`lns-indexPatternDimension-min incompatible`); - await PageObjects.common.sleep(1000); - await PageObjects.lens.closeDimensionEditor(); + await common.sleep(1000); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_metrics', 0)).to.eql( - 'count()' - ); + expect(await lens.getDimensionTriggerText('lnsDatatable_metrics', 0)).to.eql('count()'); }); it('should keep the formula if the user does not fully transition to a static value', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yReferenceLineLeftPanel > lns-dimensionTrigger', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.switchToStaticValue(); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.common.sleep(1000); + await lens.switchToStaticValue(); + await lens.closeDimensionEditor(); + await common.sleep(1000); - expect( - await PageObjects.lens.getDimensionTriggerText('lnsXY_yReferenceLineLeftPanel', 0) - ).to.eql('count()'); + expect(await lens.getDimensionTriggerText('lnsXY_yReferenceLineLeftPanel', 0)).to.eql( + 'count()' + ); }); it('should allow numeric only formulas', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `0`, }); - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsDatatable_metrics > lns-dimensionTrigger', to: 'lnsDatatable_metrics > lns-empty-dimension', }); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('0'); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('0'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('0'); + expect(await lens.getDatatableCellText(0, 1)).to.eql('0'); }); it('should apply a global filter to the current formula', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'formula', formula: `count()`, @@ -302,28 +300,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // check the numbers - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('14,005'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('14,005'); // add an advanced filter by filter - await PageObjects.lens.enableFilter(); - await PageObjects.lens.setFilterBy('bytes > 4000'); + await lens.enableFilter(); + await lens.setFilterBy('bytes > 4000'); // check that numbers changed - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); await retry.try(async () => { - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('9,169'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('9,169'); }); // now change the formula to add an inner filter to count - await PageObjects.lens.typeFormula(`count(kql=`); + await lens.typeFormula(`count(kql=`); const input = await find.activeElement(); await input.type(`bytes > 600000`); // the autocomplete will add quotes and closing brakets, so do not worry about that - await PageObjects.lens.waitForVisualization(); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('0'); + await lens.waitForVisualization(); + expect(await lens.getDatatableCellText(0, 0)).to.eql('0'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group5/gauge.ts b/x-pack/test/functional/apps/lens/group5/gauge.ts index 20980857f9d1ab..eea38d486833d3 100644 --- a/x-pack/test/functional/apps/lens/group5/gauge.ts +++ b/x-pack/test/functional/apps/lens/group5/gauge.ts @@ -10,34 +10,34 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header', 'timePicker']); + const { visualize, lens, timePicker } = getPageObjects(['visualize', 'lens', 'timePicker']); const elasticChart = getService('elasticChart'); const testSubjects = getService('testSubjects'); describe('lens gauge', () => { before(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); }); it('should switch to gauge and render a gauge with default values', async () => { - await PageObjects.lens.switchToVisualization('lnsGauge', 'gauge'); - await PageObjects.lens.waitForVisualization('gaugeChart'); + await lens.switchToVisualization('lnsGauge', 'gauge'); + await lens.waitForVisualization('gaugeChart'); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; expect(debugData?.subtype).to.be(BulletSubtype.horizontal); @@ -47,9 +47,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should reflect edits for gauge', async () => { - await PageObjects.lens.switchToVisualization('lnsGauge', 'gauge'); - await PageObjects.lens.waitForVisualization('gaugeChart'); - await PageObjects.lens.configureDimension({ + await lens.switchToVisualization('lnsGauge', 'gauge'); + await lens.waitForVisualization('gaugeChart'); + await lens.configureDimension({ dimension: 'lnsGauge_metricDimensionPanel > lns-dimensionTrigger', operation: 'count', field: 'Records', @@ -58,33 +58,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await testSubjects.setEuiSwitch('lnsDynamicColoringGaugeSwitch', 'check'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.openTextOptions(); - await PageObjects.lens.retrySetValue('lnsToolbarGaugeLabelMajor', 'custom title'); - await PageObjects.lens.retrySetValue('lnsToolbarGaugeLabelMinor-select', 'custom', {}); - await PageObjects.lens.retrySetValue('lnsToolbarGaugeLabelMinor', 'custom subtitle'); + await lens.openTextOptions(); + await lens.retrySetValue('lnsToolbarGaugeLabelMajor', 'custom title'); + await lens.retrySetValue('lnsToolbarGaugeLabelMinor-select', 'custom', {}); + await lens.retrySetValue('lnsToolbarGaugeLabelMinor', 'custom subtitle'); - await PageObjects.lens.waitForVisualization('gaugeChart'); - await PageObjects.lens.openDimensionEditor( - 'lnsGauge_goalDimensionPanel > lns-empty-dimension' - ); + await lens.waitForVisualization('gaugeChart'); + await lens.openDimensionEditor('lnsGauge_goalDimensionPanel > lns-empty-dimension'); - await PageObjects.lens.waitForVisualization('gaugeChart'); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.openDimensionEditor( + await lens.waitForVisualization('gaugeChart'); + await lens.closeDimensionEditor(); + await lens.openDimensionEditor( 'lnsGauge_minDimensionPanel > lns-empty-dimension-suggested-value' ); - await PageObjects.lens.retrySetValue('lns-indexPattern-static_value-input', '1000'); - await PageObjects.lens.waitForVisualization('gaugeChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.retrySetValue('lns-indexPattern-static_value-input', '1000'); + await lens.waitForVisualization('gaugeChart'); + await lens.closeDimensionEditor(); - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsGauge_maxDimensionPanel > lns-empty-dimension-suggested-value' ); - await PageObjects.lens.retrySetValue('lns-indexPattern-static_value-input', '25000'); - await PageObjects.lens.waitForVisualization('gaugeChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.retrySetValue('lns-indexPattern-static_value-input', '25000'); + await lens.waitForVisualization('gaugeChart'); + await lens.closeDimensionEditor(); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; @@ -96,7 +94,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(debugData?.domain).to.eql([1000, 25000]); }); it('should seamlessly switch to vertical bullet chart without losing configuration', async () => { - await PageObjects.lens.openVisualOptions(); + await lens.openVisualOptions(); await testSubjects.click('lns_gaugeOrientation_verticalBullet'); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; @@ -108,8 +106,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(debugData?.domain).to.eql([1000, 25000]); }); it('should seamlessly switch to minor arc gauge chart without losing configuration', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Minor arc'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Minor arc'); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; expect(debugData?.subtype).to.be(BulletSubtype.halfCircle); @@ -120,8 +118,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(debugData?.domain).to.eql([1000, 25000]); }); it('should seamlessly switch to arc gauge chart without losing configuration', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Major arc'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Major arc'); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; expect(debugData?.subtype).to.be(BulletSubtype.twoThirdsCircle); @@ -132,8 +130,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(debugData?.domain).to.eql([1000, 25000]); }); it('should seamlessly switch to circular gauge chart without losing configuration', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Circle'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Circle'); const { bullet } = await elasticChart.getChartDebugData(); const debugData = bullet?.rows[0][0]; expect(debugData?.subtype).to.be(BulletSubtype.circle); @@ -144,10 +142,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(debugData?.domain).to.eql([1000, 25000]); }); it('should switch to table chart and filter not supported static values', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); - const columnsCount = await PageObjects.lens.getCountOfDatatableColumns(); + await lens.switchToVisualization('lnsDatatable'); + const columnsCount = await lens.getCountOfDatatableColumns(); expect(columnsCount).to.eql(1); - expect(await PageObjects.lens.getDatatableHeaderText(0)).to.equal('Count of records'); + expect(await lens.getDatatableHeaderText(0)).to.equal('Count of records'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group5/geo_field.ts b/x-pack/test/functional/apps/lens/group5/geo_field.ts index 98008e3b7bb12a..a5851263fae896 100644 --- a/x-pack/test/functional/apps/lens/group5/geo_field.ts +++ b/x-pack/test/functional/apps/lens/group5/geo_field.ts @@ -8,13 +8,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ +export default function ({ getPageObjects }: FtrProviderContext) { + const { visualize, lens, header, maps, common } = getPageObjects([ 'visualize', 'lens', 'header', 'maps', - 'timePicker', 'common', ]); const from = 'Sep 22, 2015 @ 00:00:00.000'; @@ -22,30 +21,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens visualize geo field tests', () => { before(async () => { - await PageObjects.common.setTime({ from, to }); + await common.setTime({ from, to }); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should visualize geo fields in maps', async () => { // as navigation does not happen via URL refresh by default, force a reset via URL navigation - await PageObjects.visualize.navigateToNewVisualization({ forceRefresh: true }); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.switchDataPanelIndexPattern('logstash-*'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.dragFieldToGeoFieldWorkspace('geo.coordinates'); + await visualize.navigateToNewVisualization({ forceRefresh: true }); + await visualize.clickVisType('lens'); + await lens.switchDataPanelIndexPattern('logstash-*'); + await header.waitUntilLoadingHasFinished(); + await lens.dragFieldToGeoFieldWorkspace('geo.coordinates'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - const doesLayerExist = await PageObjects.maps.doesLayerExist('logstash-*'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + const doesLayerExist = await maps.doesLayerExist('logstash-*'); expect(doesLayerExist).to.equal(true); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('logstash-*'); + const tooltipText = await maps.getLayerTocTooltipMsg('logstash-*'); expect(tooltipText).to.equal( 'logstash-*\nFound 66 documents.\nResults narrowed by global time' ); - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); }); }); } diff --git a/x-pack/test/functional/apps/lens/group5/heatmap.ts b/x-pack/test/functional/apps/lens/group5/heatmap.ts index 746aa33e244f99..7597b0448433dc 100644 --- a/x-pack/test/functional/apps/lens/group5/heatmap.ts +++ b/x-pack/test/functional/apps/lens/group5/heatmap.ts @@ -9,36 +9,36 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens, common } = getPageObjects(['visualize', 'lens', 'common']); const elasticChart = getService('elasticChart'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); describe('lens heatmap', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); }); it('should render heatmap chart with the temperature palette', async () => { - await PageObjects.lens.switchToVisualization('heatmap', 'heat'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + await lens.switchToVisualization('heatmap', 'heat'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert axes expect(debugState?.axes!.x[0].labels).to.eql([ @@ -65,16 +65,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should reflect stop colors change on the chart', async () => { - await PageObjects.lens.openDimensionEditor('lnsHeatmap_cellPanel > lns-dimensionTrigger'); - await PageObjects.lens.openPalettePanel(); - await PageObjects.common.sleep(1000); + await lens.openDimensionEditor('lnsHeatmap_cellPanel > lns-dimensionTrigger'); + await lens.openPalettePanel(); + await common.sleep(1000); await retry.try(async () => { await testSubjects.setValue('lnsPalettePanel_dynamicColoring_range_value_0', '10', { clearWithKeyboard: true, typeCharByChar: true, }); }); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has changed expect(debugState?.legend!.items).to.eql([ @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should not change when passing from percentage to number', async () => { await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_number'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has changed expect(debugState?.legend!.items).to.eql([ @@ -109,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { clearWithKeyboard: true, }); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has changed expect(debugState?.legend!.items).to.eql([ @@ -127,7 +127,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.setValue('lnsPalettePanel_dynamicColoring_range_value_0', '5722.7747', { clearWithKeyboard: true, }); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has a rounded value expect(debugState?.legend!.items).to.eql([ @@ -144,9 +144,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should reset stop numbers when changing palette', async () => { - await PageObjects.lens.changePaletteTo('status'); + await lens.changePaletteTo('status'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has changed expect(debugState?.legend!.items).to.eql([ @@ -161,7 +161,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should not change when passing from number to percent', async () => { await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_percent'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); // assert legend has not changed expect(debugState?.legend!.items).to.eql([ @@ -175,12 +175,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Skip for now as EC is not reporting title it.skip('should display axis values when setting axis title mode to Auto', async () => { - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton'); + await lens.toggleToolbarPopover('lnsLeftAxisButton'); await testSubjects.selectValue('lnsLeftAxisTitle-select', 'Auto'); - const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + const debugState = await lens.getCurrentChartDebugState('heatmapChart'); expect(debugState?.axes?.y?.[0].title).to.eql('Average of bytes'); }); diff --git a/x-pack/test/functional/apps/lens/group5/index.ts b/x-pack/test/functional/apps/lens/group5/index.ts index e995a67c6e466f..e0740ab4d49620 100644 --- a/x-pack/test/functional/apps/lens/group5/index.ts +++ b/x-pack/test/functional/apps/lens/group5/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -54,7 +54,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -65,7 +65,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group5/tagcloud.ts b/x-pack/test/functional/apps/lens/group5/tagcloud.ts index c33ffc67d556f3..dd718a476a4890 100644 --- a/x-pack/test/functional/apps/lens/group5/tagcloud.ts +++ b/x-pack/test/functional/apps/lens/group5/tagcloud.ts @@ -9,38 +9,43 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header', 'tagCloud']); + const { visualize, lens, header, tagCloud } = getPageObjects([ + 'visualize', + 'lens', + 'header', + 'tagCloud', + ]); const elasticChart = getService('elasticChart'); const filterBar = getService('filterBar'); describe('lens tagcloud', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsTagcloud', 'Tag cloud'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsTagcloud', 'Tag cloud'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsTagcloud_tagDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsTagcloud_valueDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.waitForVisualization('tagCloudVisualization'); + await header.waitUntilLoadingHasFinished(); + await lens.waitForVisualization('tagCloudVisualization'); // avoid picking up tags in suggestion panel by closing panel - await PageObjects.lens.closeSuggestionPanel(); + await lens.closeSuggestionPanel(); }); it('should render tagcloud', async () => { - const tags = await PageObjects.tagCloud.getTextTag(); + const tags = await tagCloud.getTextTag(); expect(tags).to.eql([ '97.220.3.248', '78.83.247.30', @@ -51,14 +56,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add filter from clicking on tag', async () => { - await PageObjects.tagCloud.selectTagCloudTag('97.220.3.248'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await tagCloud.selectTagCloudTag('97.220.3.248'); + await header.waitUntilLoadingHasFinished(); const hasTagFilter = await filterBar.hasFilter('ip', '97.220.3.248'); expect(hasTagFilter).to.be(true); }); it('should filter results by filter bar', async () => { - const tags = await PageObjects.tagCloud.getTextTag(); + const tags = await tagCloud.getTextTag(); expect(tags).to.eql(['97.220.3.248']); }); }); diff --git a/x-pack/test/functional/apps/lens/group6/annotations.ts b/x-pack/test/functional/apps/lens/group6/annotations.ts index b5f498b2091781..7556440eeb3bb2 100644 --- a/x-pack/test/functional/apps/lens/group6/annotations.ts +++ b/x-pack/test/functional/apps/lens/group6/annotations.ts @@ -9,14 +9,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { visualize, lens, common, tagManagement } = getPageObjects([ 'visualize', 'lens', 'common', - 'header', 'tagManagement', - 'settings', - 'savedObjects', ]); const find = getService('find'); const retry = getService('retry'); @@ -28,16 +25,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens annotations tests', () => { before(async () => { - await PageObjects.common.setTime({ from, to }); + await common.setTime({ from, to }); }); after(async () => { - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should show a disabled annotation layer button if there is no date histogram in data layer', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.dragFieldToWorkspace('geo.src', 'xyVisChart'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.dragFieldToWorkspace('geo.src', 'xyVisChart'); await testSubjects.click('lnsLayerAddButton'); await retry.waitFor('wait for layer popup to appear', async () => testSubjects.exists(`lnsLayerAddButton-annotations`) @@ -48,11 +45,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add manual annotation layer with static date and allow edition', async () => { - await PageObjects.lens.removeLayer(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); + await lens.removeLayer(); + await lens.goToTimeRange(); + await lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); expect((await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`)).length).to.eql(2); expect( @@ -62,7 +59,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.eql('Event'); await testSubjects.click('lnsXY_xAnnotationsPanel > lns-dimensionTrigger'); await testSubjects.click('lnsXY_textVisibility_name'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await testSubjects.existOrFail('xyVisAnnotationIcon'); await testSubjects.existOrFail('xyVisAnnotationText'); @@ -70,7 +67,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should duplicate the style when duplicating an annotation and group them in the chart', async () => { // drag and drop to the empty field to generate a duplicate - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_xAnnotationsPanel > lns-dimensionTrigger', to: 'lnsXY_xAnnotationsPanel > lns-empty-dimension', }); @@ -85,13 +82,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '[data-test-subj="lnsXY_textVisibility_name"][class*="euiButtonGroupButton-isSelected"]' ) ).to.be(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await testSubjects.existOrFail('xyVisGroupedAnnotationIcon'); }); it('should add query annotation layer and allow edition', async () => { - await PageObjects.lens.removeLayer(1); - await PageObjects.lens.createLayer('annotations'); + await lens.removeLayer(1); + await lens.createLayer('annotations'); expect((await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`)).length).to.eql(2); expect( @@ -101,13 +98,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ).to.eql('Event'); await testSubjects.click('lnsXY_xAnnotationsPanel > lns-dimensionTrigger'); await testSubjects.click('lnsXY_annotation_query'); - await PageObjects.lens.configureQueryAnnotation({ + await lens.configureQueryAnnotation({ queryString: '*', timeField: 'utc_time', textDecoration: { type: 'name' }, extraFields: ['clientip'], }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await testSubjects.existOrFail('xyVisGroupedAnnotationIcon'); }); @@ -118,24 +115,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const SECOND_VIS_TITLE = 'second visualization'; it('should save annotation group to library', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); + await lens.goToTimeRange(); + await lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); - await PageObjects.lens.createLayer('annotations'); + await lens.createLayer('annotations'); - await PageObjects.lens.performLayerAction('lnsXY_annotationLayer_saveToLibrary', 1); + await lens.performLayerAction('lnsXY_annotationLayer_saveToLibrary', 1); - await PageObjects.visualize.setSaveModalValues(ANNOTATION_GROUP_TITLE, { + await visualize.setSaveModalValues(ANNOTATION_GROUP_TITLE, { description: 'my description', }); await testSubjects.click('savedObjectTagSelector'); await testSubjects.click(`tagSelectorOption-action__create`); - const { tagModal } = PageObjects.tagManagement; + const { tagModal } = tagManagement; expect(await tagModal.isOpened()).to.be(true); @@ -161,38 +158,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { `Saved "${ANNOTATION_GROUP_TITLE}"\nView or manage in the annotation library.` ); - await PageObjects.lens.save(FIRST_VIS_TITLE); + await lens.save(FIRST_VIS_TITLE); // TODO test that saved object info gets populated on subsequent save }); it('should add annotation group from library', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); + await lens.goToTimeRange(); + await lens.dragFieldToWorkspace('@timestamp', 'xyVisChart'); - await PageObjects.lens.createLayer('annotations', ANNOTATION_GROUP_TITLE); + await lens.createLayer('annotations', ANNOTATION_GROUP_TITLE); await retry.try(async () => { - expect(await PageObjects.lens.getLayerCount()).to.be(2); + expect(await lens.getLayerCount()).to.be(2); }); - await PageObjects.lens.save(SECOND_VIS_TITLE); + await lens.save(SECOND_VIS_TITLE); }); it('should remove layer for deleted annotation group', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.selectAnnotationsTab(); + await visualize.gotoVisualizationLandingPage(); + await visualize.selectAnnotationsTab(); await listingTable.deleteItem(ANNOTATION_GROUP_TITLE); - await PageObjects.visualize.selectVisualizationsTab(); - await PageObjects.visualize.loadSavedVisualization(FIRST_VIS_TITLE, { + await visualize.selectVisualizationsTab(); + await visualize.loadSavedVisualization(FIRST_VIS_TITLE, { navigateToVisualize: false, }); await retry.try(async () => { - expect(await PageObjects.lens.getLayerCount()).to.be(1); + expect(await lens.getLayerCount()).to.be(1); }); }); diff --git a/x-pack/test/functional/apps/lens/group6/disable_auto_apply.ts b/x-pack/test/functional/apps/lens/group6/disable_auto_apply.ts index c70c0f60b02d3e..8cccfd759450d4 100644 --- a/x-pack/test/functional/apps/lens/group6/disable_auto_apply.ts +++ b/x-pack/test/functional/apps/lens/group6/disable_auto_apply.ts @@ -9,63 +9,63 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['lens', 'visualize']); + const { lens, visualize } = getPageObjects(['lens', 'visualize']); const browser = getService('browser'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); describe('lens disable auto-apply tests', () => { it('should persist auto-apply setting across page refresh', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); - expect(await PageObjects.lens.getAutoApplyEnabled()).to.be.ok(); + expect(await lens.getAutoApplyEnabled()).to.be.ok(); - await PageObjects.lens.disableAutoApply(); + await lens.disableAutoApply(); - expect(await PageObjects.lens.getAutoApplyEnabled()).not.to.be.ok(); + expect(await lens.getAutoApplyEnabled()).not.to.be.ok(); await browser.refresh(); - await PageObjects.lens.waitForEmptyWorkspace(); + await lens.waitForEmptyWorkspace(); - expect(await PageObjects.lens.getAutoApplyEnabled()).not.to.be.ok(); + expect(await lens.getAutoApplyEnabled()).not.to.be.ok(); - await PageObjects.lens.enableAutoApply(); + await lens.enableAutoApply(); - expect(await PageObjects.lens.getAutoApplyEnabled()).to.be.ok(); + expect(await lens.getAutoApplyEnabled()).to.be.ok(); await browser.refresh(); - await PageObjects.lens.waitForEmptyWorkspace(); + await lens.waitForEmptyWorkspace(); - expect(await PageObjects.lens.getAutoApplyEnabled()).to.be.ok(); + expect(await lens.getAutoApplyEnabled()).to.be.ok(); - await PageObjects.lens.disableAutoApply(); + await lens.disableAutoApply(); - expect(await PageObjects.lens.getAutoApplyEnabled()).not.to.be.ok(); + expect(await lens.getAutoApplyEnabled()).not.to.be.ok(); - await PageObjects.lens.closeSettingsMenu(); + await lens.closeSettingsMenu(); }); it('should preserve apply-changes button with full-screen datasource', async () => { - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.disableAutoApply(); - await PageObjects.lens.closeSettingsMenu(); + await lens.disableAutoApply(); + await lens.closeSettingsMenu(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'formula', formula: `count()`, keepOpen: true, }); - await PageObjects.lens.toggleFullscreen(); + await lens.toggleFullscreen(); - expect(await PageObjects.lens.applyChangesExists('toolbar')).to.be.ok(); + expect(await lens.applyChangesExists('toolbar')).to.be.ok(); - await PageObjects.lens.toggleFullscreen(); + await lens.toggleFullscreen(); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should apply changes when "Apply" is clicked', async () => { @@ -77,28 +77,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); // configureDimension - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); // assert that changes haven't been applied - await PageObjects.lens.waitForWorkspaceWithApplyChangesPrompt(); + await lens.waitForWorkspaceWithApplyChangesPrompt(); - await PageObjects.lens.applyChanges('workspace'); + await lens.applyChanges('workspace'); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); }); it('should hide suggestions when a change is made', async () => { - await PageObjects.lens.switchToVisualization('lnsDatatable'); + await lens.switchToVisualization('lnsDatatable'); - expect(await PageObjects.lens.applyChangesExists('suggestions')).to.be.ok(); + expect(await lens.applyChangesExists('suggestions')).to.be.ok(); - await PageObjects.lens.applyChanges('suggestions'); + await lens.applyChanges('suggestions'); - expect(await PageObjects.lens.applyChangesExists('suggestions')).not.to.be.ok(); + expect(await lens.applyChangesExists('suggestions')).not.to.be.ok(); }); }); } diff --git a/x-pack/test/functional/apps/lens/group6/error_handling.ts b/x-pack/test/functional/apps/lens/group6/error_handling.ts index 8bc7432601bd19..1b035fab639791 100644 --- a/x-pack/test/functional/apps/lens/group6/error_handling.ts +++ b/x-pack/test/functional/apps/lens/group6/error_handling.ts @@ -10,14 +10,11 @@ import { intersection, uniq } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { visualize, lens, dashboard, timePicker } = getPageObjects([ 'visualize', 'lens', 'dashboard', - 'header', 'timePicker', - 'common', - 'navigationalSearch', ]); const security = getService('security'); const listingTable = getService('listingTable'); @@ -49,36 +46,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('the warning is shown and user can fix the state', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsMetricWithNonExistingDataView'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsMetricWithNonExistingDataView'); - await PageObjects.lens.waitForMissingDataViewWarning(); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - await PageObjects.lens.waitForMissingDataViewWarning(); - await PageObjects.lens.switchToVisualization('pie'); - await PageObjects.lens.waitForMissingDataViewWarning(); - await PageObjects.lens.switchToVisualization('line'); - await PageObjects.lens.waitForMissingDataViewWarning(); - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.dragDimensionToDimension({ + await lens.clickVisualizeListItemTitle('lnsMetricWithNonExistingDataView'); + await lens.waitForMissingDataViewWarning(); + await lens.switchToVisualization('lnsDatatable'); + await lens.waitForMissingDataViewWarning(); + await lens.switchToVisualization('pie'); + await lens.waitForMissingDataViewWarning(); + await lens.switchToVisualization('line'); + await lens.waitForMissingDataViewWarning(); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.closeDimensionEditor(); + await lens.dragDimensionToDimension({ from: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', to: 'lnsXY_yDimensionPanel > lns-empty-dimension', }); - await PageObjects.lens.switchFirstLayerIndexPattern('log*'); - await PageObjects.lens.waitForMissingDataViewWarningDisappear(); - await PageObjects.lens.waitForEmptyWorkspace(); + await lens.switchFirstLayerIndexPattern('log*'); + await lens.waitForMissingDataViewWarningDisappear(); + await lens.waitForEmptyWorkspace(); }); it('works fine when the dataViews is missing for referenceLines and annotations', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName( 'lnsXYWithReferenceLinesAndAnnotationsWithNonExistingDataView' ); - await PageObjects.lens.clickVisualizeListItemTitle( + await lens.clickVisualizeListItemTitle( 'lnsXYWithReferenceLinesAndAnnotationsWithNonExistingDataView' ); - await PageObjects.lens.waitForMissingDataViewWarning(); + await lens.waitForMissingDataViewWarning(); }); }); @@ -87,10 +84,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard( - 'dashboard containing vis with missing fields' - ); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('dashboard containing vis with missing fields'); const expectedMessages = [ 'Field @timestamp was not found.', @@ -102,7 +97,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Field kubernetes.container.name was not found.', ]; - const dashboardMessageList = await PageObjects.lens.getMessageListTexts('error'); + const dashboardMessageList = await lens.getMessageListTexts('error'); // make sure all the expected messages are there expect(intersection(expectedMessages, dashboardMessageList).length).to.be( @@ -112,12 +107,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // make sure the visualization is rendering await testSubjects.find('emptyPlaceholder'); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await dashboardPanelActions.clickEdit(); - await PageObjects.timePicker.waitForNoDataPopover(); - await PageObjects.timePicker.ensureHiddenNoDataPopover(); + await timePicker.waitForNoDataPopover(); + await timePicker.ensureHiddenNoDataPopover(); - const editorMessageList = await PageObjects.lens.getMessageListTexts('error'); + const editorMessageList = await lens.getMessageListTexts('error'); expect(intersection(expectedMessages, editorMessageList).length).to.be( uniq(expectedMessages).length @@ -135,8 +130,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/fundamental_config_errors_on_dashboard' ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('lens fundamental config errors dash'); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('lens fundamental config errors dash'); const failureElements = await testSubjects.findAll('errorMessageMarkdown'); const errorMessages = await Promise.all(failureElements.map((el) => el.getVisibleText())); diff --git a/x-pack/test/functional/apps/lens/group6/index.ts b/x-pack/test/functional/apps/lens/group6/index.ts index 470aeb89b66f08..1cad50f778ef4a 100644 --- a/x-pack/test/functional/apps/lens/group6/index.ts +++ b/x-pack/test/functional/apps/lens/group6/index.ts @@ -13,7 +13,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -58,7 +58,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -69,7 +69,7 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group6/inspector.ts b/x-pack/test/functional/apps/lens/group6/inspector.ts index 9f52d783011c4f..56d8fd3cdd7b10 100644 --- a/x-pack/test/functional/apps/lens/group6/inspector.ts +++ b/x-pack/test/functional/apps/lens/group6/inspector.ts @@ -8,31 +8,31 @@ import expect from '@kbn/expect'; import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const elasticChart = getService('elasticChart'); const inspector = getService('inspector'); const testSubjects = getService('testSubjects'); describe('lens inspector', () => { before(async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'clientip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'max', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.waitForVisualization('xyVisChart'); await inspector.open('lnsApp_inspectButton'); }); @@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should close the inspector when navigating away from Lens', async () => { - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); expect(await testSubjects.exists('inspectorPanel')).to.be(false); }); }); diff --git a/x-pack/test/functional/apps/lens/group6/legacy_metric.ts b/x-pack/test/functional/apps/lens/group6/legacy_metric.ts index 379ab15fecb29f..9b404e7f8e5315 100644 --- a/x-pack/test/functional/apps/lens/group6/legacy_metric.ts +++ b/x-pack/test/functional/apps/lens/group6/legacy_metric.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens, header } = getPageObjects(['visualize', 'lens', 'header']); const listingTable = getService('listingTable'); const retry = getService('retry'); const filterBar = getService('filterBar'); @@ -17,18 +17,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens legacy metric', () => { it('should render a numeric metric', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Artistpreviouslyknownaslens'); - await PageObjects.lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.assertLegacyMetric('Maximum of bytes', '19,986'); + await lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); + await lens.goToTimeRange(); + await lens.assertLegacyMetric('Maximum of bytes', '19,986'); }); it('should allow to filter metric', async () => { let filterCount = 0; await retry.try(async function tryingForTime() { // click first metric bucket - await PageObjects.lens.clickLegacyMetric(); + await lens.clickLegacyMetric(); filterCount = await filterBar.getFilterCount(); await filterBar.removeAllFilters(); expect(filterCount).to.equal(1); @@ -36,36 +36,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should color the metric text based on value', async () => { - await PageObjects.lens.openDimensionEditor('lns-dimensionTrigger'); - await PageObjects.lens.setLegacyMetricDynamicColoring('labels'); - await PageObjects.header.waitUntilLoadingHasFinished(); - const styleObj = await PageObjects.lens.getLegacyMetricStyle(); + await lens.openDimensionEditor('lns-dimensionTrigger'); + await lens.setLegacyMetricDynamicColoring('labels'); + await header.waitUntilLoadingHasFinished(); + const styleObj = await lens.getLegacyMetricStyle(); expect(styleObj['background-color']).to.be(undefined); expect(styleObj.color).to.be('rgb(214, 191, 87)'); }); it('should change the color of the metric when tweaking the values in the panel', async () => { - await PageObjects.lens.openPalettePanel(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.openPalettePanel(); + await header.waitUntilLoadingHasFinished(); await testSubjects.setValue('lnsPalettePanel_dynamicColoring_range_value_1', '21000', { clearWithKeyboard: true, }); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - const styleObj = await PageObjects.lens.getLegacyMetricStyle(); + await lens.waitForVisualization('legacyMtrVis'); + const styleObj = await lens.getLegacyMetricStyle(); expect(styleObj.color).to.be('rgb(32, 146, 128)'); }); it('should change the color when reverting the palette', async () => { await testSubjects.click('lnsPalettePanel_dynamicColoring_reverseColors'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - const styleObj = await PageObjects.lens.getLegacyMetricStyle(); + await lens.waitForVisualization('legacyMtrVis'); + const styleObj = await lens.getLegacyMetricStyle(); expect(styleObj.color).to.be('rgb(204, 86, 66)'); }); it('should reset the color stops when changing palette to a predefined one', async () => { - await PageObjects.lens.changePaletteTo('temperature'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); - const styleObj = await PageObjects.lens.getLegacyMetricStyle(); + await lens.changePaletteTo('temperature'); + await lens.waitForVisualization('legacyMtrVis'); + const styleObj = await lens.getLegacyMetricStyle(); expect(styleObj.color).to.be('rgb(235, 239, 245)'); }); }); diff --git a/x-pack/test/functional/apps/lens/group6/legend_statistics.ts b/x-pack/test/functional/apps/lens/group6/legend_statistics.ts index a6e8cf8a865102..d810a622f21996 100644 --- a/x-pack/test/functional/apps/lens/group6/legend_statistics.ts +++ b/x-pack/test/functional/apps/lens/group6/legend_statistics.ts @@ -9,15 +9,15 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const find = getService('find'); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); async function loadSavedLens(title: string) { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName(title); - await PageObjects.lens.clickVisualizeListItemTitle(title); + await lens.clickVisualizeListItemTitle(title); } async function expectLegendOneItem(name: string, value?: string) { @@ -47,15 +47,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'timepicker:timeDefaults': '{ "from": "2015-09-18T19:37:13.000Z", "to": "2015-09-22T23:30:30.000Z"}', }); - await PageObjects.visualize.gotoVisualizationLandingPage({ forceRefresh: true }); + await visualize.gotoVisualizationLandingPage({ forceRefresh: true }); }); describe('xy chart legend statistics', () => { it('shows table with legend statistics', async () => { await loadSavedLens('lnsXYvis'); - await PageObjects.lens.toggleToolbarPopover('lnsLegendButton'); - await PageObjects.lens.selectOptionFromComboBox('lnsLegendStatisticsSelect', [ + await lens.toggleToolbarPopover('lnsLegendButton'); + await lens.selectOptionFromComboBox('lnsLegendStatisticsSelect', [ 'average', 'minimum', 'maximum', @@ -89,7 +89,7 @@ Max const title = 'xyValuesInLegendTrue'; await loadSavedLens(title); await expectLegendOneItem('Count of records', '2'); - await PageObjects.lens.save(title); + await lens.save(title); await loadSavedLens(title); await expectLegendOneItem('Count of records', '2'); }); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index 5b9063cf6cf542..4b2a182df741ad 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects([ + const { common, dashboard, lens, reporting, timePicker, visualize } = getPageObjects([ 'common', 'dashboard', 'lens', @@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/reporting' ); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await security.testUser.setRoles( [ 'test_logstash_reader', @@ -43,7 +43,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await es.deleteByQuery({ index: '.reporting-*', refresh: true, @@ -54,66 +54,66 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { afterEach(async () => { if (await testSubjects.exists('shareContextModal')) { - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); } }); it('should not cause PDF reports to fail', async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await listingTable.clickItemLink('dashboard', 'Lens reportz'); - await PageObjects.reporting.openExportTab(); - await PageObjects.reporting.clickGenerateReportButton(); - await PageObjects.lens.closeShareModal(); - const url = await PageObjects.reporting.getReportURL(60000); + await reporting.openExportTab(); + await reporting.clickGenerateReportButton(); + await lens.closeShareModal(); + const url = await reporting.getReportURL(60000); expect(url).to.be.ok(); if (await testSubjects.exists('toastCloseButton')) { await testSubjects.click('toastCloseButton'); } - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); }); for (const type of ['PNG', 'PDF'] as const) { describe(`${type} report`, () => { it(`should not allow to download reports for incomplete visualization`, async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.gotoVisualizationLandingPage(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); // now remove a dimension to make it incomplete - await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + await lens.removeDimension('lnsXY_yDimensionPanel'); // open the share menu and check that reporting is disabled - await PageObjects.lens.clickShareModal(); + await lens.clickShareModal(); expect(await testSubjects.exists('export')).to.be(false); - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); }); it(`should be able to download report of the current visualization`, async () => { // make the configuration complete - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.openReportingShare(type); - await PageObjects.reporting.clickGenerateReportButton(); + await lens.openReportingShare(type); + await reporting.clickGenerateReportButton(); - const url = await PageObjects.reporting.getReportURL(60000); + const url = await reporting.getReportURL(60000); - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); expect(url).to.be.ok(); if (await testSubjects.exists('toastCloseButton')) { @@ -122,25 +122,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it(`should enable curl reporting if the visualization is saved`, async () => { - await PageObjects.lens.save(`ASavedVisualizationToShareIn${type}`); + await lens.save(`ASavedVisualizationToShareIn${type}`); - await PageObjects.lens.openReportingShare(type); + await lens.openReportingShare(type); await testSubjects.existOrFail('shareReportingCopyURL'); expect(await testSubjects.getVisibleText('shareReportingCopyURL')).to.eql( 'Copy Post URL' ); - await PageObjects.lens.closeShareModal(); + await lens.closeShareModal(); }); it(`should produce a valid URL for reporting`, async () => { - await PageObjects.lens.openReportingShare(type); - await PageObjects.reporting.clickGenerateReportButton(); - await PageObjects.reporting.getReportURL(60000); + await lens.openReportingShare(type); + await reporting.clickGenerateReportButton(); + await reporting.getReportURL(60000); if (await testSubjects.exists('toastCloseButton')) { await testSubjects.click('toastCloseButton'); } // navigate to the reporting page - await PageObjects.common.navigateToUrl('management', '/insightsAndAlerting'); + await common.navigateToUrl('management', '/insightsAndAlerting'); await testSubjects.click('reporting'); // find the latest Lens report await testSubjects.click('reportJobRow > euiCollapsedItemActionsButton'); @@ -150,7 +150,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [reportingWindowHandler, lensWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(lensWindowHandle); // verify some configuration - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( 'Average of bytes' ); await browser.closeCurrentWindow(); diff --git a/x-pack/test/functional/apps/lens/group6/lens_tagging.ts b/x-pack/test/functional/apps/lens/group6/lens_tagging.ts index 1734858f83bc73..7c3c14150d2b2c 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_tagging.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_tagging.ts @@ -16,8 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const find = getService('find'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); - const PageObjects = getPageObjects([ - 'common', + const { tagManagement, header, dashboard, visualize, lens, timePicker } = getPageObjects([ 'tagManagement', 'header', 'dashboard', @@ -32,50 +31,50 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens tagging', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.clickNewDashboard(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.clickNewDashboard(); }); after(async () => { - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); it('adds a new tag to a Lens visualization', async () => { // create lens await dashboardAddPanel.clickCreateNewLink(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.goToTimeRange(); + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('lnsApp_saveButton'); - await PageObjects.visualize.setSaveModalValues(lensTitle, { + await visualize.setSaveModalValues(lensTitle, { saveAsNew: false, redirectToOrigin: true, }); await testSubjects.click('savedObjectTagSelector'); await testSubjects.click(`tagSelectorOption-action__create`); - expect(await PageObjects.tagManagement.tagModal.isOpened()).to.be(true); + expect(await tagManagement.tagModal.isOpened()).to.be(true); - await PageObjects.tagManagement.tagModal.fillForm( + await tagManagement.tagModal.fillForm( { name: lensTag, color: '#FFCC33', @@ -87,7 +86,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } ); - expect(await PageObjects.tagManagement.tagModal.isOpened()).to.be(false); + expect(await tagManagement.tagModal.isOpened()).to.be(false); await testSubjects.click('confirmSaveSavedObjectButton'); await retry.waitForWithTimeout('Save modal to disappear', 1000, () => testSubjects @@ -100,10 +99,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('retains its saved object tags after save and return', async () => { await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.saveAndReturn(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await lens.saveAndReturn(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.waitUntilTableIsLoaded(); // open the filter dropdown @@ -111,9 +110,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '.euiFilterGroup .euiPopover:nth-child(2) .euiFilterButton' ); await filterButton.click(); - await testSubjects.click( - `tag-searchbar-option-${PageObjects.tagManagement.testSubjFriendly(lensTag)}` - ); + await testSubjects.click(`tag-searchbar-option-${tagManagement.testSubjFriendly(lensTag)}`); // click elsewhere to close the filter dropdown const searchFilter = await find.byCssSelector('.euiPageTemplate .euiFieldSearch'); await searchFilter.click(); diff --git a/x-pack/test/functional/apps/lens/group6/metric.ts b/x-pack/test/functional/apps/lens/group6/metric.ts index 108f9edcba044b..7415dd80d59993 100644 --- a/x-pack/test/functional/apps/lens/group6/metric.ts +++ b/x-pack/test/functional/apps/lens/group6/metric.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens, common } = getPageObjects(['visualize', 'lens', 'common']); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); const retry = getService('retry'); @@ -62,9 +62,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; const clickMetric = async (title: string) => { - const tiles = await PageObjects.lens.getMetricTiles(); + const tiles = await lens.getMetricTiles(); for (const tile of tiles) { - const datum = await PageObjects.lens.getMetricDatum(tile); + const datum = await lens.getMetricDatum(tile); if (datum.title === title) { await tile.click(); return; @@ -74,34 +74,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens metric', () => { it('should render a metric', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsMetric', 'Metric'); + await lens.switchToVisualization('lnsMetric', 'Metric'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_primaryMetricDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_secondaryMetricDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect((await PageObjects.lens.getMetricVisualizationData()).length).to.be.equal(1); + expect((await lens.getMetricVisualizationData()).length).to.be.equal(1); }); it('should enable trendlines', async () => { // trendline data without the breakdown - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); await testSubjects.click('lnsMetric_supporting_visualization_trendline'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await inspector.open('lnsApp_inspectButton'); @@ -112,14 +112,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should enable metric with breakdown', async () => { // trendline data without the breakdown - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_breakdownByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.waitForVisualization('mtrVis'); - const data = await PageObjects.lens.getMetricVisualizationData(); + await lens.waitForVisualization('mtrVis'); + const data = await lens.getMetricVisualizationData(); const expectedData = [ { @@ -185,44 +185,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; expect(data).to.eql(expectedData); - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); await testSubjects.click('lnsMetric_supporting_visualization_none'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); }); it('should enable bar with max dimension', async () => { - await PageObjects.lens.openDimensionEditor( - 'lnsMetric_maxDimensionPanel > lns-empty-dimension' - ); + await lens.openDimensionEditor('lnsMetric_maxDimensionPanel > lns-empty-dimension'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); - expect((await PageObjects.lens.getMetricVisualizationData())[0].showingBar).to.be(true); + expect((await lens.getMetricVisualizationData())[0].showingBar).to.be(true); - await PageObjects.lens.closeDimensionEditor(); - await PageObjects.lens.removeDimension('lnsMetric_maxDimensionPanel'); + await lens.closeDimensionEditor(); + await lens.removeDimension('lnsMetric_maxDimensionPanel'); }); it('should enable trendlines with breakdown', async () => { - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); await testSubjects.click('lnsMetric_supporting_visualization_trendline'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); expect( - (await PageObjects.lens.getMetricVisualizationData()).some( - (datum) => datum.showingTrendline - ) + (await lens.getMetricVisualizationData()).some((datum) => datum.showingTrendline) ).to.be(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await inspector.open('lnsApp_inspectButton'); @@ -230,21 +226,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(trendLineData).to.eql(inspectorExpectedTrenlineDataWithBreakdown); await inspector.close(); - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); await testSubjects.click('lnsMetric_supporting_visualization_none'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); expect( - (await PageObjects.lens.getMetricVisualizationData()).some( - (datum) => datum.showingTrendline - ) + (await lens.getMetricVisualizationData()).some((datum) => datum.showingTrendline) ).to.be(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should filter by click', async () => { @@ -259,11 +253,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await filterBar.removeAllFilters(); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); }); it('applies static color', async () => { - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); @@ -272,9 +266,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await colorPicker.clearValue(); await colorPicker.type('#000000'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); - const data = await PageObjects.lens.getMetricVisualizationData(); + const data = await lens.getMetricVisualizationData(); expect(data.map(({ color }) => color)).to.be.eql(new Array(6).fill('rgba(0, 0, 0, 1)')); }); @@ -291,35 +285,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('applies dynamic color', async () => { await testSubjects.click('lnsMetric_color_mode_dynamic'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); - const data = await PageObjects.lens.getMetricVisualizationData(); + const data = await lens.getMetricVisualizationData(); expect(data.map(({ color }) => color)).to.eql(expectedDynamicColors); }); it('converts color stops to number', async () => { - await PageObjects.lens.openPalettePanel(); - await PageObjects.common.sleep(1000); + await lens.openPalettePanel(); + await common.sleep(1000); await testSubjects.click('lnsPalettePanel_dynamicColoring_rangeType_groups_number'); expect([ await testSubjects.getAttribute('lnsPalettePanel_dynamicColoring_range_value_1', 'value'), await testSubjects.getAttribute('lnsPalettePanel_dynamicColoring_range_value_2', 'value'), ]).to.be.eql(['10400.18', '15077.59']); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); - expect( - (await PageObjects.lens.getMetricVisualizationData()).map(({ color }) => color) - ).to.eql(expectedDynamicColors); // colors shouldn't change + expect((await lens.getMetricVisualizationData()).map(({ color }) => color)).to.eql( + expectedDynamicColors + ); // colors shouldn't change - await PageObjects.lens.closePaletteEditor(); - await PageObjects.lens.closeDimensionEditor(); + await lens.closePaletteEditor(); + await lens.closeDimensionEditor(); }); it('makes visualization scrollable if too tall', async () => { - await PageObjects.lens.removeDimension('lnsMetric_breakdownByDimensionPanel'); + await lens.removeDimension('lnsMetric_breakdownByDimensionPanel'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_breakdownByDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', @@ -328,11 +322,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.setValue('lnsMetric_max_cols', '1'); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - const tiles = await await PageObjects.lens.getMetricTiles(); + const tiles = await await lens.getMetricTiles(); const lastTile = tiles[tiles.length - 1]; const initialPosition = await lastTile.getPosition(); @@ -342,35 +336,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it("doesn't error with empty formula", async () => { - await PageObjects.lens.openDimensionEditor( + await lens.openDimensionEditor( 'lnsMetric_primaryMetricDimensionPanel > lns-dimensionTrigger' ); - await PageObjects.lens.switchToFormula(); - await PageObjects.lens.typeFormula(''); + await lens.switchToFormula(); + await lens.typeFormula(''); - await PageObjects.lens.waitForVisualization('mtrVis'); + await lens.waitForVisualization('mtrVis'); }); it('does carry custom formatting when transitioning from other visualization', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - // await PageObjects.lens.clickLegacyMetric(); - await PageObjects.lens.configureDimension({ + await lens.switchToVisualization('lnsLegacyMetric'); + // await lens.clickLegacyMetric(); + await lens.configureDimension({ dimension: 'lns-empty-dimension', operation: 'average', field: 'bytes', keepOpen: true, }); - await PageObjects.lens.editDimensionFormat('Number', { decimals: 3, prefix: ' blah' }); - await PageObjects.lens.closeDimensionEditor(); + await lens.editDimensionFormat('Number', { decimals: 3, prefix: ' blah' }); + await lens.closeDimensionEditor(); - await PageObjects.lens.switchToVisualization('lnsMetric', 'Metric'); - await PageObjects.lens.waitForVisualization('mtrVis'); - const [{ value }] = await PageObjects.lens.getMetricVisualizationData(); + await lens.switchToVisualization('lnsMetric', 'Metric'); + await lens.waitForVisualization('mtrVis'); + const [{ value }] = await lens.getMetricVisualizationData(); expect(value).contain('blah'); // Extract the numeric decimals from the value without any compact suffix like k or m diff --git a/x-pack/test/functional/apps/lens/group6/no_data.ts b/x-pack/test/functional/apps/lens/group6/no_data.ts index 04d7967985da34..acedf9903db711 100644 --- a/x-pack/test/functional/apps/lens/group6/no_data.ts +++ b/x-pack/test/functional/apps/lens/group6/no_data.ts @@ -13,7 +13,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'lens', 'header', 'timePicker']); + const { common, header } = getPageObjects(['common', 'header']); describe('lens no data', () => { before(async function () { @@ -21,7 +21,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const indices = Object.keys(await es.indices.get({ index: '*' })); await Promise.all(indices.map(async (index) => await es.indices.delete({ index }))); await kibanaServer.savedObjects.clean({ types: ['index-pattern'] }); - await PageObjects.common.navigateToApp('lens'); + await common.navigateToApp('lens'); }); after(async () => { @@ -30,17 +30,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('when no data opens integrations', async () => { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const addIntegrations = await testSubjects.find('kbnOverviewAddIntegrations'); await addIntegrations.click(); - await PageObjects.common.waitUntilUrlIncludes('integrations/browse'); + await common.waitUntilUrlIncludes('integrations/browse'); }); it('adds a new data view when no data views', async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.savedObjects.clean({ types: ['index-pattern'] }); - await PageObjects.common.navigateToApp('lens'); + await common.navigateToApp('lens'); const dataViewToCreate = 'logstash'; await dataViews.createFromPrompt({ name: dataViewToCreate }); diff --git a/x-pack/test/functional/apps/lens/group6/reference_lines.ts b/x-pack/test/functional/apps/lens/group6/reference_lines.ts index cee3ad357614ec..245162b5e47420 100644 --- a/x-pack/test/functional/apps/lens/group6/reference_lines.ts +++ b/x-pack/test/functional/apps/lens/group6/reference_lines.ts @@ -9,15 +9,15 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const find = getService('find'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); describe('lens reference lines tests', () => { it('should show a disabled reference layer button if no data dimension is defined', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await testSubjects.click('lnsLayerAddButton'); await retry.waitFor('wait for layer popup to appear', async () => @@ -29,21 +29,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should add a reference layer with a static value in it', async () => { - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer('referenceLine'); + await lens.createLayer('referenceLine'); expect((await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`)).length).to.eql(2); expect( @@ -54,27 +54,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create a dynamic referenceLine when dragging a field to a referenceLine dimension group', async () => { - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( 'bytes', 'lnsXY_yReferenceLineLeftPanel > lns-empty-dimension' ); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsXY_yReferenceLineLeftPanel') - ).to.eql(['Static value: 4992.44', 'Median of bytes']); + expect(await lens.getDimensionTriggersTexts('lnsXY_yReferenceLineLeftPanel')).to.eql([ + 'Static value: 4992.44', + 'Median of bytes', + ]); }); it('should add a new group to the reference layer when a right axis is enabled', async () => { - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', keepOpen: true, }); - await PageObjects.lens.changeAxisSide('right'); + await lens.changeAxisSide('right'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await testSubjects.existOrFail('lnsXY_yReferenceLineRightPanel > lns-empty-dimension'); }); @@ -83,10 +84,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // style it enabling the fill await testSubjects.click('lnsXY_yReferenceLineLeftPanel > lns-dimensionTrigger'); await testSubjects.click('lnsXY_fill_below'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); // drag and drop it to the left axis - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_yReferenceLineLeftPanel > lns-dimensionTrigger', to: 'lnsXY_yReferenceLineRightPanel > lns-empty-dimension', }); @@ -98,12 +99,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ) ).to.be(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should duplicate also the original style when duplicating a reference line', async () => { // drag and drop to the empty field to generate a duplicate - await PageObjects.lens.dragDimensionToDimension({ + await lens.dragDimensionToDimension({ from: 'lnsXY_yReferenceLineRightPanel > lns-dimensionTrigger', to: 'lnsXY_yReferenceLineRightPanel > lns-empty-dimension', }); @@ -118,7 +119,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { '[data-test-subj="lnsXY_fill_below"][class*="euiButtonGroupButton-isSelected"]' ) ).to.be(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); }); } diff --git a/x-pack/test/functional/apps/lens/group6/rollup.ts b/x-pack/test/functional/apps/lens/group6/rollup.ts index a8f8aae10ce5cf..c1d3c343350d7d 100644 --- a/x-pack/test/functional/apps/lens/group6/rollup.ts +++ b/x-pack/test/functional/apps/lens/group6/rollup.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'header', 'timePicker']); + const { visualize, lens, timePicker } = getPageObjects(['visualize', 'lens', 'timePicker']); const find = getService('find'); const listingTable = getService('listingTable'); const esArchiver = getService('esArchiver'); @@ -22,49 +22,49 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/rollup/config.json' ); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); }); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/lens/rollup/data'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); }); it('should allow creation of lens xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'sum', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); - await PageObjects.lens.save('Afancilenstest'); + await lens.save('Afancilenstest'); // Ensure the visualization shows up in the visualize list, and takes // us back to the visualization as we configured it. - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Afancilenstest'); - await PageObjects.lens.clickVisualizeListItemTitle('Afancilenstest'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('Afancilenstest'); + await lens.goToTimeRange(); - expect(await PageObjects.lens.getTitle()).to.eql('Afancilenstest'); + expect(await lens.getTitle()).to.eql('Afancilenstest'); // .echLegendItem__title is the only viable way of getting the xy chart's // legend item(s), so we're using a class selector here. @@ -72,32 +72,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow seamless transition to and from table view', async () => { - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.assertLegacyMetric('Sum of bytes', '16,788'); - await PageObjects.lens.switchToVisualization('lnsDatatable'); - expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('Sum of bytes'); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('16,788'); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.assertLegacyMetric('Sum of bytes', '16,788'); + await lens.switchToVisualization('lnsDatatable'); + expect(await lens.getDatatableHeaderText()).to.eql('Sum of bytes'); + expect(await lens.getDatatableCellText(0, 0)).to.eql('16,788'); }); it('should allow to switch from regular index to rollup index retaining config', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchDataPanelIndexPattern('lens_regular_data'); - await PageObjects.lens.switchToVisualization('lnsLegacyMetric'); - await PageObjects.lens.configureDimension({ + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchDataPanelIndexPattern('lens_regular_data'); + await lens.switchToVisualization('lnsLegacyMetric'); + await lens.configureDimension({ dimension: 'lns-empty-dimension', operation: 'sum', field: 'bytes', }); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); + await lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Sum of bytes', '16,788'); + await lens.assertLegacyMetric('Sum of bytes', '16,788'); - await PageObjects.lens.switchFirstLayerIndexPattern('lens_rolled_up_data'); - await PageObjects.lens.waitForVisualization('legacyMtrVis'); + await lens.switchFirstLayerIndexPattern('lens_rolled_up_data'); + await lens.waitForVisualization('legacyMtrVis'); - await PageObjects.lens.assertLegacyMetric('Sum of bytes', '16,788'); + await lens.assertLegacyMetric('Sum of bytes', '16,788'); }); }); } diff --git a/x-pack/test/functional/apps/lens/group6/workspace_size.ts b/x-pack/test/functional/apps/lens/group6/workspace_size.ts index e7b9c7831b3af4..cda1631873033a 100644 --- a/x-pack/test/functional/apps/lens/group6/workspace_size.ts +++ b/x-pack/test/functional/apps/lens/group6/workspace_size.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const browser = getService('browser'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); @@ -42,13 +42,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const { width, height } = await browser.getWindowSize(); log.debug(`Current browser window size set to ${width}x${height}`); - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); // Detect here if the Chrome bug is present, and adjust the aspect ratio accordingly if not if (!within(width, DEFAULT_WINDOW_SIZE[0]) || !within(height, DEFAULT_WINDOW_SIZE[1])) { const { width: containerWidth, height: containerHeight } = - await PageObjects.lens.getWorkspaceVisContainerDimensions(); + await lens.getWorkspaceVisContainerDimensions(); const newRatio = pxToN(containerWidth) / pxToN(containerHeight); log.debug( @@ -57,7 +57,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { UNCONSTRAINED = newRatio; } - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', @@ -87,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const tolerance = 1; await retry.tryForTime(2000, async () => { - const { width, height } = await PageObjects.lens.getWorkspaceVisContainerDimensions(); + const { width, height } = await lens.getWorkspaceVisContainerDimensions(); log.debug( `Checking workspace dimensions: ${width} x ${height} against ${expectedMaxWidth}x${expectedMaxHeight}` ); @@ -115,7 +115,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const tolerance = 0.07; await retry.try(async () => { - const { width, height } = await PageObjects.lens.getWorkspaceVisContainerDimensions(); + const { width, height } = await lens.getWorkspaceVisContainerDimensions(); log.debug( `Checking workspace dimensions: ${pxToN(width)} x ${pxToN(height)} with ratio ${ pxToN(width) / pxToN(height) @@ -136,7 +136,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { maxHeight: string; maxWidth: string; }) => { - const actualStyles = await PageObjects.lens.getWorkspaceVisContainerStyles(); + const actualStyles = await lens.getWorkspaceVisContainerStyles(); expect(actualStyles).to.eql(expectedStyles); }; @@ -200,7 +200,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { while (visTypes.length) { const vis = visTypes.pop()!; await retry.try(async () => { - await PageObjects.lens.switchToVisualization(vis.id, vis.searchText); + await lens.switchToVisualization(vis.id, vis.searchText); }); log.debug( @@ -221,12 +221,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('metric size (absolute pixels)', async () => { await retry.try(async () => { - await PageObjects.lens.switchToVisualization('lnsMetric'); + await lens.switchToVisualization('lnsMetric'); }); await assertWorkspaceDimensions('300px', '300px'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsMetric_breakdownByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', @@ -234,24 +234,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await assertWorkspaceDimensions('600px', '430px'); - await PageObjects.lens.openDimensionEditor('lnsMetric_breakdownByDimensionPanel'); + await lens.openDimensionEditor('lnsMetric_breakdownByDimensionPanel'); await testSubjects.setValue('lnsMetric_max_cols', '2'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); await assertWorkspaceDimensions('430px', '430px'); }); it('gauge size (absolute pixels) - horizontal', async () => { await retry.try(async () => { - await PageObjects.lens.switchToVisualization('lnsGauge', 'gauge'); - await PageObjects.lens.waitForVisualization('gaugeChart'); + await lens.switchToVisualization('lnsGauge', 'gauge'); + await lens.waitForVisualization('gaugeChart'); }); await assertWorkspaceDimensions('600px', '200px'); }); it('gauge size (absolute pixels) - vertical', async () => { - await PageObjects.lens.openVisualOptions(); + await lens.openVisualOptions(); await testSubjects.click('lns_gaugeOrientation_verticalBullet'); // this height is below the requested 600px @@ -263,20 +263,20 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('gauge size (absolute pixels) - arc', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Minor arc'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Minor arc'); await assertWorkspaceDimensions('600px', '375px'); }); it('gauge size (absolute pixels) - major arc', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Major arc'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Major arc'); await assertWorkspaceDimensions('600px', '430px'); }); it('gauge size (absolute pixels) - circle', async () => { - await PageObjects.lens.openVisualOptions(); - await PageObjects.lens.setGaugeShape('Circle'); + await lens.openVisualOptions(); + await lens.setGaugeShape('Circle'); await assertWorkspaceDimensions('600px', '430px'); }); @@ -284,7 +284,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // XY charts should have 100% width and 100% height unless they are a vertical chart with a time dimension await retry.try(async () => { // not important that this is specifically a line chart - await PageObjects.lens.switchToVisualization('line'); + await lens.switchToVisualization('line'); }); await assertWorkspaceStyles({ @@ -295,7 +295,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { maxWidth: '100%', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', @@ -312,7 +312,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await assertWorkspaceAspectRatio(VERTICAL_16_9); await retry.try(async () => { - await PageObjects.lens.switchToVisualization('bar'); + await lens.switchToVisualization('bar'); }); await assertWorkspaceAspectRatio(UNCONSTRAINED); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/index.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/index.ts index 787b7bf986b8fd..e0e5eca1a0ffcd 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/index.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/index.ts @@ -13,7 +13,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -53,7 +53,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -64,7 +64,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/dashboard/index.ts b/x-pack/test/functional/apps/lens/open_in_lens/dashboard/index.ts index 3d9e8e53c6e4e2..0c424142fcf034 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/dashboard/index.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/dashboard/index.ts @@ -13,8 +13,9 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); const config = getService('config'); + const { timePicker } = getPageObjects(['timePicker']); + let remoteEsArchiver; describe('lens app - TSVB Open in Lens', () => { @@ -53,7 +54,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -64,7 +65,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts index ca53fd388301fb..593f42c14db4a8 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts @@ -21,7 +21,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ]); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); const dashboardBadgeActions = getService('dashboardBadgeActions'); - const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); const panelActions = getService('dashboardPanelActions'); @@ -47,7 +46,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); - await dashboardPanelActions.customizePanel(); + await panelActions.customizePanel(); await dashboardCustomizePanel.enableCustomTimeRange(); await dashboardCustomizePanel.openDatePickerQuickMenu(); await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); @@ -83,14 +82,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert a by reference TSVB viz to a Lens viz', async () => { + const visTitle = 'My TSVB to Lens viz 2'; await dashboard.navigateToApp(); await dashboard.clickNewDashboard(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickVisType('metrics'); await testSubjects.click('visualizesaveAndReturnButton'); - // save it to library - const originalPanel = await testSubjects.find('embeddablePanelHeading-'); - await panelActions.saveToLibrary('My TSVB to Lens viz 2', originalPanel); + await panelActions.saveToLibrary(visTitle); await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); @@ -108,7 +106,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); - await panelActions.openContextMenu(); await panelActions.clickEdit(); await visualize.navigateToLensFromAnotherVisualization(); @@ -124,14 +121,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(originalEmbeddableCount); }); - const panel = await testSubjects.find(`embeddablePanelHeading-MyTSVBtoLensviz2(converted)`); - const descendants = await testSubjects.findAllDescendant( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panel - ); - expect(descendants.length).to.equal(0); const titles = await dashboard.getPanelTitles(); - expect(titles[0]).to.be('My TSVB to Lens viz 2 (converted)'); + expect(titles[0]).to.be(`${visTitle} (converted)`); + + await panelActions.expectNotLinkedToLibrary(titles[0], true); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); await panelActions.removePanel(); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/index.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/index.ts index 0844d6201af78b..54ea1f5e4b912f 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/index.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/index.ts @@ -13,7 +13,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const config = getService('config'); let remoteEsArchiver; @@ -57,7 +57,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid 'dateFormat:tz': 'UTC', // changing the timepicker default here saves us from having to set it in Discover (~8s) // The TSVB tests are using a slightly difference end date, so it needs to be set manually here - 'timepicker:timeDefaults': `{ "from": "${PageObjects.timePicker.defaultStartTime}", "to": "Sep 22, 2015 @ 18:31:44.000" }`, + 'timepicker:timeDefaults': `{ "from": "${timePicker.defaultStartTime}", "to": "Sep 22, 2015 @ 18:31:44.000" }`, }); await kibanaServer.importExport.load(fixtureDirs.lensBasic); await kibanaServer.importExport.load(fixtureDirs.lensDefault); @@ -65,7 +65,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); }); diff --git a/x-pack/test/functional/apps/maps/group1/auto_fit_to_bounds.js b/x-pack/test/functional/apps/maps/group1/auto_fit_to_bounds.js index 1fe78ec17f1cef..10155cc647feb6 100644 --- a/x-pack/test/functional/apps/maps/group1/auto_fit_to_bounds.js +++ b/x-pack/test/functional/apps/maps/group1/auto_fit_to_bounds.js @@ -8,16 +8,14 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); describe('auto fit map to bounds', () => { describe('initial location', () => { before(async () => { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader']); - await PageObjects.maps.loadSavedMap( - 'document example - auto fit to bounds for initial location' - ); + await maps.loadSavedMap('document example - auto fit to bounds for initial location'); }); after(async () => { @@ -25,10 +23,10 @@ export default function ({ getPageObjects, getService }) { }); it('should automatically fit to bounds on initial map load', async () => { - const hits = await PageObjects.maps.getHits(); + const hits = await maps.getHits(); expect(hits).to.equal('6'); - const { lat, lon } = await PageObjects.maps.getView(); + const { lat, lon } = await maps.getView(); expect(Math.round(lat)).to.be.within(41, 43); expect(Math.round(lon)).to.equal(-99); }); @@ -36,51 +34,51 @@ export default function ({ getPageObjects, getService }) { describe('without joins', () => { before(async () => { - await PageObjects.maps.loadSavedMap('document example'); - await PageObjects.maps.enableAutoFitToBounds(); + await maps.loadSavedMap('document example'); + await maps.enableAutoFitToBounds(); }); it('should automatically fit to bounds when query is applied', async () => { // Set view to other side of world so no matching results - await PageObjects.maps.setView(-15, -100, 6); + await maps.setView(-15, -100, 6); // Setting query should trigger fit to bounds and move map - const origView = await PageObjects.maps.getView(); - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "ios"'); - await PageObjects.maps.waitForMapPanAndZoom(origView); + const origView = await maps.getView(); + await maps.setAndSubmitQuery('machine.os.raw : "ios"'); + await maps.waitForMapPanAndZoom(origView); - const hits = await PageObjects.maps.getHits(); + const hits = await maps.getHits(); expect(hits).to.equal('2'); - const { lat, lon } = await PageObjects.maps.getView(); + const { lat, lon } = await maps.getView(); expect(Math.round(lat)).to.equal(43); expect(Math.round(lon)).to.equal(-102); }); it('should sync layers even when there is not data', async () => { - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "fake_os_with_no_matches"'); + await maps.setAndSubmitQuery('machine.os.raw : "fake_os_with_no_matches"'); - const hits = await PageObjects.maps.getHits(); + const hits = await maps.getHits(); expect(hits).to.equal('0'); }); }); describe('with joins', () => { before(async () => { - await PageObjects.maps.loadSavedMap('join example'); - await PageObjects.maps.enableAutoFitToBounds(); + await maps.loadSavedMap('join example'); + await maps.enableAutoFitToBounds(); }); it('should automatically fit to bounds when query is applied', async () => { // Set view to other side of world so no matching results - await PageObjects.maps.setView(0, 0, 6); + await maps.setView(0, 0, 6); // Setting query should trigger fit to bounds and move map - const origView = await PageObjects.maps.getView(); - await PageObjects.maps.setAndSubmitQuery('prop1 >= 11'); - await PageObjects.maps.waitForMapPanAndZoom(origView); + const origView = await maps.getView(); + await maps.setAndSubmitQuery('prop1 >= 11'); + await maps.waitForMapPanAndZoom(origView); - const { lat, lon } = await PageObjects.maps.getView(); + const { lat, lon } = await maps.getView(); expect(Math.round(lat)).to.equal(0); expect(Math.round(lon)).to.equal(60); }); diff --git a/x-pack/test/functional/apps/maps/group1/blended_vector_layer.js b/x-pack/test/functional/apps/maps/group1/blended_vector_layer.js index d142513dfd4a93..413ab879eb12fa 100644 --- a/x-pack/test/functional/apps/maps/group1/blended_vector_layer.js +++ b/x-pack/test/functional/apps/maps/group1/blended_vector_layer.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); @@ -18,7 +18,7 @@ export default function ({ getPageObjects, getService }) { before(async () => { await security.testUser.setRoles(['test_logstash_reader', 'global_maps_all']); - await PageObjects.maps.loadSavedMap('blended document example'); + await maps.loadSavedMap('blended document example'); }); afterEach(async () => { @@ -30,26 +30,20 @@ export default function ({ getPageObjects, getService }) { }); it('should request documents when zoomed to smaller regions showing less data', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponse( - LOAD_DOCUMENTS_REQUEST_NAME - ); + const { rawResponse: response } = await maps.getResponse(LOAD_DOCUMENTS_REQUEST_NAME); // Allow a range of hits to account for variances in browser window size. expect(response.hits.hits.length).to.be.within(5, 12); }); it('should request clusters when zoomed to larger regions showing lots of data', async () => { - await PageObjects.maps.setView(20, -90, 2); - const { rawResponse: response } = await PageObjects.maps.getResponse( - LOAD_CLUSTERS_REQUEST_NAME - ); + await maps.setView(20, -90, 2); + const { rawResponse: response } = await maps.getResponse(LOAD_CLUSTERS_REQUEST_NAME); expect(response.aggregations.gridSplit.buckets.length).to.equal(15); }); it('should request documents when query narrows data', async () => { - await PageObjects.maps.setAndSubmitQuery('bytes > 19000'); - const { rawResponse: response } = await PageObjects.maps.getResponse( - LOAD_DOCUMENTS_REQUEST_NAME - ); + await maps.setAndSubmitQuery('bytes > 19000'); + const { rawResponse: response } = await maps.getResponse(LOAD_DOCUMENTS_REQUEST_NAME); expect(response.hits.hits.length).to.equal(75); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/documents_source/docvalue_fields.js b/x-pack/test/functional/apps/maps/group1/documents_source/docvalue_fields.js index 1daf4703c59fe3..bef0bf64c9c1f3 100644 --- a/x-pack/test/functional/apps/maps/group1/documents_source/docvalue_fields.js +++ b/x-pack/test/functional/apps/maps/group1/documents_source/docvalue_fields.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); describe('docvalue_fields', () => { @@ -23,16 +23,16 @@ export default function ({ getPageObjects, getService }) { }); it('should only fetch geo_point field and time field and nothing else when source does not have data driven styling', async () => { - await PageObjects.maps.loadSavedMap('document example'); - const { rawResponse: response } = await PageObjects.maps.getResponse(); + await maps.loadSavedMap('document example'); + const { rawResponse: response } = await maps.getResponse(); const firstHit = response.hits.hits[0]; expect(firstHit).to.only.have.keys(['_id', '_index', '_score', 'fields']); expect(firstHit.fields).to.only.have.keys(['@timestamp', 'geo.coordinates']); }); it('should only fetch geo_point field and data driven styling fields', async () => { - await PageObjects.maps.loadSavedMap('document example with data driven styles'); - const { rawResponse: response } = await PageObjects.maps.getResponse(); + await maps.loadSavedMap('document example with data driven styles'); + const { rawResponse: response } = await maps.getResponse(); const firstHit = response.hits.hits[0]; expect(firstHit).to.only.have.keys(['_id', '_index', '_score', 'fields']); expect(firstHit.fields).to.only.have.keys([ @@ -44,8 +44,8 @@ export default function ({ getPageObjects, getService }) { }); it('should format date fields as epoch_millis when data driven styling is applied to a date field', async () => { - await PageObjects.maps.loadSavedMap('document example with data driven styles on date field'); - const { rawResponse: response } = await PageObjects.maps.getResponse(); + await maps.loadSavedMap('document example with data driven styles on date field'); + const { rawResponse: response } = await maps.getResponse(); const targetHit = response.hits.hits.find((hit) => { return hit._id === 'AU_x3_g4GFA8no6QjkSR'; }); diff --git a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js index 75649a23f68bfb..488f9e3ab9e5a3 100644 --- a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js +++ b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); @@ -23,7 +23,7 @@ export default function ({ getPageObjects, getService }) { ], { skipBrowserRefresh: true } ); - await PageObjects.maps.loadSavedMap('document example'); + await maps.loadSavedMap('document example'); }); after(async () => { @@ -34,10 +34,7 @@ export default function ({ getPageObjects, getService }) { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const requestTimestamp = PageObjects.maps.getInspectorStatRowHit( - requestStats, - 'Request timestamp' - ); + const requestTimestamp = maps.getInspectorStatRowHit(requestStats, 'Request timestamp'); await inspector.close(); return requestTimestamp; } @@ -45,50 +42,48 @@ export default function ({ getPageObjects, getService }) { it('should re-fetch documents with refresh timer', async () => { const beforeRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp.length).to.be(24); - await PageObjects.maps.triggerSingleRefresh(1000); + await maps.triggerSingleRefresh(1000); const afterRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp).not.to.equal(afterRefreshTimerTimestamp); }); describe('inspector', () => { it('should register elasticsearch request in inspector', async () => { - const hits = await PageObjects.maps.getHits(); + const hits = await maps.getHits(); expect(hits).to.equal('5'); }); }); describe('query bar', () => { before(async () => { - await PageObjects.maps.setAndSubmitQuery( - 'machine.os.raw : "win 8" OR machine.os.raw : "ios"' - ); + await maps.setAndSubmitQuery('machine.os.raw : "win 8" OR machine.os.raw : "ios"'); }); after(async () => { - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAndSubmitQuery(''); }); it('should apply query to search request', async () => { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); await inspector.close(); expect(hits).to.equal('2'); }); it('should re-fetch query when "refresh" is clicked', async () => { const beforeQueryRefreshTimestamp = await getRequestTimestamp(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); const afterQueryRefreshTimestamp = await getRequestTimestamp(); expect(beforeQueryRefreshTimestamp).not.to.equal(afterQueryRefreshTimestamp); }); it('should apply query to fit to bounds', async () => { // Set view to other side of world so no matching results - await PageObjects.maps.setView(-15, -100, 6); - await PageObjects.maps.clickFitToBounds('logstash'); - const { lat, lon, zoom } = await PageObjects.maps.getView(); + await maps.setView(-15, -100, 6); + await maps.clickFitToBounds('logstash'); + const { lat, lon, zoom } = await maps.getView(); expect(Math.round(lat)).to.equal(41); expect(Math.round(lon)).to.equal(-102); @@ -101,23 +96,23 @@ export default function ({ getPageObjects, getService }) { describe('layer query', () => { before(async () => { - await PageObjects.maps.setLayerQuery('logstash', 'machine.os.raw : "ios"'); + await maps.setLayerQuery('logstash', 'machine.os.raw : "ios"'); }); it('should apply layer query to search request', async () => { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); await inspector.close(); expect(hits).to.equal('2'); }); it('should apply layer query to fit to bounds', async () => { // Set view to other side of world so no matching results - await PageObjects.maps.setView(-15, -100, 6); - await PageObjects.maps.clickFitToBounds('logstash'); - const { lat, lon, zoom } = await PageObjects.maps.getView(); + await maps.setView(-15, -100, 6); + await maps.clickFitToBounds('logstash'); + const { lat, lon, zoom } = await maps.getView(); expect(Math.round(lat)).to.equal(43); expect(Math.round(lon)).to.equal(-102); expect(Math.round(zoom)).to.equal(5); @@ -126,14 +121,14 @@ export default function ({ getPageObjects, getService }) { describe('filter by extent', () => { it('should handle geo_point filtering with extents that cross antimeridian', async () => { - await PageObjects.maps.loadSavedMap('antimeridian points example'); - const hits = await PageObjects.maps.getHits(); + await maps.loadSavedMap('antimeridian points example'); + const hits = await maps.getHits(); expect(hits).to.equal('2'); }); it('should handle geo_shape filtering with extents that cross antimeridian', async () => { - await PageObjects.maps.loadSavedMap('antimeridian shapes example'); - const hits = await PageObjects.maps.getHits(); + await maps.loadSavedMap('antimeridian shapes example'); + const hits = await maps.getHits(); expect(hits).to.equal('2'); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/documents_source/top_hits.js b/x-pack/test/functional/apps/maps/group1/documents_source/top_hits.js index ac587549179f98..204ce117f690fe 100644 --- a/x-pack/test/functional/apps/maps/group1/documents_source/top_hits.js +++ b/x-pack/test/functional/apps/maps/group1/documents_source/top_hits.js @@ -10,7 +10,7 @@ import expect from '@kbn/expect'; const VECTOR_SOURCE_ID = 'z52lq'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps', 'common']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const find = getService('find'); const security = getService('security'); @@ -22,7 +22,7 @@ export default function ({ getPageObjects, getService }) { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader'], { skipBrowserRefresh: true, }); - await PageObjects.maps.loadSavedMap('document example top hits'); + await maps.loadSavedMap('document example top hits'); }); after(async () => { @@ -33,18 +33,18 @@ export default function ({ getPageObjects, getService }) { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); expect(hits).to.equal('0'); // aggregation requests do not return any documents }); it('should display top hits per entity', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[VECTOR_SOURCE_ID].data.features.length).to.equal(10); }); describe('configuration', () => { before(async () => { - await PageObjects.maps.openLayerPanel('logstash'); + await maps.openLayerPanel('logstash'); await retry.try(async () => { // Can not use testSubjects because data-test-subj is placed range input and number input @@ -61,31 +61,31 @@ export default function ({ getPageObjects, getService }) { } }); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); }); after(async () => { - await PageObjects.maps.closeLayerPanel(); + await maps.closeLayerPanel(); }); it('should update top hits when configation changes', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[VECTOR_SOURCE_ID].data.features.length).to.equal(15); }); }); describe('query', () => { before(async () => { - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); }); after(async () => { - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAndSubmitQuery(''); }); it('should apply query to top hits request', async () => { - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[VECTOR_SOURCE_ID].data.features.length).to.equal(2); }); }); @@ -93,11 +93,11 @@ export default function ({ getPageObjects, getService }) { describe('split on scripted field', () => { before(async () => { - await PageObjects.maps.loadSavedMap('document example top hits split with scripted field'); + await maps.loadSavedMap('document example top hits split with scripted field'); }); it('should display top hits per entity', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[VECTOR_SOURCE_ID].data.features.length).to.equal(24); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/esql_source.ts b/x-pack/test/functional/apps/maps/group1/esql_source.ts index 8bedf59e3f6b44..37a36bee444929 100644 --- a/x-pack/test/functional/apps/maps/group1/esql_source.ts +++ b/x-pack/test/functional/apps/maps/group1/esql_source.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); describe('esql', () => { @@ -17,7 +17,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader'], { skipBrowserRefresh: true, }); - await PageObjects.maps.loadSavedMap('esql example'); + await maps.loadSavedMap('esql example'); }); after(async () => { @@ -25,7 +25,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should display ES|QL statement results on map', async () => { - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('logstash-*'); + const tooltipText = await maps.getLayerTocTooltipMsg('logstash-*'); expect(tooltipText).to.equal( 'logstash-*\nFound 5 rows.\nResults narrowed by global time\nResults narrowed by visible map area' ); diff --git a/x-pack/test/functional/apps/maps/group1/feature_controls/maps_security.ts b/x-pack/test/functional/apps/maps/group1/feature_controls/maps_security.ts index 02a0be746f6ade..92d73b524ca8b2 100644 --- a/x-pack/test/functional/apps/maps/group1/feature_controls/maps_security.ts +++ b/x-pack/test/functional/apps/maps/group1/feature_controls/maps_security.ts @@ -9,8 +9,8 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const security = getService('security'); - const PageObjects = getPageObjects(['common', 'error', 'maps', 'settings', 'security']); + const securityService = getService('security'); + const { common, error, maps, security } = getPageObjects(['common', 'error', 'maps', 'security']); const appsMenu = getService('appsMenu'); const testSubjects = getService('testSubjects'); const globalNav = getService('globalNav'); @@ -23,12 +23,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); describe('global maps all privileges', () => { before(async () => { - await security.role.create('global_maps_all_role', { + await securityService.role.create('global_maps_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -42,25 +42,25 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_maps_all_user', { + await securityService.user.create('global_maps_all_user', { password: 'global_maps_all_user-password', roles: ['global_maps_all_role'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login('global_maps_all_user', 'global_maps_all_user-password', { + await security.login('global_maps_all_user', 'global_maps_all_user-password', { expectSpaceSelector: false, }); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await Promise.all([ - security.role.delete('global_maps_all_role'), - security.user.delete('global_maps_all_user'), + securityService.role.delete('global_maps_all_role'), + securityService.user.delete('global_maps_all_user'), ]); }); @@ -70,13 +70,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`allows a map to be created`, async () => { - await PageObjects.maps.openNewMap(); - await PageObjects.maps.expectExistAddLayerButton(); - await PageObjects.maps.saveMap('my test map'); + await maps.openNewMap(); + await maps.expectExistAddLayerButton(); + await maps.saveMap('my test map'); }); it(`allows a map to be deleted`, async () => { - await PageObjects.maps.deleteSavedMaps('my test map'); + await maps.deleteSavedMaps('my test map'); }); it(`doesn't show read-only badge`, async () => { @@ -84,7 +84,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('allows saving via the saved query management component popover with no saved query loaded', async () => { - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); await queryBar.setQuery('response:200'); await savedQueryManagementComponent.saveNewQuery('foo', 'bar', true, false); await savedQueryManagementComponent.savedQueryExistOrFail('foo'); @@ -119,7 +119,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global maps read-only privileges', () => { before(async () => { - await security.role.create('global_maps_read_role', { + await securityService.role.create('global_maps_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -133,26 +133,22 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_maps_read_user', { + await securityService.user.create('global_maps_read_user', { password: 'global_maps_read_user-password', roles: ['global_maps_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_maps_read_user', - 'global_maps_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_maps_read_user', 'global_maps_read_user-password', { + expectSpaceSelector: false, + }); - await PageObjects.maps.gotoMapListingPage(); + await maps.gotoMapListingPage(); }); after(async () => { - await security.role.delete('global_maps_read_role'); - await security.user.delete('global_maps_read_user'); + await securityService.role.delete('global_maps_read_role'); + await securityService.user.delete('global_maps_read_user'); }); it('shows Maps navlink', async () => { @@ -161,7 +157,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`does not show create new button`, async () => { - await PageObjects.maps.expectMissingCreateNewButton(); + await maps.expectMissingCreateNewButton(); }); it(`does not allow a map to be deleted`, async () => { @@ -174,15 +170,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('existing map', () => { before(async () => { - await PageObjects.maps.loadSavedMap('document example'); + await maps.loadSavedMap('document example'); }); it(`can't save`, async () => { - await PageObjects.maps.expectMissingSaveButton(); + await maps.expectMissingSaveButton(); }); it(`can't add layer`, async () => { - await PageObjects.maps.expectMissingAddLayerButton(); + await maps.expectMissingAddLayerButton(); }); it('allows loading a saved query via the saved query management component', async () => { @@ -214,7 +210,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('no maps privileges', () => { before(async () => { - await security.role.create('no_maps_privileges_role', { + await securityService.role.create('no_maps_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -228,24 +224,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_maps_privileges_user', { + await securityService.user.create('no_maps_privileges_user', { password: 'no_maps_privileges_user-password', roles: ['no_maps_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'no_maps_privileges_user', - 'no_maps_privileges_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('no_maps_privileges_user', 'no_maps_privileges_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { - await security.role.delete('no_maps_privileges_role'); - await security.user.delete('no_maps_privileges_user'); + await securityService.role.delete('no_maps_privileges_role'); + await securityService.user.delete('no_maps_privileges_user'); }); it('does not show Maps navlink', async () => { @@ -254,11 +246,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`returns a 403`, async () => { - await PageObjects.common.navigateToActualUrl('maps', '', { + await common.navigateToActualUrl('maps', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/feature_controls/maps_spaces.ts b/x-pack/test/functional/apps/maps/group1/feature_controls/maps_spaces.ts index a306c15bfbdb26..4f83b6a49aa8ac 100644 --- a/x-pack/test/functional/apps/maps/group1/feature_controls/maps_spaces.ts +++ b/x-pack/test/functional/apps/maps/group1/feature_controls/maps_spaces.ts @@ -11,19 +11,24 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'maps', 'security', 'header']); + const { common, maps, security, header } = getPageObjects([ + 'common', + 'maps', + 'security', + 'header', + ]); const listingTable = getService('listingTable'); const appsMenu = getService('appsMenu'); describe('spaces feature controls', () => { before(async () => { - PageObjects.maps.setBasePath('/s/custom_space'); + maps.setBasePath('/s/custom_space'); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - PageObjects.maps.setBasePath(''); + await security.forceLogout(); + maps.setBasePath(''); }); describe('space with no features disabled', () => { @@ -40,7 +45,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows Maps navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -48,17 +53,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`allows a map to be created`, async () => { - await PageObjects.common.navigateToActualUrl(APP_ID, '/map', { + await common.navigateToActualUrl(APP_ID, '/map', { basePath: `/s/custom_space`, ensureCurrentUrl: true, shouldLoginIfPrompted: false, }); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.saveMap('my test map'); + await maps.waitForLayersToLoad(); + await maps.saveMap('my test map'); }); it(`allows a map to be deleted`, async () => { - await PageObjects.common.navigateToActualUrl(APP_ID, '/', { + await common.navigateToActualUrl(APP_ID, '/', { basePath: `/s/custom_space`, ensureCurrentUrl: true, shouldLoginIfPrompted: false, @@ -67,11 +72,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // Can not use maps.deleteSavedMaps because maps.deleteSavedMaps will // navigate to default space if on list page check fails await listingTable.searchForItemWithName('my test map'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await listingTable.checkListingSelectAllCheckbox(); await listingTable.clickDeleteSelected(); - await PageObjects.common.clickConfirmOnModal(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.clickConfirmOnModal(); + await header.waitUntilLoadingHasFinished(); await listingTable.expectItemsCount('map', 0); }); }); @@ -90,12 +95,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`returns a 404`, async () => { - await PageObjects.common.navigateToActualUrl(APP_ID, '/', { + await common.navigateToActualUrl(APP_ID, '/', { basePath: '/s/custom_space', ensureCurrentUrl: true, shouldLoginIfPrompted: false, }); - const messageText = await PageObjects.common.getJsonBodyText(); + const messageText = await common.getJsonBodyText(); expect(messageText).to.eql( JSON.stringify({ statusCode: 404, diff --git a/x-pack/test/functional/apps/maps/group1/full_screen_mode.js b/x-pack/test/functional/apps/maps/group1/full_screen_mode.js index b0ed1311d439ae..d0d5e048387cd0 100644 --- a/x-pack/test/functional/apps/maps/group1/full_screen_mode.js +++ b/x-pack/test/functional/apps/maps/group1/full_screen_mode.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { - const PageObjects = getPageObjects(['maps', 'common']); + const { maps, common } = getPageObjects(['maps', 'common']); const retry = getService('retry'); const security = getService('security'); const testSubjects = getService('testSubjects'); @@ -16,25 +16,25 @@ export default function ({ getService, getPageObjects }) { describe('maps full screen mode', () => { before(async () => { await security.testUser.setRoles(['global_maps_all']); - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); }); after(async () => { await security.testUser.restoreDefaults(); }); it('full screen button should exist', async () => { - const exists = await PageObjects.maps.fullScreenModeMenuItemExists(); + const exists = await maps.fullScreenModeMenuItemExists(); expect(exists).to.be(true); }); it('hides the chrome', async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); - await PageObjects.maps.clickFullScreenMode(); + await maps.clickFullScreenMode(); await retry.try(async () => { - const isChromeHidden = await PageObjects.common.isChromeHidden(); + const isChromeHidden = await common.isChromeHidden(); expect(isChromeHidden).to.be(true); }); }); @@ -44,17 +44,17 @@ export default function ({ getService, getPageObjects }) { }); it('displays exit full screen logo button', async () => { - const exists = await PageObjects.maps.exitFullScreenLogoButtonExists(); + const exists = await maps.exitFullScreenLogoButtonExists(); expect(exists).to.be(true); }); it('exits when the text button is clicked on', async () => { - const logoButton = await PageObjects.maps.getExitFullScreenLogoButton(); + const logoButton = await maps.getExitFullScreenLogoButton(); await logoButton.moveMouseTo(); - await PageObjects.maps.clickExitFullScreenTextButton(); + await maps.clickExitFullScreenTextButton(); await retry.try(async () => { - const isChromeVisible = await PageObjects.common.isChromeVisible(); + const isChromeVisible = await common.isChromeVisible(); expect(isChromeVisible).to.be(true); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/layer_visibility.js b/x-pack/test/functional/apps/maps/group1/layer_visibility.js index cf6051cde8be7a..52770e6cbf3d3d 100644 --- a/x-pack/test/functional/apps/maps/group1/layer_visibility.js +++ b/x-pack/test/functional/apps/maps/group1/layer_visibility.js @@ -8,30 +8,30 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); describe('layer visibility', () => { before(async () => { await security.testUser.setRoles(['test_logstash_reader', 'global_maps_all']); - await PageObjects.maps.loadSavedMap('document example hidden'); + await maps.loadSavedMap('document example hidden'); }); afterEach(async () => { await inspector.close(); - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); await security.testUser.restoreDefaults(); }); it('should not make any requests when layer is hidden', async () => { - const noRequests = await PageObjects.maps.doesInspectorHaveRequests(); + const noRequests = await maps.doesInspectorHaveRequests(); expect(noRequests).to.equal(true); }); it('should fetch layer data when layer is made visible', async () => { - await PageObjects.maps.toggleLayerVisibility('logstash'); - const hits = await PageObjects.maps.getHits(); + await maps.toggleLayerVisibility('logstash'); + const hits = await maps.getHits(); expect(hits).to.equal('5'); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/sample_data.js b/x-pack/test/functional/apps/maps/group1/sample_data.js index 377d80a63999bc..01d0ce3a8e97a7 100644 --- a/x-pack/test/functional/apps/maps/group1/sample_data.js +++ b/x-pack/test/functional/apps/maps/group1/sample_data.js @@ -9,7 +9,13 @@ import expect from '@kbn/expect'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; export default function ({ getPageObjects, getService, updateBaselines }) { - const PageObjects = getPageObjects(['common', 'maps', 'header', 'home', 'timePicker']); + const { common, maps, header, home, timePicker } = getPageObjects([ + 'common', + 'maps', + 'header', + 'home', + 'timePicker', + ]); const screenshot = getService('screenshots'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); @@ -22,13 +28,13 @@ export default function ({ getPageObjects, getService, updateBaselines }) { before(async () => { //installing the sample data with test user with super user role and then switching roles with limited privileges await security.testUser.setRoles(['superuser'], { skipBrowserRefresh: true }); - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.addSampleDataSet('ecommerce'); - await PageObjects.home.addSampleDataSet('flights'); - await PageObjects.home.addSampleDataSet('logs'); + await header.waitUntilLoadingHasFinished(); + await home.addSampleDataSet('ecommerce'); + await home.addSampleDataSet('flights'); + await home.addSampleDataSet('logs'); // Sample data is shifted to be relative to current time // This means that a static timerange will return different documents @@ -56,32 +62,32 @@ export default function ({ getPageObjects, getService, updateBaselines }) { after(async () => { await security.testUser.restoreDefaults(); - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.removeSampleDataSet('ecommerce'); - await PageObjects.home.removeSampleDataSet('flights'); - await PageObjects.home.removeSampleDataSet('logs'); + await header.waitUntilLoadingHasFinished(); + await home.removeSampleDataSet('ecommerce'); + await home.removeSampleDataSet('flights'); + await home.removeSampleDataSet('logs'); }); describe('ecommerce', () => { before(async () => { - await PageObjects.maps.loadSavedMap('[eCommerce] Orders by Country'); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); - await PageObjects.maps.toggleLayerVisibility('United Kingdom'); - await PageObjects.maps.toggleLayerVisibility('France'); - await PageObjects.maps.toggleLayerVisibility('United States'); - await PageObjects.maps.toggleLayerVisibility('World Countries'); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await maps.loadSavedMap('[eCommerce] Orders by Country'); + await maps.toggleEmsBasemapLayerVisibility(); + await maps.toggleLayerVisibility('United Kingdom'); + await maps.toggleLayerVisibility('France'); + await maps.toggleLayerVisibility('United States'); + await maps.toggleLayerVisibility('World Countries'); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); after(async () => { - await PageObjects.maps.existFullScreen(); + await maps.existFullScreen(); }); it('should load layers', async () => { @@ -95,17 +101,17 @@ export default function ({ getPageObjects, getService, updateBaselines }) { describe('flights', () => { before(async () => { - await PageObjects.maps.loadSavedMap('[Flights] Origin Time Delayed'); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await maps.loadSavedMap('[Flights] Origin Time Delayed'); + await maps.toggleEmsBasemapLayerVisibility(); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); after(async () => { - await PageObjects.maps.existFullScreen(); + await maps.existFullScreen(); }); it('should load saved object and display layers', async () => { @@ -119,18 +125,18 @@ export default function ({ getPageObjects, getService, updateBaselines }) { describe('web logs', () => { before(async () => { - await PageObjects.maps.loadSavedMap('[Logs] Total Requests and Bytes'); - await PageObjects.maps.toggleLayerVisibility('Total Requests by Destination'); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await maps.loadSavedMap('[Logs] Total Requests and Bytes'); + await maps.toggleLayerVisibility('Total Requests by Destination'); + await maps.toggleEmsBasemapLayerVisibility(); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); after(async () => { - await PageObjects.maps.existFullScreen(); + await maps.existFullScreen(); }); it('should load saved object and display layers', async () => { diff --git a/x-pack/test/functional/apps/maps/group1/saved_object_management.js b/x-pack/test/functional/apps/maps/group1/saved_object_management.js index c2971397f01715..7439bfb75c7022 100644 --- a/x-pack/test/functional/apps/maps/group1/saved_object_management.js +++ b/x-pack/test/functional/apps/maps/group1/saved_object_management.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps', 'header', 'timePicker']); + const { maps, timePicker } = getPageObjects(['maps', 'timePicker']); const queryBar = getService('queryBar'); const filterBar = getService('filterBar'); const browser = getService('browser'); @@ -29,7 +29,7 @@ export default function ({ getPageObjects, getService }) { 'meta_for_geoshape_data_reader', 'test_logstash_reader', ]); - await PageObjects.maps.loadSavedMap('join example'); + await maps.loadSavedMap('join example'); joinMapUrl = await browser.getCurrentUrl(); }); after(async () => { @@ -37,27 +37,27 @@ export default function ({ getPageObjects, getService }) { }); it('should update global Kibana time to value stored with map', async () => { - const timeConfig = await PageObjects.timePicker.getTimeConfig(); + const timeConfig = await timePicker.getTimeConfig(); expect(timeConfig.start).to.equal('~ 17 minutes ago'); expect(timeConfig.end).to.equal('now'); }); it('should update global Kibana refresh config to value stored with map', async () => { - const kibanaRefreshConfig = await PageObjects.timePicker.getRefreshConfig(); + const kibanaRefreshConfig = await timePicker.getRefreshConfig(); expect(kibanaRefreshConfig.interval).to.equal('1'); expect(kibanaRefreshConfig.units).to.equal('Seconds'); expect(kibanaRefreshConfig.isPaused).to.equal(true); }); it('should set map location to value stored with map', async () => { - const { lat, lon, zoom } = await PageObjects.maps.getView(); + const { lat, lon, zoom } = await maps.getView(); expect(lat).to.equal(-0.04647); expect(lon).to.equal(77.33426); expect(zoom).to.equal(3.02); }); it('should load map layers stored with map', async () => { - const layerExists = await PageObjects.maps.doesLayerExist('geo_shapes*'); + const layerExists = await maps.doesLayerExist('geo_shapes*'); expect(layerExists).to.equal(true); }); @@ -65,16 +65,16 @@ export default function ({ getPageObjects, getService }) { const urlSplit = joinMapUrl.split('?'); const globalState = `_g=(time:(from:now-36m,to:now))`; await browser.get(`${urlSplit[0]}?${globalState}`, true); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); - const timeConfig = await PageObjects.timePicker.getTimeConfig(); + const timeConfig = await timePicker.getTimeConfig(); expect(timeConfig.start).to.equal('~ 36 minutes ago'); expect(timeConfig.end).to.equal('now'); }); describe('mapState contains query', () => { before(async () => { - await PageObjects.maps.loadSavedMap('document example with query'); + await maps.loadSavedMap('document example with query'); }); it('should update query bar with query stored with map', async () => { @@ -94,7 +94,7 @@ export default function ({ getPageObjects, getService }) { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); await inspector.close(); expect(hits).to.equal('1'); }); @@ -106,7 +106,7 @@ export default function ({ getPageObjects, getService }) { const urlWithQueryInAppState = `${kibanaBaseUrl}/maps/map/8eabdab0-144f-11e9-809f-ad25bb78262c#?${appState}`; await browser.get(urlWithQueryInAppState, true); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); const query = await queryBar.getQueryString(); expect(query).to.equal('machine.os.raw : "win 8"'); @@ -115,14 +115,14 @@ export default function ({ getPageObjects, getService }) { await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); await inspector.close(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); expect(hits).to.equal('1'); }); }); describe('mapState contains filters', () => { before(async () => { - await PageObjects.maps.loadSavedMap('document example with filter'); + await maps.loadSavedMap('document example with filter'); }); it('should update filter bar with filters stored with map', async () => { @@ -142,7 +142,7 @@ export default function ({ getPageObjects, getService }) { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const hits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const hits = maps.getInspectorStatRowHit(requestStats, 'Hits'); await inspector.close(); expect(hits).to.equal('1'); }); @@ -151,30 +151,30 @@ export default function ({ getPageObjects, getService }) { describe('create', () => { it('should allow saving map', async () => { - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); - await PageObjects.maps.saveMap(MAP1_NAME); + await maps.saveMap(MAP1_NAME); - await PageObjects.maps.searchAndExpectItemsCount(MAP1_NAME, 1); + await maps.searchAndExpectItemsCount(MAP1_NAME, 1); }); it('should allow saving map that crosses dateline', async () => { - await PageObjects.maps.openNewMap(); - await PageObjects.maps.setView('64', '179', '5'); + await maps.openNewMap(); + await maps.setView('64', '179', '5'); - await PageObjects.maps.saveMap(MAP2_NAME); + await maps.saveMap(MAP2_NAME); - await PageObjects.maps.searchAndExpectItemsCount(MAP2_NAME, 1); + await maps.searchAndExpectItemsCount(MAP2_NAME, 1); }); }); describe('delete', () => { it('should delete selected saved objects', async () => { - await PageObjects.maps.deleteSavedMaps(MAP_NAME_PREFIX); + await maps.deleteSavedMaps(MAP_NAME_PREFIX); - await PageObjects.maps.searchAndExpectItemsCount(MAP1_NAME, 0); + await maps.searchAndExpectItemsCount(MAP1_NAME, 0); - await PageObjects.maps.searchAndExpectItemsCount(MAP2_NAME, 0); + await maps.searchAndExpectItemsCount(MAP2_NAME, 0); }); }); }); diff --git a/x-pack/test/functional/apps/maps/group1/vector_styling.js b/x-pack/test/functional/apps/maps/group1/vector_styling.js index d87ac548c85a0f..bc7b3f3af975e3 100644 --- a/x-pack/test/functional/apps/maps/group1/vector_styling.js +++ b/x-pack/test/functional/apps/maps/group1/vector_styling.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { - const PageObjects = getPageObjects(['common', 'maps', 'timePicker']); + const { common, maps } = getPageObjects(['common', 'maps']); const security = getService('security'); const from = 'Mar 1, 2015 @ 00:00:00.000'; const to = 'Mar 1, 2016 @ 00:00:00.000'; @@ -16,25 +16,25 @@ export default function ({ getService, getPageObjects }) { describe('vector styling', () => { before(async () => { await security.testUser.setRoles(['test_logstash_reader', 'global_maps_all']); - await PageObjects.maps.loadSavedMap('document example'); - await PageObjects.common.setTime({ from, to }); + await maps.loadSavedMap('document example'); + await common.setTime({ from, to }); }); after(async () => { - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); describe('categorical styling', () => { before(async () => { - await PageObjects.maps.openLayerPanel('logstash'); + await maps.openLayerPanel('logstash'); }); it('should provide auto complete suggestions', async () => { - await PageObjects.maps.setStyleByValue('fillColor', 'machine.os.raw'); - await PageObjects.maps.selectCustomColorRamp('fillColor'); - const suggestions = await PageObjects.maps.getCategorySuggestions(); + await maps.setStyleByValue('fillColor', 'machine.os.raw'); + await maps.selectCustomColorRamp('fillColor'); + const suggestions = await maps.getCategorySuggestions(); expect(suggestions.trim().split('\n').join()).to.equal('ios,osx,win 7,win 8,win xp'); }); }); diff --git a/x-pack/test/functional/apps/maps/group2/adhoc_data_view.ts b/x-pack/test/functional/apps/maps/group2/adhoc_data_view.ts index 15824a1beb63f4..4e5d3a7692734e 100644 --- a/x-pack/test/functional/apps/maps/group2/adhoc_data_view.ts +++ b/x-pack/test/functional/apps/maps/group2/adhoc_data_view.ts @@ -10,18 +10,18 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const security = getService('security'); - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); describe('maps adhoc data view', () => { before(async () => { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader'], { skipBrowserRefresh: true, }); - await PageObjects.maps.loadSavedMap('adhoc data view'); + await maps.loadSavedMap('adhoc data view'); }); it('should render saved map with adhoc data view', async () => { - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('adhocDataView'); + const tooltipText = await maps.getLayerTocTooltipMsg('adhocDataView'); expect(tooltipText).to.equal( 'adhocDataView\nFound 908 documents.\nResults narrowed by global search\nResults narrowed by global time' ); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js deleted file mode 100644 index fcd3d061155081..00000000000000 --- a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects([ - 'common', - 'dashboard', - 'header', - 'maps', - 'timeToVisualize', - 'visualize', - ]); - - const listingTable = getService('listingTable'); - const testSubjects = getService('testSubjects'); - const security = getService('security'); - - describe('maps add-to-dashboard save flow', () => { - before(async () => { - await security.testUser.setRoles( - [ - 'test_logstash_reader', - 'global_maps_all', - 'geoshape_data_reader', - 'global_dashboard_all', - 'meta_for_geoshape_data_reader', - ], - { skipBrowserRefresh: true } - ); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - }); - - it('should allow new map be added by value to a new dashboard', async () => { - await PageObjects.maps.openNewMap(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('map 1', { - addToDashboard: 'new', - saveToLibrary: false, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists('map 1'); - expect(isInLibrary).to.be(false); - await PageObjects.timeToVisualize.resetNewDashboard(); - }); - - it('should allow existing maps be added by value to a new dashboard', async () => { - await PageObjects.maps.loadSavedMap('document example'); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('document example copy', { - saveToLibrary: false, - addToDashboard: 'new', - saveAsNew: true, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'document example copy' - ); - expect(isInLibrary).to.be(false); - await PageObjects.timeToVisualize.resetNewDashboard(); - }); - - it('should allow new map be added by value to an existing dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - - await PageObjects.dashboard.saveDashboard('My Very Cool Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await listingTable.searchAndExpectItemsCount('dashboard', 'My Very Cool Dashboard', 1); - - await PageObjects.maps.openNewMap(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My New Map 2', { - saveToLibrary: false, - addToDashboard: 'existing', - dashboardId: 'My Very Cool Dashboard', - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My New Map 2' - ); - expect(isInLibrary).to.be(false); - }); - - it('should allow existing maps be added by value to an existing dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - - await PageObjects.dashboard.saveDashboard('My Wonderful Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await listingTable.searchAndExpectItemsCount('dashboard', 'My Wonderful Dashboard', 1); - - await PageObjects.maps.loadSavedMap('document example'); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('document example copy 2', { - saveToLibrary: false, - addToDashboard: 'existing', - dashboardId: 'My Wonderful Dashboard', - saveAsNew: true, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'document example copy 2' - ); - expect(isInLibrary).to.be(false); - }); - - it('should allow new map be added by reference to a new dashboard', async () => { - await PageObjects.maps.openNewMap(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('map 1', { - addToDashboard: 'new', - saveToLibrary: true, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists('map 1'); - expect(isInLibrary).to.be(true); - await PageObjects.timeToVisualize.resetNewDashboard(); - }); - - it('should allow existing maps be added by reference to a new dashboard', async () => { - await PageObjects.maps.loadSavedMap('document example'); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('document example copy', { - saveToLibrary: true, - addToDashboard: 'new', - saveAsNew: true, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'document example copy' - ); - expect(isInLibrary).to.be(true); - await PageObjects.timeToVisualize.resetNewDashboard(); - }); - - it('should allow new map be added by reference to an existing dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - - await PageObjects.dashboard.saveDashboard('My Super Cool Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await listingTable.searchAndExpectItemsCount('dashboard', 'My Super Cool Dashboard', 1); - - await PageObjects.maps.openNewMap(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('My New Map 2', { - saveToLibrary: true, - addToDashboard: 'existing', - dashboardId: 'My Super Cool Dashboard', - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'My New Map 2' - ); - expect(isInLibrary).to.be(true); - }); - - it('should allow existing maps be added by reference to an existing dashboard', async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - - await PageObjects.dashboard.saveDashboard('My Amazing Dashboard'); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await listingTable.searchAndExpectItemsCount('dashboard', 'My Amazing Dashboard', 1); - - await PageObjects.maps.loadSavedMap('document example'); - - await testSubjects.click('mapSaveButton'); - await PageObjects.timeToVisualize.saveFromModal('document example copy 2', { - saveToLibrary: true, - addToDashboard: 'existing', - dashboardId: 'My Amazing Dashboard', - saveAsNew: true, - }); - - await PageObjects.dashboard.waitForRenderComplete(); - - const panelCount = await PageObjects.dashboard.getPanelCount(); - expect(panelCount).to.eql(1); - - const isInLibrary = await PageObjects.timeToVisualize.libraryNotificationExists( - 'document example copy 2' - ); - expect(isInLibrary).to.be(true); - }); - }); -} diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.ts b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.ts new file mode 100644 index 00000000000000..f4059de17edfb9 --- /dev/null +++ b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.ts @@ -0,0 +1,227 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, header, maps, timeToVisualize } = getPageObjects([ + 'dashboard', + 'header', + 'maps', + 'timeToVisualize', + ]); + + const dashboardPanelActions = getService('dashboardPanelActions'); + const listingTable = getService('listingTable'); + const testSubjects = getService('testSubjects'); + const security = getService('security'); + + describe('maps add-to-dashboard save flow', () => { + before(async () => { + await security.testUser.setRoles( + [ + 'test_logstash_reader', + 'global_maps_all', + 'geoshape_data_reader', + 'global_dashboard_all', + 'meta_for_geoshape_data_reader', + ], + { skipBrowserRefresh: true } + ); + }); + + after(async () => { + await security.testUser.restoreDefaults(); + }); + + it('should allow new map be added by value to a new dashboard', async () => { + await maps.openNewMap(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('map 1', { + addToDashboard: 'new', + saveToLibrary: false, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectNotLinkedToLibrary('map 1'); + await timeToVisualize.resetNewDashboard(); + }); + + it('should allow existing maps be added by value to a new dashboard', async () => { + await maps.loadSavedMap('document example'); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('document example copy', { + saveToLibrary: false, + addToDashboard: 'new', + saveAsNew: true, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectNotLinkedToLibrary('document example copy'); + await timeToVisualize.resetNewDashboard(); + }); + + it('should allow new map be added by value to an existing dashboard', async () => { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + + await dashboard.saveDashboard('My Very Cool Dashboard'); + await dashboard.gotoDashboardLandingPage(); + await listingTable.searchAndExpectItemsCount('dashboard', 'My Very Cool Dashboard', 1); + + await maps.openNewMap(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('My New Map 2', { + saveToLibrary: false, + addToDashboard: 'existing', + dashboardId: 'My Very Cool Dashboard', + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectNotLinkedToLibrary('My New Map 2'); + }); + + it('should allow existing maps be added by value to an existing dashboard', async () => { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + + await dashboard.saveDashboard('My Wonderful Dashboard'); + await dashboard.gotoDashboardLandingPage(); + await listingTable.searchAndExpectItemsCount('dashboard', 'My Wonderful Dashboard', 1); + + await maps.loadSavedMap('document example'); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('document example copy 2', { + saveToLibrary: false, + addToDashboard: 'existing', + dashboardId: 'My Wonderful Dashboard', + saveAsNew: true, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectNotLinkedToLibrary('document example copy 2'); + }); + + it('should allow new map be added by reference to a new dashboard', async () => { + await maps.openNewMap(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('map 1', { + addToDashboard: 'new', + saveToLibrary: true, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectLinkedToLibrary('map 1'); + + await timeToVisualize.resetNewDashboard(); + }); + + it('should allow existing maps be added by reference to a new dashboard', async () => { + await maps.loadSavedMap('document example'); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('document example copy', { + saveToLibrary: true, + addToDashboard: 'new', + saveAsNew: true, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectLinkedToLibrary('document example copy'); + await timeToVisualize.resetNewDashboard(); + }); + + it('should allow new map be added by reference to an existing dashboard', async () => { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + + await dashboard.saveDashboard('My Super Cool Dashboard'); + await dashboard.gotoDashboardLandingPage(); + await listingTable.searchAndExpectItemsCount('dashboard', 'My Super Cool Dashboard', 1); + + await maps.openNewMap(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('My New Map 2', { + saveToLibrary: true, + addToDashboard: 'existing', + dashboardId: 'My Super Cool Dashboard', + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectLinkedToLibrary('My New Map 2'); + }); + + it('should allow existing maps be added by reference to an existing dashboard', async () => { + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + + await dashboard.saveDashboard('My Amazing Dashboard'); + await dashboard.gotoDashboardLandingPage(); + await listingTable.searchAndExpectItemsCount('dashboard', 'My Amazing Dashboard', 1); + + await maps.loadSavedMap('document example'); + + await testSubjects.click('mapSaveButton'); + await timeToVisualize.saveFromModal('document example copy 2', { + saveToLibrary: true, + addToDashboard: 'existing', + dashboardId: 'My Amazing Dashboard', + saveAsNew: true, + }); + + await dashboard.waitForRenderComplete(); + + const panelCount = await dashboard.getPanelCount(); + expect(panelCount).to.eql(1); + + await dashboardPanelActions.expectLinkedToLibrary('document example copy 2'); + }); + }); +} diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/canvas.ts b/x-pack/test/functional/apps/maps/group2/embeddable/canvas.ts index 8adab9fa86bb4e..ddcbdbea93b659 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/canvas.ts +++ b/x-pack/test/functional/apps/maps/group2/embeddable/canvas.ts @@ -9,26 +9,26 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['canvas', 'common', 'maps']); + const { canvas, maps } = getPageObjects(['canvas', 'maps']); const retry = getService('retry'); describe('Map embeddable in canvas', () => { before(async () => { - await PageObjects.canvas.goToListingPage(); - await PageObjects.canvas.loadFirstWorkpad('Canvas with map'); + await canvas.goToListingPage(); + await canvas.loadFirstWorkpad('Canvas with map'); }); it('should render map embeddable', async () => { await retry.try(async () => { - const embeddableCount = await PageObjects.canvas.getEmbeddableCount(); + const embeddableCount = await canvas.getEmbeddableCount(); expect(embeddableCount).to.eql(1); }); - await PageObjects.maps.waitForLayersToLoad(); - expect(await PageObjects.maps.doesLayerExist('geo_shapes*')).to.equal(true); + await maps.waitForLayersToLoad(); + expect(await maps.doesLayerExist('geo_shapes*')).to.equal(true); }); it('should not show draw controls', async () => { - await PageObjects.maps.expectMissingToolsControl(); + await maps.expectMissingToolsControl(); }); }); } diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.ts similarity index 77% rename from x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js rename to x-pack/test/functional/apps/maps/group2/embeddable/dashboard.ts index bdc681e06eece8..22065d1d949510 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.ts @@ -7,9 +7,10 @@ import expect from '@kbn/expect'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'dashboard', 'maps']); +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, maps } = getPageObjects(['dashboard', 'maps']); const kibanaServer = getService('kibanaServer'); const filterBar = getService('filterBar'); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -35,9 +36,9 @@ export default function ({ getPageObjects, getService }) { defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', [UI_SETTINGS.COURIER_IGNORE_FILTER_IF_FIELD_NOT_IN_INDEX]: true, }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('map embeddable example'); + await dashboard.waitForRenderComplete(); }); after(async () => { @@ -50,21 +51,18 @@ export default function ({ getPageObjects, getService }) { async function getRequestTimestamp() { await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const requestTimestamp = PageObjects.maps.getInspectorStatRowHit( - requestStats, - 'Request timestamp' - ); + const requestTimestamp = maps.getInspectorStatRowHit(requestStats, 'Request timestamp'); await inspector.close(); return requestTimestamp; } it('should set "data-title" attribute', async () => { - const [{ title }] = await PageObjects.dashboard.getPanelSharedItemData(); + const [{ title }] = await dashboard.getPanelSharedItemData(); expect(title).to.be('join example'); }); it('should display tools control', async () => { - await PageObjects.maps.expectExistsToolsControl(); + await maps.expectExistsToolsControl(); }); it('should pass index patterns to container', async () => { @@ -92,7 +90,7 @@ export default function ({ getPageObjects, getService }) { }); it('should apply container state (time, query, filters) to embeddable when loaded', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponseFromDashboardPanel( + const { rawResponse: response } = await maps.getResponseFromDashboardPanel( 'geo grid vector grid example' ); expect(response.aggregations.gridSplit.buckets.length).to.equal(6); @@ -104,21 +102,21 @@ export default function ({ getPageObjects, getService }) { operation: 'is', value: 'win 8', }); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); await filterBar.addFilterAndSelectDataView('meta_for_geo_shapes*', { field: 'shape_name', operation: 'is', value: 'alpha', }); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); - const { rawResponse: gridResponse } = await PageObjects.maps.getResponseFromDashboardPanel( + const { rawResponse: gridResponse } = await maps.getResponseFromDashboardPanel( 'geo grid vector grid example' ); expect(gridResponse.aggregations.gridSplit.buckets.length).to.equal(1); - const { rawResponse: joinResponse } = await PageObjects.maps.getResponseFromDashboardPanel( + const { rawResponse: joinResponse } = await maps.getResponseFromDashboardPanel( 'join example', 'load join metrics (geo_shapes*)' ); @@ -129,15 +127,15 @@ export default function ({ getPageObjects, getService }) { // clear filters from previous test await filterBar.removeAllFilters(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await dashboardPanelActions.editPanelByTitle('geo grid vector grid example'); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); await filterBar.addFilter({ field: 'machine.os', operation: 'is', value: 'ios' }); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); await testSubjects.click('mapSaveAndReturnButton'); - const { rawResponse: gridResponse } = await PageObjects.maps.getResponseFromDashboardPanel( + const { rawResponse: gridResponse } = await maps.getResponseFromDashboardPanel( 'geo grid vector grid example' ); expect(gridResponse.aggregations.gridSplit.buckets.length).to.equal(2); @@ -146,7 +144,7 @@ export default function ({ getPageObjects, getService }) { it('should re-fetch query when "refresh" is clicked', async () => { await dashboardPanelActions.openInspectorByTitle('geo grid vector grid example'); const beforeQueryRefreshTimestamp = await getRequestTimestamp(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); await dashboardPanelActions.openInspectorByTitle('geo grid vector grid example'); const afterQueryRefreshTimestamp = await getRequestTimestamp(); expect(beforeQueryRefreshTimestamp).not.to.equal(afterQueryRefreshTimestamp); @@ -156,7 +154,7 @@ export default function ({ getPageObjects, getService }) { await dashboardPanelActions.openInspectorByTitle('geo grid vector grid example'); const beforeRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp.length).to.be(24); - await PageObjects.maps.triggerSingleRefresh(1000); + await maps.triggerSingleRefresh(1000); await dashboardPanelActions.openInspectorByTitle('geo grid vector grid example'); const afterRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp).not.to.equal(afterRefreshTimerTimestamp); @@ -164,12 +162,12 @@ export default function ({ getPageObjects, getService }) { // see https://github.com/elastic/kibana/issues/61596 on why it is specific to maps it("dashboard's back button should navigate to previous page", async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('map embeddable example'); + await dashboard.waitForRenderComplete(); await browser.goBack(); - expect(await PageObjects.dashboard.onDashboardLandingPage()).to.be(true); + expect(await dashboard.onDashboardLandingPage()).to.be(true); }); }); } diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js deleted file mode 100644 index a14d80bd080ecd..00000000000000 --- a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; - -export default function ({ getPageObjects, getService }) { - const find = getService('find'); - const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'maps', 'visualize']); - const kibanaServer = getService('kibanaServer'); - const security = getService('security'); - const dashboardAddPanel = getService('dashboardAddPanel'); - const dashboardPanelActions = getService('dashboardPanelActions'); - - describe('maps in embeddable library', () => { - before(async () => { - await security.testUser.setRoles( - [ - 'test_logstash_reader', - 'global_maps_all', - 'geoshape_data_reader', - 'global_dashboard_all', - 'meta_for_geoshape_data_reader', - ], - { skipBrowserRefresh: true } - ); - await kibanaServer.uiSettings.replace({ - defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', - }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); - await dashboardAddPanel.clickEditorMenuButton(); - await PageObjects.visualize.clickMapsApp(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.clickSaveAndReturnButton(); - await PageObjects.dashboard.waitForRenderComplete(); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - }); - - it('save map panel to embeddable library', async () => { - await dashboardPanelActions.saveToLibrary('embeddable library map'); - await testSubjects.existOrFail('addPanelToLibrarySuccess'); - - const mapPanel = await testSubjects.find('embeddablePanelHeading-embeddablelibrarymap'); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - mapPanel - ); - expect(libraryActionExists).to.be(true); - }); - - it('unlink map panel from embeddable library', async () => { - const originalPanel = await testSubjects.find('embeddablePanelHeading-embeddablelibrarymap'); - await dashboardPanelActions.unlinkFromLibrary(originalPanel); - await testSubjects.existOrFail('unlinkPanelSuccess'); - - const updatedPanel = await testSubjects.find('embeddablePanelHeading-embeddablelibrarymap'); - const libraryActionExists = await testSubjects.descendantExists( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - updatedPanel - ); - expect(libraryActionExists).to.be(false); - - await dashboardAddPanel.clickOpenAddPanel(); - await dashboardAddPanel.filterEmbeddableNames('embeddable library map'); - await find.existsByLinkText('embeddable library map'); - await dashboardAddPanel.closeAddPanel(); - }); - }); -} diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.ts b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.ts new file mode 100644 index 00000000000000..94a1974fd2c6a6 --- /dev/null +++ b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const find = getService('find'); + const { dashboard, header, maps, visualize } = getPageObjects([ + 'dashboard', + 'header', + 'maps', + 'visualize', + ]); + const kibanaServer = getService('kibanaServer'); + const security = getService('security'); + const dashboardAddPanel = getService('dashboardAddPanel'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const mapTitle = 'embeddable library map'; + + describe('maps in embeddable library', () => { + before(async () => { + await security.testUser.setRoles( + [ + 'test_logstash_reader', + 'global_maps_all', + 'geoshape_data_reader', + 'global_dashboard_all', + 'meta_for_geoshape_data_reader', + ], + { skipBrowserRefresh: true } + ); + await kibanaServer.uiSettings.replace({ + defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', + }); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); + await dashboardAddPanel.clickEditorMenuButton(); + await visualize.clickMapsApp(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + await maps.clickSaveAndReturnButton(); + await dashboard.waitForRenderComplete(); + }); + + after(async () => { + await security.testUser.restoreDefaults(); + }); + + it('save map panel to embeddable library', async () => { + await dashboardPanelActions.saveToLibrary(mapTitle); + await dashboardPanelActions.expectLinkedToLibrary(mapTitle); + }); + + it('unlink map panel from embeddable library', async () => { + await dashboardPanelActions.unlinkFromLibrary(mapTitle); + await dashboardPanelActions.expectNotLinkedToLibrary(mapTitle); + + await dashboardAddPanel.clickOpenAddPanel(); + await dashboardAddPanel.filterEmbeddableNames(mapTitle); + await find.existsByLinkText(mapTitle); + await dashboardAddPanel.closeAddPanel(); + }); + }); +} diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.ts similarity index 69% rename from x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js rename to x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.ts index 036edc77df7968..bca237bc99b1a0 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.ts @@ -6,9 +6,10 @@ */ import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'dashboard', 'maps']); +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, maps } = getPageObjects(['dashboard', 'maps']); const kibanaServer = getService('kibanaServer'); const security = getService('security'); const dashboardAddPanel = getService('dashboardAddPanel'); @@ -21,13 +22,13 @@ export default function ({ getPageObjects, getService }) { await kibanaServer.uiSettings.replace({ defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.addEmbeddable('document example', 'map'); - await PageObjects.maps.setView(0.0, 0.0, 10); - await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME); - await PageObjects.dashboard.loadSavedDashboard(DASHBOARD_NAME); + await maps.setView(0.0, 0.0, 10); + await dashboard.saveDashboard(DASHBOARD_NAME); + await dashboard.loadSavedDashboard(DASHBOARD_NAME); }); after(async () => { @@ -35,7 +36,7 @@ export default function ({ getPageObjects, getService }) { }); it('should render map with center and zoom from embeddable state', async () => { - const { lat, lon, zoom } = await PageObjects.maps.getView(); + const { lat, lon, zoom } = await maps.getView(); expect(Math.round(lat)).to.equal(0); expect(Math.round(lon)).to.equal(0); expect(Math.round(zoom)).to.equal(10); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.ts similarity index 67% rename from x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js rename to x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.ts index 45fb47b0eee7c1..60ef9b8799d3c0 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.ts @@ -5,10 +5,12 @@ * 2.0. */ +import { FtrProviderContext } from '../../../../ftr_provider_context'; + const FILTER_BY_MAP_EXTENT_DATA_TEST_SUBJ = 'embeddablePanelAction-FILTER_BY_MAP_EXTENT'; -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'lens', 'maps']); +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, header, lens, maps } = getPageObjects(['dashboard', 'header', 'lens', 'maps']); const browser = getService('browser'); const testSubjects = getService('testSubjects'); @@ -21,10 +23,10 @@ export default function ({ getPageObjects, getService }) { ['test_logstash_reader', 'global_maps_all', 'global_dashboard_all'], { skipBrowserRefresh: true } ); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardEditMode('filter by map extent dashboard'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardEditMode('filter by map extent dashboard'); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }); after(async () => { @@ -32,7 +34,7 @@ export default function ({ getPageObjects, getService }) { }); it('should not filter dashboard by map extent before "filter by map extent" is enabled', async () => { - await PageObjects.lens.assertLegacyMetric('Count of records', '6'); + await lens.assertLegacyMetric('Count of records', '6'); }); it('should filter dashboard by map extent when "filter by map extent" is enabled', async () => { @@ -45,15 +47,15 @@ export default function ({ getPageObjects, getService }) { 'check' ); await browser.pressKeys(browser.keys.ESCAPE); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.lens.assertLegacyMetric('Count of records', '1'); + await lens.assertLegacyMetric('Count of records', '1'); }); it('should filter dashboard by new map extent when map is moved', async () => { - await PageObjects.maps.setView(32.95539, -93.93054, 5); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.assertLegacyMetric('Count of records', '2'); + await maps.setView(32.95539, -93.93054, 5); + await header.waitUntilLoadingHasFinished(); + await lens.assertLegacyMetric('Count of records', '2'); }); it('should remove map extent filter dashboard when "filter by map extent" is disabled', async () => { @@ -67,8 +69,8 @@ export default function ({ getPageObjects, getService }) { 'uncheck' ); await browser.pressKeys(browser.keys.ESCAPE); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.assertLegacyMetric('Count of records', '6'); + await header.waitUntilLoadingHasFinished(); + await lens.assertLegacyMetric('Count of records', '6'); }); }); } diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/index.js b/x-pack/test/functional/apps/maps/group2/embeddable/index.ts similarity index 84% rename from x-pack/test/functional/apps/maps/group2/embeddable/index.js rename to x-pack/test/functional/apps/maps/group2/embeddable/index.ts index d07d253943b855..cdfd6cd26697b6 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/index.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/index.ts @@ -5,7 +5,9 @@ * 2.0. */ -export default function ({ loadTestFile }) { +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { describe('embeddable', function () { loadTestFile(require.resolve('./canvas')); loadTestFile(require.resolve('./add_to_dashboard')); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js b/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.ts similarity index 65% rename from x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js rename to x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.ts index 14ff01e4da46f7..cf736d53dbe689 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.ts @@ -6,15 +6,14 @@ */ import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects([ - 'common', +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, header, maps, timePicker } = getPageObjects([ 'dashboard', 'header', 'maps', 'timePicker', - 'visualize', ]); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -41,30 +40,30 @@ export default function ({ getPageObjects, getService }) { describe('new map', () => { beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.navigateToApp(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickVisType('maps'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); }); describe('save', () => { it('should return to dashboard and add new panel', async () => { - await PageObjects.maps.saveMap('map created from dashboard save and return'); - await PageObjects.dashboard.waitForRenderComplete(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + await maps.saveMap('map created from dashboard save and return'); + await dashboard.waitForRenderComplete(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.equal(1); }); }); describe('save and uncheck return to origin switch', () => { it('should cut the originator and stay in maps application', async () => { - await PageObjects.maps.saveMap( + await maps.saveMap( 'map created from dashboard save and return with originator app cut', false ); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); await testSubjects.missingOrFail('mapSaveAndReturnButton'); await testSubjects.existOrFail('mapSaveButton'); }); @@ -73,34 +72,34 @@ export default function ({ getPageObjects, getService }) { describe('edit existing map', () => { beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('map embeddable example'); + await dashboard.switchToEditMode(); await dashboardPanelActions.editPanelByTitle('join example'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); }); describe('save and return', () => { it('should use dashboard instead of time stored in map state', async () => { // join example map's time is "last 17 minutes" // ensure map has dashboard time - const timeConfig = await PageObjects.timePicker.getTimeConfig(); + const timeConfig = await timePicker.getTimeConfig(); expect(timeConfig.start).to.equal('Sep 20, 2015 @ 00:00:00.000'); expect(timeConfig.end).to.equal('Sep 20, 2015 @ 01:00:00.000'); }); it('should return to dashboard', async () => { - await PageObjects.maps.clickSaveAndReturnButton(); - await PageObjects.dashboard.waitForRenderComplete(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + await maps.clickSaveAndReturnButton(); + await dashboard.waitForRenderComplete(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.equal(2); }); it('should lose its connection to the dashboard when creating new map', async () => { - await PageObjects.maps.gotoMapListingPage(); - await PageObjects.maps.openNewMap(); - await PageObjects.maps.expectMissingSaveAndReturnButton(); + await maps.gotoMapListingPage(); + await maps.openNewMap(); + await maps.expectMissingSaveAndReturnButton(); // return to origin should not be present in save modal await testSubjects.click('mapSaveButton'); @@ -113,17 +112,17 @@ export default function ({ getPageObjects, getService }) { describe('save as', () => { it('should return to dashboard and add new panel', async () => { - await PageObjects.maps.saveMap('Clone of map embeddable example'); - await PageObjects.header.waitUntilLoadingHasFinished(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + await maps.saveMap('Clone of map embeddable example'); + await header.waitUntilLoadingHasFinished(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.equal(3); }); }); describe('save as and uncheck return to origin switch', () => { it('should cut the originator and stay in maps application', async () => { - await PageObjects.maps.saveMap('Clone 2 of map embeddable example', false); - await PageObjects.maps.waitForLayersToLoad(); + await maps.saveMap('Clone 2 of map embeddable example', false); + await maps.waitForLayersToLoad(); await testSubjects.missingOrFail('mapSaveAndReturnButton'); await testSubjects.existOrFail('mapSaveButton'); }); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js b/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.ts similarity index 78% rename from x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js rename to x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.ts index e7265f4d7883d8..88866082510cfb 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.ts @@ -6,9 +6,15 @@ */ import expect from '@kbn/expect'; - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'dashboard', 'discover', 'header', 'maps']); +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { dashboard, discover, header, maps } = getPageObjects([ + 'dashboard', + 'discover', + 'header', + 'maps', + ]); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); @@ -30,11 +36,11 @@ export default function ({ getPageObjects, getService }) { defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', }); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.preserveCrossAppState(); - await PageObjects.dashboard.loadSavedDashboard('dash for tooltip filter action test'); + await dashboard.navigateToApp(); + await dashboard.preserveCrossAppState(); + await dashboard.loadSavedDashboard('dash for tooltip filter action test'); - await PageObjects.maps.lockTooltipAtPosition(200, -200); + await maps.lockTooltipAtPosition(200, -200); } after(async () => { @@ -53,8 +59,8 @@ export default function ({ getPageObjects, getService }) { it('should create filters when create filter button is clicked', async () => { await testSubjects.click('mapTooltipCreateFilterButton'); - await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); - await PageObjects.maps.waitForLayersToLoadMinimizedLayerControl(); + await header.awaitGlobalLoadingIndicatorHidden(); + await maps.waitForLayersToLoadMinimizedLayerControl(); const numFilters = await filterBar.getFilterCount(); expect(numFilters).to.be(1); @@ -74,8 +80,8 @@ export default function ({ getPageObjects, getService }) { await testSubjects.click('mapFilterActionButton__drilldown1'); // Assert on new dashboard with filter from action - await PageObjects.dashboard.waitForRenderComplete(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + await dashboard.waitForRenderComplete(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.equal(2); const hasJoinFilter = await filterBar.hasFilter('runtime_shape_name', 'charlie'); @@ -87,7 +93,7 @@ export default function ({ getPageObjects, getService }) { await testSubjects.click('mapFilterActionButton__urlDrilldownToDiscover'); // Assert on discover with filter from action - await PageObjects.discover.waitForDiscoverAppOnScreen(); + await discover.waitForDiscoverAppOnScreen(); const hasFilter = await filterBar.hasFilter('name', 'charlie'); expect(hasFilter).to.be(true); }); diff --git a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.ts similarity index 63% rename from x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js rename to x-pack/test/functional/apps/maps/group2/es_geo_grid_source.ts index d2440a5dd706b1..b76c7031e3dd03 100644 --- a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js +++ b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.ts @@ -6,9 +6,11 @@ */ import expect from '@kbn/expect'; +import { Feature } from 'geojson'; +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const DOC_COUNT_PROP_NAME = 'doc_count'; const security = getService('security'); @@ -32,42 +34,39 @@ export default function ({ getPageObjects, getService }) { await inspector.open(); await inspector.openInspectorRequestsView(); const requestStats = await inspector.getTableData(); - const requestTimestamp = PageObjects.maps.getInspectorStatRowHit( - requestStats, - 'Request timestamp' - ); + const requestTimestamp = maps.getInspectorStatRowHit(requestStats, 'Request timestamp'); await inspector.close(); return requestTimestamp; } function makeRequestTestsForGeoPrecision( - LAYER_ID, - expectedNumFeaturesZoomedOut, - expectedNumPartialFeatures + layerID: string, + expectedNumFeaturesZoomedOut: number, + expectedNumPartialFeatures: number ) { describe('geoprecision - requests', () => { - let beforeTimestamp; + let beforeTimestamp = ''; beforeEach(async () => { - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1); + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1); beforeTimestamp = await getRequestTimestamp(); }); it('should not rerequest when pan changes do not move map view area outside of buffer', async () => { - await PageObjects.maps.setView(DATA_CENTER_LAT + 1, DATA_CENTER_LON + 1, 1); + await maps.setView(DATA_CENTER_LAT + 1, DATA_CENTER_LON + 1, 1); const afterTimestamp = await getRequestTimestamp(); expect(afterTimestamp).to.equal(beforeTimestamp); }); it('should not rerequest when zoom changes do not cause geotile_grid precision to change', async () => { - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1.4); + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1.4); const beforeSameZoom = await getRequestTimestamp(); - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1.6); + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1.6); const afterTimestamp = await getRequestTimestamp(); expect(afterTimestamp).to.equal(beforeSameZoom); }); it('should rerequest when zoom changes causes the geotile_grid precision to change', async () => { - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 4); + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 4); const afterTimestamp = await getRequestTimestamp(); expect(afterTimestamp).not.to.equal(beforeTimestamp); }); @@ -75,27 +74,27 @@ export default function ({ getPageObjects, getService }) { describe('geotile grid precision - data', () => { beforeEach(async () => { - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1); + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 1); }); it('should not return any data when the extent does not cover the data bounds', async () => { - await PageObjects.maps.setView(64, 179, 5); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); - expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal(0); + await maps.setView(64, 179, 5); + const mapboxStyle = await maps.getMapboxStyle(); + expect(mapboxStyle.sources[layerID].data.features.length).to.equal(0); }); it('should request the data when the map covers the databounds', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); - expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal( + const mapboxStyle = await maps.getMapboxStyle(); + expect(mapboxStyle.sources[layerID].data.features.length).to.equal( expectedNumFeaturesZoomedOut ); }); it('should request only partial data when the map only covers part of the databounds', async () => { - //todo this verifies the extent-filtering behavior (not really the correct application of geotile_grid-precision), and should ideally be moved to its own section - await PageObjects.maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 6); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); - expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal( + // todo this verifies the extent-filtering behavior (not really the correct application of geotile_grid-precision), and should ideally be moved to its own section + await maps.setView(DATA_CENTER_LAT, DATA_CENTER_LON, 6); + const mapboxStyle = await maps.getMapboxStyle(); + expect(mapboxStyle.sources[layerID].data.features.length).to.equal( expectedNumPartialFeatures ); }); @@ -104,7 +103,7 @@ export default function ({ getPageObjects, getService }) { describe('geo_point', () => { before(async () => { - await PageObjects.maps.loadSavedMap('geo grid vector grid example'); + await maps.loadSavedMap('geo grid vector grid example'); }); const LAYER_ID = 'g1xkv'; @@ -114,35 +113,37 @@ export default function ({ getPageObjects, getService }) { it('should re-fetch geotile_grid aggregation with refresh timer', async () => { const beforeRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp.length).to.be(24); - await PageObjects.maps.triggerSingleRefresh(1000); + await maps.triggerSingleRefresh(1000); const afterRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp).not.to.equal(afterRefreshTimerTimestamp); }); it('should decorate feature properties with metrics properterties', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal(12); - mapboxStyle.sources[LAYER_ID].data.features.forEach(({ properties }) => { - expect(Object.hasOwn(properties, MAX_OF_BYTES_PROP_NAME)).to.be(true); - expect(Object.hasOwn(properties, DOC_COUNT_PROP_NAME)).to.be(true); - }); + mapboxStyle.sources[LAYER_ID].data.features.forEach( + ({ properties }: Feature) => { + expect(Object.hasOwn(properties, MAX_OF_BYTES_PROP_NAME)).to.be(true); + expect(Object.hasOwn(properties, DOC_COUNT_PROP_NAME)).to.be(true); + } + ); }); makeRequestTestsForGeoPrecision(LAYER_ID, 8, 4); describe('query bar', () => { before(async () => { - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); - await PageObjects.maps.setView(0, 0, 0); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setView(0, 0, 0); }); after(async () => { - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAndSubmitQuery(''); }); it('should apply query to geotile_grid aggregation request', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponse(); + const { rawResponse: response } = await maps.getResponse(); expect(response.aggregations.gridSplit.buckets.length).to.equal(1); }); }); @@ -153,13 +154,13 @@ export default function ({ getPageObjects, getService }) { }); it('should contain geotile_grid aggregation elasticsearch request', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponse(); + const { rawResponse: response } = await maps.getResponse(); expect(response.aggregations.gridSplit.buckets.length).to.equal(4); }); it('should not contain any elasticsearch request after layer is deleted', async () => { - await PageObjects.maps.removeLayer('logstash-*'); - const noRequests = await PageObjects.maps.doesInspectorHaveRequests(); + await maps.removeLayer('logstash-*'); + const noRequests = await maps.doesInspectorHaveRequests(); expect(noRequests).to.equal(true); }); }); @@ -167,12 +168,12 @@ export default function ({ getPageObjects, getService }) { describe('geo_shape', () => { before(async () => { - await PageObjects.maps.loadSavedMap('geo grid vector grid example with shape'); + await maps.loadSavedMap('geo grid vector grid example with shape'); }); const LAYER_ID = 'g1xkv'; it('should get expected number of grid cells', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal(26); }); @@ -182,7 +183,7 @@ export default function ({ getPageObjects, getService }) { }); it('should contain geotile_grid aggregation elasticsearch request', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponse(); + const { rawResponse: response } = await maps.getResponse(); expect(response.aggregations.gridSplit.buckets.length).to.equal(13); }); }); diff --git a/x-pack/test/functional/apps/maps/group2/index.js b/x-pack/test/functional/apps/maps/group2/index.ts similarity index 94% rename from x-pack/test/functional/apps/maps/group2/index.js rename to x-pack/test/functional/apps/maps/group2/index.ts index c2130f4587041e..fc4543aa756f6b 100644 --- a/x-pack/test/functional/apps/maps/group2/index.js +++ b/x-pack/test/functional/apps/maps/group2/index.ts @@ -5,7 +5,9 @@ * 2.0. */ -export default function ({ loadTestFile, getService }) { +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); const browser = getService('browser'); diff --git a/x-pack/test/functional/apps/maps/group2/multiple_data_views.ts b/x-pack/test/functional/apps/maps/group2/multiple_data_views.ts index facc97a0b46cd4..6dc54085bf8cff 100644 --- a/x-pack/test/functional/apps/maps/group2/multiple_data_views.ts +++ b/x-pack/test/functional/apps/maps/group2/multiple_data_views.ts @@ -13,21 +13,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'maps']); + const { common, maps } = getPageObjects(['common', 'maps']); describe('maps with multiple data views', () => { const mapTitle = 'map with multiple data views'; const createLayerForDataView = async (dataView: string) => { - await PageObjects.maps.clickAddLayer(); + await maps.clickAddLayer(); await testSubjects.click('documents'); - await PageObjects.maps.selectGeoIndexPatternLayer(dataView); + await maps.selectGeoIndexPatternLayer(dataView); await testSubjects.click('importFileButton'); await testSubjects.click('layerPanelCancelButton'); }; before(async () => { - await PageObjects.common.setTime({ + await common.setTime({ from: 'Oct 23, 2018 @ 07:00:00.000', to: 'Oct 23, 2018 @ 08:00:00.000', }); @@ -43,7 +43,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await kibanaServer.uiSettings.update({ 'courier:ignoreFilterIfFieldNotInIndex': true }); - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); }); after(async () => { @@ -65,34 +65,34 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // Flights layer await createLayerForDataView('kibana_sample_data_flights'); - expect(await PageObjects.maps.getNumberOfLayers()).to.be(3); - expect(await PageObjects.maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( + expect(await maps.getNumberOfLayers()).to.be(3); + expect(await maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( 'kibana_sample_data_flights\nFound 9 documents.\nResults narrowed by global time' ); - expect(await PageObjects.maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( + expect(await maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( 'long-window-logstash-*\nFound 2 documents.\nResults narrowed by global time' ); }); it('ignores global filters on layers using a data view without the filter field by default', async () => { await filterBar.addFilter({ field: '@message', operation: 'exists' }); - expect(await PageObjects.maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( + expect(await maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( 'kibana_sample_data_flights\nFound 9 documents.\nResults narrowed by global search\nResults narrowed by global time' ); - expect(await PageObjects.maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( + expect(await maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( 'long-window-logstash-*\nFound 2 documents.\nResults narrowed by global search\nResults narrowed by global time' ); - await PageObjects.maps.saveMap(mapTitle); + await maps.saveMap(mapTitle); }); it('applies global filters on layers using data view a without the filter field', async () => { await kibanaServer.uiSettings.update({ 'courier:ignoreFilterIfFieldNotInIndex': false }); - await PageObjects.maps.loadSavedMap(mapTitle); - expect(await PageObjects.maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( + await maps.loadSavedMap(mapTitle); + expect(await maps.getLayerTocTooltipMsg('kibana_sample_data_flights')).to.equal( 'kibana_sample_data_flights\nNo results found.\nResults narrowed by global search\nResults narrowed by global time' ); - expect(await PageObjects.maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( + expect(await maps.getLayerTocTooltipMsg('long-window-logstash-*')).to.equal( 'long-window-logstash-*\nFound 2 documents.\nResults narrowed by global search\nResults narrowed by global time' ); }); diff --git a/x-pack/test/functional/apps/maps/group3/reports/index.ts b/x-pack/test/functional/apps/maps/group3/reports/index.ts index 172a9cfba1add2..dbef00501aa70d 100644 --- a/x-pack/test/functional/apps/maps/group3/reports/index.ts +++ b/x-pack/test/functional/apps/maps/group3/reports/index.ts @@ -11,12 +11,12 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; const REPORTS_FOLDER = __dirname; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['reporting', 'common', 'dashboard']); + const { reporting, dashboard } = getPageObjects(['reporting', 'dashboard']); const testSubjects = getService('testSubjects'); const browser = getService('browser'); const config = getService('config'); const log = getService('log'); - const reporting = getService('reporting'); + const reportingService = getService('reporting'); const png = getService('png'); // NOTE: Occasionally, you may need to run the test and copy the "session" image file and replace the @@ -25,10 +25,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('dashboard reporting: creates a map report', () => { // helper function to check the difference between the new image and the baseline const measurePngDifference = async (fileName: string) => { - const url = await PageObjects.reporting.getReportURL(60000); - const reportData = await PageObjects.reporting.getRawReportData(url ?? ''); + const url = await reporting.getReportURL(60000); + const reportData = await reporting.getRawReportData(url ?? ''); - const sessionReportPath = await PageObjects.reporting.writeSessionReport( + const sessionReportPath = await reporting.writeSessionReport( fileName, 'png', reportData, @@ -36,11 +36,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); expect(sessionReportPath).not.to.be(null); - const baselineReportPath = PageObjects.reporting.getBaselineReportPath( - fileName, - 'png', - REPORTS_FOLDER - ); + const baselineReportPath = reporting.getBaselineReportPath(fileName, 'png', REPORTS_FOLDER); log.debug(`session report path: ${sessionReportPath}`); log.debug(`baseline report path: ${baselineReportPath}`); @@ -56,30 +52,30 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); after(async () => { - await reporting.deleteAllReports(); + await reportingService.deleteAllReports(); }); it('PNG file matches the baseline image, using sample geo data', async function () { - await reporting.initEcommerce(); + await reportingService.initEcommerce(); - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('Ecommerce Map'); - await PageObjects.reporting.openExportTab(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('Ecommerce Map'); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); - await PageObjects.reporting.clickGenerateReportButton(); + await reporting.clickGenerateReportButton(); const percentDiff = await measurePngDifference('geo_map_report'); expect(percentDiff).to.be.lessThan(0.03); - await reporting.teardownEcommerce(); + await reportingService.teardownEcommerce(); }); it('PNG file matches the baseline image, using embeddable example', async function () { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); - await PageObjects.reporting.openExportTab(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('map embeddable example'); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); - await PageObjects.reporting.clickGenerateReportButton(); + await reporting.clickGenerateReportButton(); const percentDiff = await measurePngDifference('example_map_report'); expect(percentDiff).to.be.lessThan(0.03); diff --git a/x-pack/test/functional/apps/maps/group4/add_layer_panel.js b/x-pack/test/functional/apps/maps/group4/add_layer_panel.js index b11694679e1723..a85857180187c6 100644 --- a/x-pack/test/functional/apps/maps/group4/add_layer_panel.js +++ b/x-pack/test/functional/apps/maps/group4/add_layer_panel.js @@ -9,16 +9,16 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); describe('Add layer panel', () => { before(async () => { await security.testUser.setRoles(['global_maps_all', 'test_logstash_reader']); - await PageObjects.maps.openNewMap(); - await PageObjects.maps.clickAddLayer(); - await PageObjects.maps.selectDocumentsSource(); - await PageObjects.maps.selectGeoIndexPatternLayer('logstash-*'); + await maps.openNewMap(); + await maps.clickAddLayer(); + await maps.selectDocumentsSource(); + await maps.selectGeoIndexPatternLayer('logstash-*'); }); after(async () => { @@ -26,7 +26,7 @@ export default function ({ getService, getPageObjects }) { }); it('should show unsaved layer in layer TOC', async () => { - const vectorLayerExists = await PageObjects.maps.doesLayerExist('logstash-*'); + const vectorLayerExists = await maps.doesLayerExist('logstash-*'); expect(vectorLayerExists).to.be(true); }); @@ -37,9 +37,9 @@ export default function ({ getService, getPageObjects }) { }); it('should remove layer on cancel', async () => { - await PageObjects.maps.cancelLayerAdd('logstash-*'); + await maps.cancelLayerAdd('logstash-*'); - const vectorLayerExists = await PageObjects.maps.doesLayerExist('logstash-*'); + const vectorLayerExists = await maps.doesLayerExist('logstash-*'); expect(vectorLayerExists).to.be(false); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/discover.js b/x-pack/test/functional/apps/maps/group4/discover.js index 94515e2feb87ff..5eddaabaffe42f 100644 --- a/x-pack/test/functional/apps/maps/group4/discover.js +++ b/x-pack/test/functional/apps/maps/group4/discover.js @@ -9,12 +9,11 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { const queryBar = getService('queryBar'); - const PageObjects = getPageObjects([ + const { common, discover, header, maps, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'header', 'maps', - 'timePicker', 'unifiedFieldList', ]); const security = getService('security'); @@ -30,44 +29,44 @@ export default function ({ getService, getPageObjects }) { 'global_discover_read', 'global_visualize_read', ]); - await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('discover'); + await common.setTime({ from, to }); + await common.navigateToApp('discover'); }); after(async () => { await security.testUser.restoreDefaults(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should link geo_shape fields to Maps application', async () => { - await PageObjects.discover.selectIndexPattern('geo_shapes*'); - await PageObjects.unifiedFieldList.clickFieldListItemVisualize('geometry'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - const doesLayerExist = await PageObjects.maps.doesLayerExist('geo_shapes*'); + await discover.selectIndexPattern('geo_shapes*'); + await unifiedFieldList.clickFieldListItemVisualize('geometry'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + const doesLayerExist = await maps.doesLayerExist('geo_shapes*'); expect(doesLayerExist).to.equal(true); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('geo_shapes*'); + const tooltipText = await maps.getLayerTocTooltipMsg('geo_shapes*'); expect(tooltipText).to.equal('geo_shapes*\nFound ~8 documents. This count is approximate.'); - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); }); it('should link geo_point fields to Maps application with time and query context', async () => { - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); await queryBar.setQuery('machine.os.raw : "ios"'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemVisualize('geo.coordinates'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - const doesLayerExist = await PageObjects.maps.doesLayerExist('logstash-*'); + await unifiedFieldList.clickFieldListItemVisualize('geo.coordinates'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + const doesLayerExist = await maps.doesLayerExist('logstash-*'); expect(doesLayerExist).to.equal(true); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('logstash-*'); + const tooltipText = await maps.getLayerTocTooltipMsg('logstash-*'); expect(tooltipText).to.equal( 'logstash-*\nFound 7 documents.\nResults narrowed by global search\nResults narrowed by global time' ); - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); }); }); } diff --git a/x-pack/test/functional/apps/maps/group4/es_pew_pew_source.js b/x-pack/test/functional/apps/maps/group4/es_pew_pew_source.js index ea94ee3bc67d80..2350eca7c7ea60 100644 --- a/x-pack/test/functional/apps/maps/group4/es_pew_pew_source.js +++ b/x-pack/test/functional/apps/maps/group4/es_pew_pew_source.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); const VECTOR_SOURCE_ID = '67c1de2c-2fc5-4425-8983-094b589afe61'; @@ -16,7 +16,7 @@ export default function ({ getPageObjects, getService }) { describe('point to point source', () => { before(async () => { await security.testUser.setRoles(['global_maps_all', 'geoconnections_data_reader']); - await PageObjects.maps.loadSavedMap('pew pew demo'); + await maps.loadSavedMap('pew pew demo'); }); after(async () => { @@ -24,12 +24,12 @@ export default function ({ getPageObjects, getService }) { }); it('should request source clusters for destination locations', async () => { - const { rawResponse: response } = await PageObjects.maps.getResponse(); + const { rawResponse: response } = await maps.getResponse(); expect(response.aggregations.destSplit.buckets.length).to.equal(2); }); it('should render lines', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); const features = mapboxStyle.sources[VECTOR_SOURCE_ID].data.features; expect(features.length).to.equal(4); expect(features[0].geometry.type).to.equal('LineString'); @@ -37,9 +37,9 @@ export default function ({ getPageObjects, getService }) { it('should fit to bounds', async () => { // Set view to other side of world so no matching results - await PageObjects.maps.setView(-70, 0, 6); - await PageObjects.maps.clickFitToBounds('connections'); - const { lat, lon } = await PageObjects.maps.getView(); + await maps.setView(-70, 0, 6); + await maps.clickFitToBounds('connections'); + const { lat, lon } = await maps.getView(); expect(Math.round(lat)).to.equal(41); expect(Math.round(lon)).to.equal(-70); }); diff --git a/x-pack/test/functional/apps/maps/group4/file_upload/geojson.js b/x-pack/test/functional/apps/maps/group4/file_upload/geojson.js index 744235a023d3cd..5b722444ceb893 100644 --- a/x-pack/test/functional/apps/maps/group4/file_upload/geojson.js +++ b/x-pack/test/functional/apps/maps/group4/file_upload/geojson.js @@ -10,7 +10,7 @@ import path from 'path'; import { v4 as uuidv4 } from 'uuid'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['geoFileUpload', 'maps']); + const { geoFileUpload, maps } = getPageObjects(['geoFileUpload', 'maps']); const security = getService('security'); const retry = getService('retry'); @@ -22,7 +22,7 @@ export default function ({ getPageObjects, getService }) { 'geoall_data_writer', 'global_index_pattern_management_all', ]); - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); }); after(async () => { @@ -30,39 +30,39 @@ export default function ({ getPageObjects, getService }) { }); it('should preview part of geojson file', async () => { - await PageObjects.maps.clickAddLayer(); - await PageObjects.maps.selectFileUploadCard(); - await PageObjects.geoFileUpload.previewGeoJsonFile( + await maps.clickAddLayer(); + await maps.selectFileUploadCard(); + await geoFileUpload.previewGeoJsonFile( path.join(__dirname, 'files', 'world_countries_v7.geo.json') ); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('world_countries_v7'); + const tooltipText = await maps.getLayerTocTooltipMsg('world_countries_v7'); expect(tooltipText).to.be('world_countries_v7\nResults limited to 76 features, 41% of file.'); }); it('should import geojson', async () => { indexName = uuidv4(); - await PageObjects.geoFileUpload.setIndexName(indexName); - await PageObjects.geoFileUpload.uploadFile(); + await geoFileUpload.setIndexName(indexName); + await geoFileUpload.uploadFile(); - const statusText = await PageObjects.geoFileUpload.getFileUploadStatusCalloutMsg(); + const statusText = await geoFileUpload.getFileUploadStatusCalloutMsg(); expect(statusText).to.be('File upload complete\nIndexed 250 features.'); }); it('should add as document layer', async () => { - await PageObjects.geoFileUpload.addFileAsDocumentLayer(); - await PageObjects.maps.waitForLayersToLoad(); + await geoFileUpload.addFileAsDocumentLayer(); + await maps.waitForLayersToLoad(); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); await retry.try(async () => { - await PageObjects.maps.waitForLayersToLoad(); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg(indexName); + await maps.waitForLayersToLoad(); + const tooltipText = await maps.getLayerTocTooltipMsg(indexName); expect(tooltipText).to.be(`${indexName}\nFound ~281 documents. This count is approximate.`); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/file_upload/shapefile.js b/x-pack/test/functional/apps/maps/group4/file_upload/shapefile.js index c57a4ad69b9b51..c1d40776df94fc 100644 --- a/x-pack/test/functional/apps/maps/group4/file_upload/shapefile.js +++ b/x-pack/test/functional/apps/maps/group4/file_upload/shapefile.js @@ -10,7 +10,7 @@ import path from 'path'; import { v4 as uuidv4 } from 'uuid'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['geoFileUpload', 'maps']); + const { geoFileUpload, maps } = getPageObjects(['geoFileUpload', 'maps']); const security = getService('security'); const retry = getService('retry'); @@ -22,7 +22,7 @@ export default function ({ getPageObjects, getService }) { 'geoall_data_writer', 'global_index_pattern_management_all', ]); - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); }); after(async () => { @@ -30,20 +30,20 @@ export default function ({ getPageObjects, getService }) { }); it('should preview part of shapefile', async () => { - await PageObjects.maps.clickAddLayer(); - await PageObjects.maps.selectFileUploadCard(); - await PageObjects.geoFileUpload.previewShapefile( + await maps.clickAddLayer(); + await maps.selectFileUploadCard(); + await geoFileUpload.previewShapefile( path.join(__dirname, 'files', 'cb_2018_us_csa_500k.shp') ); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); // preview text is inconsistent. Skip expect for now // https://github.com/elastic/kibana/issues/124334 /* - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg('cb_2018_us_csa_500k'); + const tooltipText = await maps.getLayerTocTooltipMsg('cb_2018_us_csa_500k'); expect(tooltipText).to.be( 'cb_2018_us_csa_500k\nResults limited to 141 features, 81% of file.' ); @@ -52,23 +52,23 @@ export default function ({ getPageObjects, getService }) { it('should import shapefile', async () => { indexName = uuidv4(); - await PageObjects.geoFileUpload.setIndexName(indexName); - await PageObjects.geoFileUpload.uploadFile(); + await geoFileUpload.setIndexName(indexName); + await geoFileUpload.uploadFile(); - const statusText = await PageObjects.geoFileUpload.getFileUploadStatusCalloutMsg(); + const statusText = await geoFileUpload.getFileUploadStatusCalloutMsg(); expect(statusText).to.be('File upload complete\nIndexed 174 features.'); }); it('should add as document layer', async () => { - await PageObjects.geoFileUpload.addFileAsDocumentLayer(); - await PageObjects.maps.waitForLayersToLoad(); + await geoFileUpload.addFileAsDocumentLayer(); + await maps.waitForLayersToLoad(); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); await retry.try(async () => { - await PageObjects.maps.waitForLayersToLoad(); - const tooltipText = await PageObjects.maps.getLayerTocTooltipMsg(indexName); + await maps.waitForLayersToLoad(); + const tooltipText = await maps.getLayerTocTooltipMsg(indexName); expect(tooltipText).to.be(`${indexName}\nFound 174 documents.`); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/file_upload/wizard.js b/x-pack/test/functional/apps/maps/group4/file_upload/wizard.js index 4ce63e9721d31a..69c0741865c5da 100644 --- a/x-pack/test/functional/apps/maps/group4/file_upload/wizard.js +++ b/x-pack/test/functional/apps/maps/group4/file_upload/wizard.js @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import path from 'path'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['geoFileUpload', 'maps']); + const { geoFileUpload, maps } = getPageObjects(['geoFileUpload', 'maps']); const security = getService('security'); const retry = getService('retry'); @@ -29,60 +29,56 @@ export default function ({ getPageObjects, getService }) { // describe block is testing a workflow and individual tests are not designed to be run out of order describe('preview layer workflow', () => { before(async () => { - await PageObjects.maps.openNewMap(); - await PageObjects.maps.clickAddLayer(); - await PageObjects.maps.selectFileUploadCard(); - await PageObjects.geoFileUpload.previewGeoJsonFile( - path.join(__dirname, 'files', 'point.json') - ); - await PageObjects.maps.waitForLayersToLoad(); + await maps.openNewMap(); + await maps.clickAddLayer(); + await maps.selectFileUploadCard(); + await geoFileUpload.previewGeoJsonFile(path.join(__dirname, 'files', 'point.json')); + await maps.waitForLayersToLoad(); }); it('should add preview layer to map', async () => { - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); - const hasLayer = await PageObjects.maps.doesLayerExist('point'); + const hasLayer = await maps.doesLayerExist('point'); expect(hasLayer).to.be(true); }); it('should replace preivew layer on file change', async () => { - await PageObjects.geoFileUpload.previewGeoJsonFile( - path.join(__dirname, 'files', 'polygon.json') - ); - await PageObjects.maps.waitForLayersToLoad(); + await geoFileUpload.previewGeoJsonFile(path.join(__dirname, 'files', 'polygon.json')); + await maps.waitForLayersToLoad(); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(2); - const hasLayer = await PageObjects.maps.doesLayerExist('polygon'); + const hasLayer = await maps.doesLayerExist('polygon'); expect(hasLayer).to.be(true); }); it('should disable next button when index already exists', async () => { await retry.try(async () => { - expect(await PageObjects.geoFileUpload.isNextButtonEnabled()).to.be(true); + expect(await geoFileUpload.isNextButtonEnabled()).to.be(true); }); // "geo_shapes" index already exists, its added by es_archive - await PageObjects.geoFileUpload.setIndexName('geo_shapes'); + await geoFileUpload.setIndexName('geo_shapes'); await retry.try(async () => { - expect(await PageObjects.geoFileUpload.isNextButtonEnabled()).to.be(false); + expect(await geoFileUpload.isNextButtonEnabled()).to.be(false); }); }); it('should enable next button when index name is changed', async () => { - await PageObjects.geoFileUpload.setIndexName('polygon'); + await geoFileUpload.setIndexName('polygon'); await retry.try(async () => { - expect(await PageObjects.geoFileUpload.isNextButtonEnabled()).to.be(true); + expect(await geoFileUpload.isNextButtonEnabled()).to.be(true); }); }); it('should remove preview layer on cancel', async () => { - await PageObjects.maps.cancelLayerAdd(); + await maps.cancelLayerAdd(); - await PageObjects.maps.waitForLayerDeleted('polygon'); - const numberOfLayers = await PageObjects.maps.getNumberOfLayers(); + await maps.waitForLayerDeleted('polygon'); + const numberOfLayers = await maps.getNumberOfLayers(); expect(numberOfLayers).to.be(1); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/geofile_wizard_auto_open.ts b/x-pack/test/functional/apps/maps/group4/geofile_wizard_auto_open.ts index ad9cb7a5ae3b1f..6c42d9f7a8da70 100644 --- a/x-pack/test/functional/apps/maps/group4/geofile_wizard_auto_open.ts +++ b/x-pack/test/functional/apps/maps/group4/geofile_wizard_auto_open.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'maps']); + const { common, maps } = getPageObjects(['common', 'maps']); const find = getService('find'); const browser = getService('browser'); const retry = getService('retry'); @@ -18,7 +18,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // Failing: See https://github.com/elastic/kibana/issues/173095 describe.skip('Auto open file upload wizard in maps app', () => { before(async () => { - await PageObjects.common.navigateToUrl('integrations', 'browse', { + await common.navigateToUrl('integrations', 'browse', { useActualUrl: true, }); const searchInput = await find.byCssSelector('[data-test-subj="epmList.searchBar"]'); @@ -37,7 +37,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should upload form exist', async () => { await retry.waitFor( `Add layer panel to be visible`, - async () => await PageObjects.maps.isLayerAddPanelOpen() + async () => await maps.isLayerAddPanelOpen() ); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/joins.js b/x-pack/test/functional/apps/maps/group4/joins.js index b4846533b6a05f..3ef94ffac86a97 100644 --- a/x-pack/test/functional/apps/maps/group4/joins.js +++ b/x-pack/test/functional/apps/maps/group4/joins.js @@ -18,7 +18,7 @@ const EXPECTED_JOIN_VALUES = { const VECTOR_SOURCE_ID = 'n1t6f'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); @@ -28,36 +28,33 @@ export default function ({ getPageObjects, getService }) { ['global_maps_all', 'geoshape_data_reader', 'meta_for_geoshape_data_reader'], { skipBrowserRefresh: true } ); - await PageObjects.maps.loadSavedMap('join example'); + await maps.loadSavedMap('join example'); }); after(async () => { await inspector.close(); - await PageObjects.maps.refreshAndClearUnsavedChangesWarning(); + await maps.refreshAndClearUnsavedChangesWarning(); await security.testUser.restoreDefaults(); }); it('should re-fetch join with refresh timer', async () => { async function getRequestTimestamp() { - await PageObjects.maps.openInspectorRequest('load join metrics (geo_shapes*)'); + await maps.openInspectorRequest('load join metrics (geo_shapes*)'); const requestStats = await inspector.getTableData(); - const requestTimestamp = PageObjects.maps.getInspectorStatRowHit( - requestStats, - 'Request timestamp' - ); + const requestTimestamp = maps.getInspectorStatRowHit(requestStats, 'Request timestamp'); await inspector.close(); return requestTimestamp; } const beforeRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp.length).to.be(24); - await PageObjects.maps.triggerSingleRefresh(1000); + await maps.triggerSingleRefresh(1000); const afterRefreshTimerTimestamp = await getRequestTimestamp(); expect(beforeRefreshTimerTimestamp).not.to.equal(afterRefreshTimerTimestamp); }); it('should show dynamic data range in legend', async () => { - const layerTOCDetails = await PageObjects.maps.getLayerTOCDetails('geo_shapes*'); + const layerTOCDetails = await maps.getLayerTOCDetails('geo_shapes*'); const split = layerTOCDetails.trim().split('\n'); //field display name @@ -75,7 +72,7 @@ export default function ({ getPageObjects, getService }) { }); it('should decorate feature properties with join property', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); expect(mapboxStyle.sources[VECTOR_SOURCE_ID].data.features.length).to.equal(8); mapboxStyle.sources.n1t6f.data.features.forEach(({ properties }) => { @@ -90,7 +87,7 @@ export default function ({ getPageObjects, getService }) { }); it('should flag only the joined features as visible', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); const vectorSource = mapboxStyle.sources[VECTOR_SOURCE_ID]; const visibilitiesOfFeatures = vectorSource.data.features.map((feature) => { @@ -112,16 +109,16 @@ export default function ({ getPageObjects, getService }) { describe('query bar', () => { before(async () => { - await PageObjects.maps.setAndSubmitQuery('prop1 < 10'); + await maps.setAndSubmitQuery('prop1 < 10'); }); after(async () => { await inspector.close(); - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAndSubmitQuery(''); }); it('should not apply query to source and apply query to join', async () => { - const { rawResponse: joinResponse } = await PageObjects.maps.getResponse( + const { rawResponse: joinResponse } = await maps.getResponse( 'load join metrics (geo_shapes*)' ); expect(joinResponse.aggregations.join.buckets.length).to.equal(2); @@ -130,22 +127,22 @@ export default function ({ getPageObjects, getService }) { describe('where clause', () => { before(async () => { - await PageObjects.maps.setJoinWhereQuery('geo_shapes*', 'prop1 >= 11'); + await maps.setJoinWhereQuery('geo_shapes*', 'prop1 >= 11'); }); after(async () => { - await PageObjects.maps.closeLayerPanel(); + await maps.closeLayerPanel(); }); it('should apply query to join request', async () => { - const { rawResponse: joinResponse } = await PageObjects.maps.getResponse( + const { rawResponse: joinResponse } = await maps.getResponse( 'load join metrics (geo_shapes*)' ); expect(joinResponse.aggregations.join.buckets.length).to.equal(1); }); it('should update dynamic data range in legend with new results', async () => { - const layerTOCDetails = await PageObjects.maps.getLayerTOCDetails('geo_shapes*'); + const layerTOCDetails = await maps.getLayerTOCDetails('geo_shapes*'); const split = layerTOCDetails.trim().split('\n'); const min = split[0]; @@ -156,7 +153,7 @@ export default function ({ getPageObjects, getService }) { }); it('should flag only the joined features as visible', async () => { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); const vectorSource = mapboxStyle.sources[VECTOR_SOURCE_ID]; const visibilitiesOfFeatures = vectorSource.data.features.map((feature) => { @@ -183,8 +180,8 @@ export default function ({ getPageObjects, getService }) { }); it('should not contain any elasticsearch request after layer is deleted', async () => { - await PageObjects.maps.removeLayer('geo_shapes*'); - const noRequests = await PageObjects.maps.doesInspectorHaveRequests(); + await maps.removeLayer('geo_shapes*'); + const noRequests = await maps.doesInspectorHaveRequests(); expect(noRequests).to.equal(true); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/layer_errors.js b/x-pack/test/functional/apps/maps/group4/layer_errors.js index 9f8a570a46d96d..049893b174f164 100644 --- a/x-pack/test/functional/apps/maps/group4/layer_errors.js +++ b/x-pack/test/functional/apps/maps/group4/layer_errors.js @@ -8,26 +8,26 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps', 'header']); + const { maps } = getPageObjects(['maps', 'header']); const inspector = getService('inspector'); const testSubjects = getService('testSubjects'); const comboBox = getService('comboBox'); describe('layer errors', () => { before(async () => { - await PageObjects.maps.loadSavedMap('layer with errors'); + await maps.loadSavedMap('layer with errors'); }); describe('Layer with invalid descriptor', () => { const INVALID_LAYER_NAME = 'fff76ebb-57a6-4067-a373-1d191b9bd1a3'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(INVALID_LAYER_NAME); + await maps.hasErrorIconExistsOrFail(INVALID_LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(INVALID_LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(INVALID_LAYER_NAME); + await maps.removeLayer(INVALID_LAYER_NAME); + const exists = await maps.doesLayerExist(INVALID_LAYER_NAME); expect(exists).to.be(false); }); }); @@ -38,7 +38,7 @@ export default function ({ getPageObjects, getService }) { }); it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail('connections'); + await maps.hasErrorIconExistsOrFail('connections'); }); it('should display "View details" button', async () => { @@ -58,12 +58,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'idThatDoesNotExitForESSearchSource'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); @@ -72,12 +72,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'idThatDoesNotExitForESGeoGridSource'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); @@ -86,12 +86,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'geo_shapes*'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); @@ -100,12 +100,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'EMS_vector_shapes'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); @@ -114,12 +114,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'EMS_tiles'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); @@ -128,12 +128,12 @@ export default function ({ getPageObjects, getService }) { const LAYER_NAME = 'Custom_TMS'; it('should diplay error icon in legend', async () => { - await PageObjects.maps.hasErrorIconExistsOrFail(LAYER_NAME); + await maps.hasErrorIconExistsOrFail(LAYER_NAME); }); it('should allow deletion of layer', async () => { - await PageObjects.maps.removeLayer(LAYER_NAME); - const exists = await PageObjects.maps.doesLayerExist(LAYER_NAME); + await maps.removeLayer(LAYER_NAME); + const exists = await maps.doesLayerExist(LAYER_NAME); expect(exists).to.be(false); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/lens/choropleth_chart.ts b/x-pack/test/functional/apps/maps/group4/lens/choropleth_chart.ts index ba7f50befe8445..a9487c8a84fc54 100644 --- a/x-pack/test/functional/apps/maps/group4/lens/choropleth_chart.ts +++ b/x-pack/test/functional/apps/maps/group4/lens/choropleth_chart.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'maps']); + const { visualize, lens, maps } = getPageObjects(['visualize', 'lens', 'maps']); const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); @@ -17,43 +17,41 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Do not skip test if failure is "Test requires access to Elastic Maps Service (EMS). EMS is not available" describe('choropleth chart', () => { before('', async () => { - await PageObjects.maps.expectEmsToBeAvailable(); + await maps.expectEmsToBeAvailable(); }); it('should allow creation of choropleth chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsChoropleth', 'Region map'); + await lens.switchToVisualization('lnsChoropleth', 'Region map'); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsChoropleth_regionKeyDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsChoropleth_valueDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.maps.openLegend(); - await PageObjects.maps.waitForLayersToLoad(); + await maps.openLegend(); + await maps.waitForLayersToLoad(); - expect(await PageObjects.maps.getNumberOfLayers()).to.eql(2); - expect(await PageObjects.maps.doesLayerExist('World Countries by Average of bytes')).to.be( - true - ); + expect(await maps.getNumberOfLayers()).to.eql(2); + expect(await maps.doesLayerExist('World Countries by Average of bytes')).to.be(true); }); it('should create choropleth chart from suggestion', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.dragFieldToWorkspace('geo.dest', 'xyVisChart'); + await lens.dragFieldToWorkspace('geo.dest', 'xyVisChart'); // add filter to force data fetch to set activeData await filterBar.addFilter({ @@ -64,13 +62,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('lnsSuggestion-worldCountriesByCountOfRecords > lnsSuggestion'); - await PageObjects.maps.openLegend(); - await PageObjects.maps.waitForLayersToLoad(); + await maps.openLegend(); + await maps.waitForLayersToLoad(); - expect(await PageObjects.maps.getNumberOfLayers()).to.eql(2); - expect(await PageObjects.maps.doesLayerExist('World Countries by Count of records')).to.be( - true - ); + expect(await maps.getNumberOfLayers()).to.eql(2); + expect(await maps.doesLayerExist('World Countries by Count of records')).to.be(true); }); }); } diff --git a/x-pack/test/functional/apps/maps/group4/mapbox_styles.js b/x-pack/test/functional/apps/maps/group4/mapbox_styles.js index 72b8c5d5029713..023e4a8f189595 100644 --- a/x-pack/test/functional/apps/maps/group4/mapbox_styles.js +++ b/x-pack/test/functional/apps/maps/group4/mapbox_styles.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); @@ -19,8 +19,8 @@ export default function ({ getPageObjects, getService }) { ['global_maps_all', 'geoshape_data_reader', 'meta_for_geoshape_data_reader'], { skipBrowserRefresh: true } ); - await PageObjects.maps.loadSavedMap('join example'); - mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('join example'); + mapboxStyle = await maps.getMapboxStyle(); }); after(async () => { diff --git a/x-pack/test/functional/apps/maps/group4/mvt_geotile_grid.js b/x-pack/test/functional/apps/maps/group4/mvt_geotile_grid.js index e19b4332789f57..c7387662d9b7d3 100644 --- a/x-pack/test/functional/apps/maps/group4/mvt_geotile_grid.js +++ b/x-pack/test/functional/apps/maps/group4/mvt_geotile_grid.js @@ -10,7 +10,7 @@ import expect from '@kbn/expect'; const MB_VECTOR_SOURCE_ID = 'g1xkv'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); @@ -28,8 +28,8 @@ export default function ({ getPageObjects, getService }) { }); it('should render with mvt-source (style meta from ES)', async () => { - await PageObjects.maps.loadSavedMap('MVT geotile grid (style meta from ES)'); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('MVT geotile grid (style meta from ES)'); + const mapboxStyle = await maps.getMapboxStyle(); const tileUrl = new URL( mapboxStyle.sources[MB_VECTOR_SOURCE_ID].tiles[0], @@ -99,8 +99,8 @@ export default function ({ getPageObjects, getService }) { }); it('should render with mvt-source (style meta from local - count)', async () => { - await PageObjects.maps.loadSavedMap('MVT geotile grid (style meta from local - count)'); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('MVT geotile grid (style meta from local - count)'); + const mapboxStyle = await maps.getMapboxStyle(); const fillLayer = mapboxStyle.layers.find( (layer) => layer.id === MB_VECTOR_SOURCE_ID + '_fill' @@ -144,8 +144,8 @@ export default function ({ getPageObjects, getService }) { }); it('should render with mvt-source (style meta from local - metric)', async () => { - await PageObjects.maps.loadSavedMap('MVT geotile grid (style meta from local - metric)'); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('MVT geotile grid (style meta from local - metric)'); + const mapboxStyle = await maps.getMapboxStyle(); const fillLayer = mapboxStyle.layers.find( (layer) => layer.id === MB_VECTOR_SOURCE_ID + '_fill' @@ -189,8 +189,8 @@ export default function ({ getPageObjects, getService }) { }); it('should render heatmap layer', async () => { - await PageObjects.maps.loadSavedMap('geo grid heatmap example'); - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('geo grid heatmap example'); + const mapboxStyle = await maps.getMapboxStyle(); const heatmapLayer = mapboxStyle.layers.find((layer) => layer.id === '3xlvm_heatmap'); diff --git a/x-pack/test/functional/apps/maps/group4/mvt_joins.ts b/x-pack/test/functional/apps/maps/group4/mvt_joins.ts index c6567c84b21655..44f0e799a25daa 100644 --- a/x-pack/test/functional/apps/maps/group4/mvt_joins.ts +++ b/x-pack/test/functional/apps/maps/group4/mvt_joins.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const security = getService('security'); const find = getService('find'); @@ -19,7 +19,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ['global_maps_all', 'geoshape_data_reader', 'meta_for_geoshape_data_reader'], { skipBrowserRefresh: true } ); - await PageObjects.maps.loadSavedMap('mvt join example'); + await maps.loadSavedMap('mvt join example'); }); after(async () => { @@ -27,7 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show dynamic data range in legend', async () => { - const layerTOCDetails = await PageObjects.maps.getLayerTOCDetails('geo_shapes*'); + const layerTOCDetails = await maps.getLayerTOCDetails('geo_shapes*'); const split = layerTOCDetails.trim().split('\n'); // field display name @@ -46,8 +46,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should show join metrics in tooltip', async () => { // zoom in on feature so tooltip click can not miss - await PageObjects.maps.setView(-1, 60, 9); - await PageObjects.maps.lockTooltipAtPosition(200, -200); + await maps.setView(-1, 60, 9); + await maps.lockTooltipAtPosition(200, -200); const tooltipRows = await find.allByCssSelector(`tr[class='mapFeatureTooltip_row']`); expect(tooltipRows.length).to.equal(2); @@ -57,15 +57,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('query bar', () => { before(async () => { - await PageObjects.maps.setAndSubmitQuery('prop1 < 10'); + await maps.setAndSubmitQuery('prop1 < 10'); }); after(async () => { - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAndSubmitQuery(''); }); it('should update dynamic data range in legend', async () => { - const layerTOCDetails = await PageObjects.maps.getLayerTOCDetails('geo_shapes*'); + const layerTOCDetails = await maps.getLayerTOCDetails('geo_shapes*'); const split = layerTOCDetails.trim().split('\n'); // field display name @@ -83,9 +83,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('fit to bounds should exclude source features without join matches', async () => { - await PageObjects.maps.clickFitToData(); + await maps.clickFitToData(); - const { lat, lon, zoom } = await PageObjects.maps.getView(); + const { lat, lon, zoom } = await maps.getView(); expect(Math.round(lat)).to.equal(0); expect(Math.round(lon)).to.equal(90); expect(Math.ceil(zoom)).to.equal(5); diff --git a/x-pack/test/functional/apps/maps/group4/mvt_scaling.js b/x-pack/test/functional/apps/maps/group4/mvt_scaling.js index e624ab39dee122..ced85cbc973198 100644 --- a/x-pack/test/functional/apps/maps/group4/mvt_scaling.js +++ b/x-pack/test/functional/apps/maps/group4/mvt_scaling.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); + const { maps } = getPageObjects(['maps']); const inspector = getService('inspector'); const security = getService('security'); const testSubjects = getService('testSubjects'); @@ -31,8 +31,8 @@ export default function ({ getPageObjects, getService }) { let mapboxStyle; before(async () => { - await PageObjects.maps.loadSavedMap('geo_shape_mvt'); - mapboxStyle = await PageObjects.maps.getMapboxStyle(); + await maps.loadSavedMap('geo_shape_mvt'); + mapboxStyle = await maps.getMapboxStyle(); }); it('should request tiles from /internal/maps/mvt/getTile', async () => { @@ -135,43 +135,37 @@ export default function ({ getPageObjects, getService }) { describe('filtering', () => { before(async () => { - await PageObjects.maps.loadSavedMap('MVT documents'); + await maps.loadSavedMap('MVT documents'); }); async function getTileUrl() { - const mapboxStyle = await PageObjects.maps.getMapboxStyle(); + const mapboxStyle = await maps.getMapboxStyle(); return mapboxStyle.sources['a7ab2e06-145b-48c5-bd86-b633849017ad'].tiles[0]; } describe('applyGlobalQuery: true, applyGlobalTime: true, applyForceRefresh: true', () => { after(async () => { - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 01:00:00.000' - ); - await PageObjects.maps.setAndSubmitQuery(''); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 01:00:00.000'); + await maps.setAndSubmitQuery(''); }); it('should update MVT URL when query changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should update MVT URL when time changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 03:00:00.000' - ); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 03:00:00.000'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should update MVT URL when refresh clicked', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); @@ -179,40 +173,34 @@ export default function ({ getPageObjects, getService }) { describe('applyGlobalQuery: false, applyGlobalTime: true, applyForceRefresh: true', () => { before(async () => { - await PageObjects.maps.openLayerPanel('logstash-*'); + await maps.openLayerPanel('logstash-*'); await testSubjects.click('mapLayerPanelApplyGlobalQueryCheckbox'); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); }); after(async () => { - await PageObjects.maps.closeLayerPanel(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 01:00:00.000' - ); - await PageObjects.maps.setAndSubmitQuery(''); + await maps.closeLayerPanel(); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 01:00:00.000'); + await maps.setAndSubmitQuery(''); }); it('should not update MVT URL when query changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.eql(nextTileUrl); }); it('should update MVT URL when time changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 03:00:00.000' - ); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 03:00:00.000'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should update MVT URL when refresh clicked', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); @@ -220,40 +208,34 @@ export default function ({ getPageObjects, getService }) { describe('applyGlobalQuery: true, applyGlobalTime: false, applyForceRefresh: true', () => { before(async () => { - await PageObjects.maps.openLayerPanel('logstash-*'); + await maps.openLayerPanel('logstash-*'); await testSubjects.click('mapLayerPanelApplyGlobalTimeCheckbox'); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); }); after(async () => { - await PageObjects.maps.closeLayerPanel(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 01:00:00.000' - ); - await PageObjects.maps.setAndSubmitQuery(''); + await maps.closeLayerPanel(); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 01:00:00.000'); + await maps.setAndSubmitQuery(''); }); it('should update MVT URL when query changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should not update MVT URL when time changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 03:00:00.000' - ); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 03:00:00.000'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.eql(nextTileUrl); }); it('should update MVT URL when refresh clicked', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); @@ -261,40 +243,34 @@ export default function ({ getPageObjects, getService }) { describe('applyGlobalQuery: true, applyGlobalTime: true, applyForceRefresh: false', () => { before(async () => { - await PageObjects.maps.openLayerPanel('logstash-*'); + await maps.openLayerPanel('logstash-*'); await testSubjects.click('mapLayerPanelRespondToForceRefreshCheckbox'); - await PageObjects.maps.waitForLayersToLoad(); + await maps.waitForLayersToLoad(); }); after(async () => { - await PageObjects.maps.closeLayerPanel(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 01:00:00.000' - ); - await PageObjects.maps.setAndSubmitQuery(''); + await maps.closeLayerPanel(); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 01:00:00.000'); + await maps.setAndSubmitQuery(''); }); it('should update MVT URL when query changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAndSubmitQuery('machine.os.raw : "win 8"'); + await maps.setAndSubmitQuery('machine.os.raw : "win 8"'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should update MVT URL when time changes', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.setAbsoluteRange( - 'Sep 20, 2015 @ 00:00:00.000', - 'Sep 20, 2015 @ 03:00:00.000' - ); + await maps.setAbsoluteRange('Sep 20, 2015 @ 00:00:00.000', 'Sep 20, 2015 @ 03:00:00.000'); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.not.eql(nextTileUrl); }); it('should not update MVT URL when refresh clicked', async () => { const prevTileUrl = await getTileUrl(); - await PageObjects.maps.refreshQuery(); + await maps.refreshQuery(); const nextTileUrl = await getTileUrl(); expect(prevTileUrl).to.eql(nextTileUrl); }); diff --git a/x-pack/test/functional/apps/maps/group4/tile_map.ts b/x-pack/test/functional/apps/maps/group4/tile_map.ts index 27cd25eb9893d2..dd4062925a601b 100644 --- a/x-pack/test/functional/apps/maps/group4/tile_map.ts +++ b/x-pack/test/functional/apps/maps/group4/tile_map.ts @@ -9,27 +9,29 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'lens', 'maps', 'timePicker']); + const { common, visualize, maps, timePicker } = getPageObjects([ + 'common', + 'visualize', + 'maps', + 'timePicker', + ]); describe('tile_map visualization', () => { before(async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.loadSavedVisualization('Visualization TileMap', { + await common.navigateToApp('visualize'); + await visualize.loadSavedVisualization('Visualization TileMap', { navigateToVisualize: false, }); - await PageObjects.timePicker.setAbsoluteRange( - PageObjects.timePicker.defaultStartTime, - PageObjects.timePicker.defaultEndTime - ); - await PageObjects.maps.waitForLayersToLoad(); + await timePicker.setAbsoluteRange(timePicker.defaultStartTime, timePicker.defaultEndTime); + await maps.waitForLayersToLoad(); }); it('should render tile_map with map embeddable', async () => { - await PageObjects.maps.openLegend(); - await PageObjects.maps.waitForLayersToLoad(); + await maps.openLegend(); + await maps.waitForLayersToLoad(); - expect(await PageObjects.maps.getNumberOfLayers()).to.eql(2); - expect(await PageObjects.maps.doesLayerExist('Visualization TileMap')).to.be(true); + expect(await maps.getNumberOfLayers()).to.eql(2); + expect(await maps.doesLayerExist('Visualization TileMap')).to.be(true); }); }); } diff --git a/x-pack/test/functional/apps/maps/group4/visualize_create_menu.js b/x-pack/test/functional/apps/maps/group4/visualize_create_menu.js index d9b37b4aca240c..37eedfb1e8ad2d 100644 --- a/x-pack/test/functional/apps/maps/group4/visualize_create_menu.js +++ b/x-pack/test/functional/apps/maps/group4/visualize_create_menu.js @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; export default function ({ getService, getPageObjects }) { - const PageObjects = getPageObjects(['visualize', 'header', 'maps']); + const { visualize, header, maps } = getPageObjects(['visualize', 'header', 'maps']); const listingTable = getService('listingTable'); const security = getService('security'); @@ -23,18 +23,18 @@ export default function ({ getService, getPageObjects }) { } ); - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); }); it('should show maps application in create menu', async () => { - const hasMapsApp = await PageObjects.visualize.hasMapsApp(); + const hasMapsApp = await visualize.hasMapsApp(); expect(hasMapsApp).to.equal(true); }); it('should take users to Maps application when Maps is clicked', async () => { - await PageObjects.visualize.clickMapsApp(); - await PageObjects.header.waitUntilLoadingHasFinished(); - const onMapPage = await PageObjects.maps.onMapPage(); + await visualize.clickMapsApp(); + await header.waitUntilLoadingHasFinished(); + const onMapPage = await maps.onMapPage(); expect(onMapPage).to.equal(true); }); }); @@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }) { } ); - await PageObjects.visualize.navigateToNewVisualization(); + await visualize.navigateToNewVisualization(); }); after(async () => { @@ -56,7 +56,7 @@ export default function ({ getService, getPageObjects }) { }); it('should not show maps application in create menu', async () => { - const hasMapsApp = await PageObjects.visualize.hasMapsApp(); + const hasMapsApp = await visualize.hasMapsApp(); expect(hasMapsApp).to.equal(false); }); }); @@ -68,7 +68,7 @@ export default function ({ getService, getPageObjects }) { skipBrowserRefresh: true, }); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); }); after(async () => { @@ -76,12 +76,12 @@ export default function ({ getService, getPageObjects }) { }); it('should not show legacy region map visualizion in create menu', async () => { - const hasLegecyViz = await PageObjects.visualize.hasVisType('region_map'); + const hasLegecyViz = await visualize.hasVisType('region_map'); expect(hasLegecyViz).to.equal(false); }); it('should not show legacy tilemap map visualizion in create menu', async () => { - const hasLegecyViz = await PageObjects.visualize.hasVisType('tile_map'); + const hasLegecyViz = await visualize.hasVisType('tile_map'); expect(hasLegecyViz).to.equal(false); }); }); @@ -94,7 +94,7 @@ export default function ({ getService, getPageObjects }) { } ); - await PageObjects.visualize.navigateToNewAggBasedVisualization(); + await visualize.navigateToNewAggBasedVisualization(); }); after(async () => { @@ -102,11 +102,11 @@ export default function ({ getService, getPageObjects }) { }); it('should allow to change meta-data on a map visualization', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickMapsApp(); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.saveMap('myTestMap'); - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.navigateToNewVisualization(); + await visualize.clickMapsApp(); + await maps.waitForLayersToLoad(); + await maps.saveMap('myTestMap'); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('myTestMap'); await listingTable.inspectVisualization(); await listingTable.editVisualizationDetails({ diff --git a/x-pack/test/functional/apps/saved_query_management/feature_controls/security.ts b/x-pack/test/functional/apps/saved_query_management/feature_controls/security.ts index 911b8675adf146..6c57295a0c353d 100644 --- a/x-pack/test/functional/apps/saved_query_management/feature_controls/security.ts +++ b/x-pack/test/functional/apps/saved_query_management/feature_controls/security.ts @@ -16,9 +16,9 @@ export default function (ctx: FtrProviderContext) { const { getPageObjects, getService } = ctx; const savedQuerySecurityUtils = getSavedQuerySecurityUtils(ctx); const esArchiver = getService('esArchiver'); - const security = getService('security'); + const securityService = getService('security'); const globalNav = getService('globalNav'); - const PageObjects = getPageObjects([ + const { common, discover, security, dashboard, maps, visualize } = getPageObjects([ 'common', 'discover', 'security', @@ -36,7 +36,7 @@ export default function (ctx: FtrProviderContext) { const name = `global_saved_query_${appName}`; const password = `password_${name}_${appPrivilege}_${globalPrivilege}`; - await security.role.create(name, { + await securityService.role.create(name, { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -51,40 +51,40 @@ export default function (ctx: FtrProviderContext) { ], }); - await security.user.create(`${name}-user`, { + await securityService.user.create(`${name}-user`, { password, roles: [name], full_name: 'test user', }); - await PageObjects.security.login(`${name}-user`, password, { + await security.login(`${name}-user`, password, { expectSpaceSelector: false, }); } async function logout(appName: AppName) { const name = `global_saved_query_${appName}`; - await PageObjects.security.forceLogout(); - await security.role.delete(name); - await security.user.delete(`${name}-user`); + await security.forceLogout(); + await securityService.role.delete(name); + await securityService.user.delete(`${name}-user`); } async function navigateToApp(appName: AppName) { switch (appName) { case 'discover': - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await common.navigateToApp('discover'); + await discover.selectIndexPattern('logstash-*'); break; case 'dashboard': - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.gotoDashboardEditMode('A Dashboard'); + await dashboard.navigateToApp(); + await dashboard.gotoDashboardEditMode('A Dashboard'); break; case 'maps': - await PageObjects.maps.openNewMap(); + await maps.openNewMap(); break; case 'visualize': - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); break; default: break; @@ -103,13 +103,13 @@ export default function (ctx: FtrProviderContext) { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); // ensure we're logged out, so we can log in as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await kibanaServer.importExport.unload( 'x-pack/test/functional/fixtures/kbn_archiver/dashboard/feature_controls/security/security.json' @@ -122,7 +122,7 @@ export default function (ctx: FtrProviderContext) { before(async () => { await login(appName, 'read', 'all'); await navigateToApp(appName); - await PageObjects.common.waitForTopNavToBeVisible(); + await common.waitForTopNavToBeVisible(); }); after(async () => { diff --git a/x-pack/test/functional/apps/visualize/feature_controls/visualize_security.ts b/x-pack/test/functional/apps/visualize/feature_controls/visualize_security.ts index 97ae448d66b1d2..e3f7de552dbc42 100644 --- a/x-pack/test/functional/apps/visualize/feature_controls/visualize_security.ts +++ b/x-pack/test/functional/apps/visualize/feature_controls/visualize_security.ts @@ -11,17 +11,14 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const security = getService('security'); + const securityService = getService('security'); const config = getService('config'); - const PageObjects = getPageObjects([ + const { common, error, visualize, header, security } = getPageObjects([ 'common', 'error', 'visualize', 'header', 'security', - 'share', - 'spaceSelector', - 'timePicker', ]); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); @@ -39,19 +36,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); // ensure we're logged out so we can login as the appropriate users - await PageObjects.security.forceLogout(); + await security.forceLogout(); }); after(async () => { // logout, so the other tests don't accidentally run as the custom users we're testing below // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); + await security.forceLogout(); await kibanaServer.savedObjects.cleanStandardList(); }); describe('global visualize all privileges', () => { before(async () => { - await security.role.create('global_visualize_all_role', { + await securityService.role.create('global_visualize_all_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -65,28 +62,24 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_visualize_all_user', { + await securityService.user.create('global_visualize_all_user', { password: 'global_visualize_all_user-password', roles: ['global_visualize_all_role'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login( - 'global_visualize_all_user', - 'global_visualize_all_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_visualize_all_user', 'global_visualize_all_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('global_visualize_all_role'); - await security.user.delete('global_visualize_all_user'); + await security.forceLogout(); + await securityService.role.delete('global_visualize_all_role'); + await securityService.user.delete('global_visualize_all_user'); }); it('shows visualize navlink', async () => { @@ -95,7 +88,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new Visualization" button`, async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await testSubjects.existOrFail('visualizationLandingPage', { timeout: config.get('timeouts.waitFor'), }); @@ -107,7 +100,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can view existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -117,7 +110,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('can save existing Visualization', async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -131,7 +124,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.clickQuerySubmitButton(); await testSubjects.click('showQueryBarMenu'); await savedQueryManagementComponent.saveNewQuery('foo', 'bar', true, false); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await savedQueryManagementComponent.savedQueryExistOrFail('foo'); await savedQueryManagementComponent.closeSavedQueryManagementComponent(); await testSubjects.click('showQueryBarMenu'); @@ -170,7 +163,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { true, false ); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await savedQueryManagementComponent.savedQueryExistOrFail('ok2'); await savedQueryManagementComponent.closeSavedQueryManagementComponent(); await testSubjects.click('showQueryBarMenu'); @@ -180,7 +173,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global visualize read-only privileges', () => { before(async () => { - await security.role.create('global_visualize_read_role', { + await securityService.role.create('global_visualize_read_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -194,26 +187,22 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_visualize_read_user', { + await securityService.user.create('global_visualize_read_user', { password: 'global_visualize_read_user-password', roles: ['global_visualize_read_role'], full_name: 'test user', }); - await PageObjects.security.login( - 'global_visualize_read_user', - 'global_visualize_read_user-password', - { - expectSpaceSelector: false, - } - ); + await security.login('global_visualize_read_user', 'global_visualize_read_user-password', { + expectSpaceSelector: false, + }); }); after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('global_visualize_read_role'); - await security.user.delete('global_visualize_read_user'); + await security.forceLogout(); + await securityService.role.delete('global_visualize_read_role'); + await securityService.user.delete('global_visualize_read_user'); }); it('shows visualize navlink', async () => { @@ -222,7 +211,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new Visualization" button`, async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await testSubjects.existOrFail('visualizationLandingPage', { timeout: config.get('timeouts.waitFor'), }); @@ -234,7 +223,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can view existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -244,7 +233,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can't save existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -284,7 +273,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('global visualize read-only with url_create privileges', () => { before(async () => { - await security.role.create('global_visualize_read_url_create_role', { + await securityService.role.create('global_visualize_read_url_create_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -298,13 +287,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('global_visualize_read_url_create_user', { + await securityService.user.create('global_visualize_read_url_create_user', { password: 'global_visualize_read_url_create_user-password', roles: ['global_visualize_read_url_create_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'global_visualize_read_url_create_user', 'global_visualize_read_url_create_user-password', { @@ -315,9 +304,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('global_visualize_read_url_create_role'); - await security.user.delete('global_visualize_read_url_create_user'); + await security.forceLogout(); + await securityService.role.delete('global_visualize_read_url_create_role'); + await securityService.user.delete('global_visualize_read_url_create_user'); }); it('shows visualize navlink', async () => { @@ -326,7 +315,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`landing page shows "Create new Visualization" button`, async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await testSubjects.existOrFail('visualizationLandingPage', { timeout: 10000 }); await testSubjects.existOrFail('newItemButton'); }); @@ -336,7 +325,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can view existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -344,7 +333,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can't save existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); @@ -380,7 +369,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('no visualize privileges', () => { before(async () => { - await security.role.create('no_visualize_privileges_role', { + await securityService.role.create('no_visualize_privileges_role', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['read', 'view_index_metadata'] }], }, @@ -394,13 +383,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ], }); - await security.user.create('no_visualize_privileges_user', { + await securityService.user.create('no_visualize_privileges_user', { password: 'no_visualize_privileges_user-password', roles: ['no_visualize_privileges_role'], full_name: 'test user', }); - await PageObjects.security.login( + await security.login( 'no_visualize_privileges_user', 'no_visualize_privileges_user-password', { expectSpaceSelector: false } @@ -409,25 +398,25 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { after(async () => { // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('no_visualize_privileges_role'); - await security.user.delete('no_visualize_privileges_user'); + await security.forceLogout(); + await securityService.role.delete('no_visualize_privileges_role'); + await securityService.user.delete('no_visualize_privileges_user'); }); it(`landing page shows 403`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '', { + await common.navigateToActualUrl('visualize', '', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); it(`edit page shows 403`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', '/edit/i-exist', { + await common.navigateToActualUrl('visualize', '/edit/i-exist', { ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectForbidden(); + await error.expectForbidden(); }); }); }); diff --git a/x-pack/test/functional/apps/visualize/feature_controls/visualize_spaces.ts b/x-pack/test/functional/apps/visualize/feature_controls/visualize_spaces.ts index 1c57b71e0689b1..8c806d6350ec8b 100644 --- a/x-pack/test/functional/apps/visualize/feature_controls/visualize_spaces.ts +++ b/x-pack/test/functional/apps/visualize/feature_controls/visualize_spaces.ts @@ -14,7 +14,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const config = getService('config'); const spacesService = getService('spaces'); - const PageObjects = getPageObjects(['common', 'visualize', 'security', 'spaceSelector', 'error']); + const { common, error } = getPageObjects(['common', 'error']); const testSubjects = getService('testSubjects'); const appsMenu = getService('appsMenu'); @@ -49,7 +49,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('shows visualize navlink', async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -57,7 +57,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`can view existing Visualization`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'visualize', `${VisualizeConstants.EDIT_PATH}/custom_i-exist`, { @@ -93,7 +93,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`doesn't show visualize navlink`, async () => { - await PageObjects.common.navigateToApp('home', { + await common.navigateToApp('home', { basePath: '/s/custom_space', }); const navLinks = (await appsMenu.readLinks()).map((link) => link.text); @@ -101,16 +101,16 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`create new visualization shows 404`, async () => { - await PageObjects.common.navigateToActualUrl('visualize', VisualizeConstants.CREATE_PATH, { + await common.navigateToActualUrl('visualize', VisualizeConstants.CREATE_PATH, { basePath: '/s/custom_space', ensureCurrentUrl: false, shouldLoginIfPrompted: false, }); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); it(`edit visualization for object which doesn't exist shows 404`, async () => { - await PageObjects.common.navigateToActualUrl( + await common.navigateToActualUrl( 'visualize', `${VisualizeConstants.EDIT_PATH}/i-dont-exist`, { @@ -119,20 +119,16 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { shouldLoginIfPrompted: false, } ); - await PageObjects.error.expectNotFound(); + await error.expectNotFound(); }); it(`edit visualization for object which exists shows 404`, async () => { - await PageObjects.common.navigateToActualUrl( - 'visualize', - `${VisualizeConstants.EDIT_PATH}/i-exist`, - { - basePath: '/s/custom_space', - ensureCurrentUrl: false, - shouldLoginIfPrompted: false, - } - ); - await PageObjects.error.expectNotFound(); + await common.navigateToActualUrl('visualize', `${VisualizeConstants.EDIT_PATH}/i-exist`, { + basePath: '/s/custom_space', + ensureCurrentUrl: false, + shouldLoginIfPrompted: false, + }); + await error.expectNotFound(); }); }); }); diff --git a/x-pack/test/functional/apps/visualize/hybrid_visualization.ts b/x-pack/test/functional/apps/visualize/hybrid_visualization.ts index 223d4cd571dc10..3d5878689d48cc 100644 --- a/x-pack/test/functional/apps/visualize/hybrid_visualization.ts +++ b/x-pack/test/functional/apps/visualize/hybrid_visualization.ts @@ -9,7 +9,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common', 'visualize', 'timePicker', 'visChart']); + const { common, visualize, visChart } = getPageObjects(['common', 'visualize', 'visChart']); const inspector = getService('inspector'); const kibanaServer = getService('kibanaServer'); @@ -30,7 +30,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await esArchiver.unload('x-pack/test/functional/es_archives/hybrid/logstash'); await esArchiver.unload('x-pack/test/functional/es_archives/hybrid/rollup'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); it('should render histogram line chart', async () => { @@ -88,10 +88,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const from = 'Aug 19, 2019 @ 01:55:07.240'; const to = 'Aug 22, 2019 @ 23:09:36.205'; - await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.openSavedVisualization('hybrid_histogram_line_chart'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await common.setTime({ from, to }); + await common.navigateToApp('visualize'); + await visualize.openSavedVisualization('hybrid_histogram_line_chart'); + await visChart.waitForVisualizationRenderingStabilized(); await inspector.open(); await inspector.setTablePageSize(50); await inspector.expectTableData(expectedData); diff --git a/x-pack/test/functional/apps/visualize/precalculated_histogram.ts b/x-pack/test/functional/apps/visualize/precalculated_histogram.ts index e757df5eb54c7e..cb38a0f7dd66ad 100644 --- a/x-pack/test/functional/apps/visualize/precalculated_histogram.ts +++ b/x-pack/test/functional/apps/visualize/precalculated_histogram.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects([ + const { common, visualize, discover, visChart, visEditor, unifiedFieldList } = getPageObjects([ 'common', 'visualize', 'discover', @@ -33,28 +33,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('appears correctly in discover', async function () { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.unifiedFieldList.clickFieldListItemAdd('histogram-content'); - const rowData = await PageObjects.discover.getDocTableIndex(1); + await common.navigateToApp('discover'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemAdd('histogram-content'); + const rowData = await discover.getDocTableIndex(1); expect(rowData).to.contain('"values":[0.3,1,3,4.2,4.8]'); }); describe('works in visualizations', () => { before(async () => { - await PageObjects.visualize.navigateToNewAggBasedVisualization(); - await PageObjects.visualize.clickDataTable(); - await PageObjects.visualize.clickNewSearch('histogram-test'); - await PageObjects.visChart.waitForVisualization(); - await PageObjects.visEditor.clickMetricEditor(); + await visualize.navigateToNewAggBasedVisualization(); + await visualize.clickDataTable(); + await visualize.clickNewSearch('histogram-test'); + await visChart.waitForVisualization(); + await visEditor.clickMetricEditor(); }); const renderTableForAggregation = async (aggregation: string) => { - await PageObjects.visEditor.selectAggregation(aggregation, 'metrics'); - await PageObjects.visEditor.selectField('histogram-content', 'metrics'); - await PageObjects.visEditor.clickGo(); + await visEditor.selectAggregation(aggregation, 'metrics'); + await visEditor.selectField('histogram-content', 'metrics'); + await visEditor.clickGo(); - return PageObjects.visChart.getTableVisContent(); + return visChart.getTableVisContent(); }; it('with percentiles aggregation', async () => { diff --git a/x-pack/test/functional/apps/visualize/preserve_url.ts b/x-pack/test/functional/apps/visualize/preserve_url.ts index a19459ebfd8b74..aa4e9ee1dfe164 100644 --- a/x-pack/test/functional/apps/visualize/preserve_url.ts +++ b/x-pack/test/functional/apps/visualize/preserve_url.ts @@ -9,7 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'visualize', 'spaceSelector', 'visChart']); + const { common, visualize, spaceSelector, visChart } = getPageObjects([ + 'common', + 'visualize', + 'spaceSelector', + 'visChart', + ]); const appsMenu = getService('appsMenu'); const globalNav = getService('globalNav'); const kibanaServer = getService('kibanaServer'); @@ -35,45 +40,45 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('goes back to last opened url', async () => { - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.openSavedVisualization('A Pie'); - await PageObjects.common.navigateToApp('home'); + await common.navigateToApp('visualize'); + await visualize.openSavedVisualization('A Pie'); + await common.navigateToApp('home'); await appsMenu.clickLink('Visualize Library'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); const activeTitle = await globalNav.getLastBreadcrumb(); expect(activeTitle).to.be('A Pie'); }); it('remembers url after switching spaces', async function () { // default space - await PageObjects.common.navigateToApp('visualize'); - await PageObjects.visualize.openSavedVisualization('A Pie'); + await common.navigateToApp('visualize'); + await visualize.openSavedVisualization('A Pie'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space await appsMenu.clickLink('Visualize Library'); - await PageObjects.visualize.openSavedVisualization('A Pie in another space'); + await visualize.openSavedVisualization('A Pie in another space'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('default'); - await PageObjects.spaceSelector.expectHomePage('default'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('default'); + await spaceSelector.expectHomePage('default'); // default space await appsMenu.clickLink('Visualize Library'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); const activeTitleDefaultSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleDefaultSpace).to.be('A Pie'); - await PageObjects.spaceSelector.openSpacesNav(); - await PageObjects.spaceSelector.clickSpaceAvatar('another-space'); - await PageObjects.spaceSelector.expectHomePage('another-space'); + await spaceSelector.openSpacesNav(); + await spaceSelector.clickSpaceAvatar('another-space'); + await spaceSelector.expectHomePage('another-space'); // other space await appsMenu.clickLink('Visualize Library'); - await PageObjects.visChart.waitForVisualization(); + await visChart.waitForVisualization(); const activeTitleOtherSpace = await globalNav.getLastBreadcrumb(); expect(activeTitleOtherSpace).to.be('A Pie in another space'); }); diff --git a/x-pack/test/functional/apps/visualize/reporting.ts b/x-pack/test/functional/apps/visualize/reporting.ts index d6cdb5fedd7282..0e08bea2990d73 100644 --- a/x-pack/test/functional/apps/visualize/reporting.ts +++ b/x-pack/test/functional/apps/visualize/reporting.ts @@ -21,11 +21,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const png = getService('png'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { reporting, common, visualize, visEditor, share } = getPageObjects([ 'reporting', 'common', - 'dashboard', - 'timePicker', 'visualize', 'visEditor', 'share', @@ -70,26 +68,26 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); afterEach(async () => { - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); it('is available if new', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.clickNewVisualization(); - await PageObjects.visualize.clickAggBasedVisualizations(); - await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch('ecommerce'); - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + await visualize.gotoVisualizationLandingPage(); + await visualize.clickNewVisualization(); + await visualize.clickAggBasedVisualizations(); + await visualize.clickAreaChart(); + await visualize.clickNewSearch('ecommerce'); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); }); it('becomes available when saved', async () => { - await PageObjects.visEditor.clickBucket('X-axis'); - await PageObjects.visEditor.selectAggregation('Date Histogram'); - await PageObjects.visEditor.clickGo(); - await PageObjects.visualize.saveVisualization('my viz'); - await PageObjects.reporting.openExportTab(); - expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + await visEditor.clickBucket('X-axis'); + await visEditor.selectAggregation('Date Histogram'); + await visEditor.clickGo(); + await visualize.saveVisualization('my viz'); + await reporting.openExportTab(); + expect(await reporting.isGenerateReportButtonDisabled()).to.be(null); }); }); @@ -109,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); log.debug('navigate to visualize'); - await PageObjects.common.navigateToApp('visualize'); + await common.navigateToApp('visualize'); }); after(async () => { @@ -120,28 +118,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); afterEach(async () => { - await PageObjects.share.closeShareModal(); + await share.closeShareModal(); }); // FAILING ARTIFACTS SNAPSHOT: https://github.com/elastic/kibana/issues/189590 it.skip('TSVB Gauge: PNG file matches the baseline image', async function () { log.debug('load saved visualization'); - await PageObjects.visualize.loadSavedVisualization( - '[K7.6-eCommerce] Sold Products per Day', - { navigateToVisualize: false } - ); + await visualize.loadSavedVisualization('[K7.6-eCommerce] Sold Products per Day', { + navigateToVisualize: false, + }); log.debug('open png reporting panel'); - await PageObjects.reporting.openExportTab(); + await reporting.openExportTab(); await testSubjects.click('pngV2-radioOption'); log.debug('click generate report button'); - await PageObjects.reporting.clickGenerateReportButton(); + await reporting.clickGenerateReportButton(); log.debug('get the report download URL'); - const url = await PageObjects.reporting.getReportURL(120000); + const url = await reporting.getReportURL(120000); log.debug('download the report'); - const reportData = await PageObjects.reporting.getRawReportData(url ?? ''); - const sessionReportPath = await PageObjects.reporting.writeSessionReport( + const reportData = await reporting.getRawReportData(url ?? ''); + const sessionReportPath = await reporting.writeSessionReport( reportFileName, 'png', reportData, @@ -151,7 +148,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // check the file const percentDiff = await png.checkIfPngsMatch( sessionReportPath, - PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER), + reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER), config.get('screenshots.directory') ); diff --git a/x-pack/test/functional/apps/visualize/telemetry.ts b/x-pack/test/functional/apps/visualize/telemetry.ts index 7fd176fdbb8a20..19c4ad83ce9061 100644 --- a/x-pack/test/functional/apps/visualize/telemetry.ts +++ b/x-pack/test/functional/apps/visualize/telemetry.ts @@ -14,7 +14,7 @@ interface UiCounterEvent { } export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'dashboard', 'timePicker']); + const { dashboard, timePicker } = getPageObjects(['dashboard', 'timePicker']); const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); @@ -38,10 +38,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await retry.try(async () => { - await PageObjects.dashboard.navigateToApp(); - await PageObjects.dashboard.loadSavedDashboard('visualizations'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.navigateToApp(); + await dashboard.loadSavedDashboard('visualizations'); + await timePicker.setDefaultAbsoluteRange(); + await dashboard.waitForRenderComplete(); uiCounterEvents = await usageCollection.getUICounterEvents(); @@ -86,11 +86,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let afterRefreshRenderCountMap: Record = {}; before(async function () { - const sharedItemsCount = Number(await PageObjects.dashboard.getSharedItemsCount()); + const sharedItemsCount = Number(await dashboard.getSharedItemsCount()); initialRenderCountMap = await renderable.getRenderCount(sharedItemsCount); await queryBar.clickQuerySubmitButton(); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); afterRefreshRenderCountMap = await renderable.getRenderCount(sharedItemsCount); }); diff --git a/x-pack/test/functional/page_objects/canvas_page.ts b/x-pack/test/functional/page_objects/canvas_page.ts index a31148711e2ac2..645808b603726d 100644 --- a/x-pack/test/functional/page_objects/canvas_page.ts +++ b/x-pack/test/functional/page_objects/canvas_page.ts @@ -14,7 +14,7 @@ export function CanvasPageProvider({ getService, getPageObjects }: FtrProviderCo const testSubjects = getService('testSubjects'); const find = getService('find'); const browser = getService('browser'); - const PageObjects = getPageObjects(['common']); + const { common } = getPageObjects(['common']); return { async goToListingPage() { @@ -22,7 +22,7 @@ export function CanvasPageProvider({ getService, getPageObjects }: FtrProviderCo // disabling the current url check because canvas moved away from // hash router and redirects from /app/canvas#/ to /app/canvas/ // but navigateToUrl includes hash in the url which causes test flakiness - await PageObjects.common.navigateToUrl('canvas', '', { + await common.navigateToUrl('canvas', '', { ensureCurrentUrl: false, shouldUseHashForSubUrl: false, }); @@ -119,7 +119,7 @@ export function CanvasPageProvider({ getService, getPageObjects }: FtrProviderCo await testSubjects.click('add-element-button'); await testSubjects.click('saved-elements-menu-option'); - await PageObjects.common.sleep(1000); // give time for modal animation to complete + await common.sleep(1000); // give time for modal animation to complete }, async closeSavedElementsModal() { diff --git a/x-pack/test/functional/page_objects/gis_page.ts b/x-pack/test/functional/page_objects/gis_page.ts index 5d0fd7cd149475..3e067db7c3b093 100644 --- a/x-pack/test/functional/page_objects/gis_page.ts +++ b/x-pack/test/functional/page_objects/gis_page.ts @@ -630,7 +630,7 @@ export class GisPageObject extends FtrService { return mapboxStyle; } - async getResponse(requestName: string) { + async getResponse(requestName?: string) { await this.inspector.open(); const response = await this._getResponse(requestName); await this.inspector.close(); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 5c54fc99128f6b..bf38c4e1bdebe4 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -35,17 +35,16 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont const dashboardAddPanel = getService('dashboardAddPanel'); const queryBar = getService('queryBar'); - const PageObjects = getPageObjects([ - 'common', - 'header', - 'timePicker', - 'common', - 'visualize', - 'dashboard', - 'timeToVisualize', - 'unifiedSearch', - 'share', - ]); + const { common, header, timePicker, dashboard, timeToVisualize, unifiedSearch, share } = + getPageObjects([ + 'common', + 'header', + 'timePicker', + 'dashboard', + 'timeToVisualize', + 'unifiedSearch', + 'share', + ]); return logWrapper('lensPage', log, { /** @@ -69,13 +68,13 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont * a range that has data in our dataset. */ async goToTimeRange(fromTime?: string, toTime?: string) { - const from = fromTime || PageObjects.timePicker.defaultStartTime; - const to = toTime || PageObjects.timePicker.defaultEndTime; + const from = fromTime || timePicker.defaultStartTime; + const to = toTime || timePicker.defaultEndTime; await retry.try(async () => { - await PageObjects.timePicker.ensureHiddenNoDataPopover(); - await PageObjects.timePicker.setAbsoluteRange(from, to); + await timePicker.ensureHiddenNoDataPopover(); + await timePicker.setAbsoluteRange(from, to); // give some time for the update button tooltip to close - await PageObjects.common.sleep(500); + await common.sleep(500); }); }, @@ -208,7 +207,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont if (opts.formula) { // Formula takes time to open - await PageObjects.common.sleep(500); + await common.sleep(500); await this.typeFormula(opts.formula); } @@ -282,7 +281,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont testSubjects.getCssSelector('lnsGeoFieldWorkspace') ); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, /** @@ -414,7 +413,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await browser.pressKeys(browser.keys.ENTER); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, /** @@ -447,7 +446,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await browser.pressKeys(browser.keys.ENTER); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, /** * Selects draggable element and reorders it by number of `steps` @@ -470,7 +469,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await browser.pressKeys(browser.keys.ENTER); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, async waitForLensDragDropToFinish() { @@ -496,7 +495,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont testSubjects.getCssSelector(dimension) ); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, /** @@ -513,7 +512,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont testSubjects.getCssSelector(to) ); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, /** @@ -528,7 +527,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await find.existsByCssSelector(dragging); await browser.html5DragAndDrop(dragging, dropping); await this.waitForLensDragDropToFinish(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, async assertPalette(paletteId: string, isLegacy: boolean) { @@ -693,12 +692,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont // To close the Filter popover we need to move to the label input and then press Enter: // solution is to press Tab 3 tims (first Tab will close the dropdown) instead of Enter to avoid // race condition with the dropdown - await PageObjects.common.pressTabKey(); - await PageObjects.common.pressTabKey(); - await PageObjects.common.pressTabKey(); + await common.pressTabKey(); + await common.pressTabKey(); + await common.pressTabKey(); // Now it is safe to press Enter as we're in the label input - await PageObjects.common.pressEnterKey(); - await PageObjects.common.sleep(1000); // give time for debounced components to rerender + await common.pressEnterKey(); + await common.sleep(1000); // give time for debounced components to rerender }, /** @@ -726,7 +725,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async setTermsNumberOfValues(value: number) { const valuesInput = await this.getNumericFieldReady('indexPattern-terms-values'); await valuesInput.type(`${value}`); - await PageObjects.common.sleep(500); + await common.sleep(500); }, async checkTermsAreNotAvailableToAgg(fields: string[]) { @@ -757,7 +756,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont dashboardId?: string, description?: string ) { - await PageObjects.timeToVisualize.setSaveModalValues(title, { + await timeToVisualize.setSaveModalValues(title, { saveAsNew, redirectToOrigin, addToDashboard: addToDashboard ? addToDashboard : null, @@ -787,7 +786,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont dashboardId?: string, description?: string ) { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.click('lnsApp_saveButton'); await this.saveModal( @@ -823,7 +822,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont if (options?.decimals != null) { await testSubjects.setValue('indexPattern-dimension-formatDecimals', `${options.decimals}`); // press tab key to remove the range popover of the EUI field - await PageObjects.common.pressTabKey(); + await common.pressTabKey(); } if (options?.prefix != null) { await testSubjects.setValue('indexPattern-dimension-formatSuffix', options.prefix); @@ -832,7 +831,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async editDimensionColor(color: string) { const colorPickerInput = await testSubjects.find('~indexPattern-dimension-colorPicker'); await colorPickerInput.type(color); - await PageObjects.common.sleep(1000); // give time for debounced components to rerender + await common.sleep(1000); // give time for debounced components to rerender }, hasVisualOptionsButton() { return testSubjects.exists('lnsVisualOptionsButton'); @@ -903,12 +902,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await this.openChartSwitchPopover(layerIndex); await this.waitForSearchInputValue(subVisualizationId, searchTerm); await testSubjects.click(`lnsChartSwitchPopover_${subVisualizationId}`); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }, async waitForSearchInputValue(subVisualizationId: string, searchTerm?: string) { await retry.try(async () => { await this.searchOnChartSwitch(subVisualizationId, searchTerm); - await PageObjects.common.sleep(1000); // give time for the value to be typed + await common.sleep(1000); // give time for the value to be typed const searchInputValue = await testSubjects.getAttribute('lnsChartSwitchSearch', 'value'); const queryTerm = searchTerm ?? subVisualizationId.substring(subVisualizationId.length - 3); if (searchInputValue !== queryTerm) { @@ -1100,32 +1099,32 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont * Changes the index pattern in the data panel */ async switchDataPanelIndexPattern(dataViewTitle: string) { - await PageObjects.unifiedSearch.switchDataView('lns-dataView-switch-link', dataViewTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedSearch.switchDataView('lns-dataView-switch-link', dataViewTitle); + await header.waitUntilLoadingHasFinished(); }, /** * Changes the index pattern for the first layer */ async switchFirstLayerIndexPattern(dataViewTitle: string) { - await PageObjects.unifiedSearch.switchDataView('lns_layerIndexPatternLabel', dataViewTitle); - await PageObjects.header.waitUntilLoadingHasFinished(); + await unifiedSearch.switchDataView('lns_layerIndexPatternLabel', dataViewTitle); + await header.waitUntilLoadingHasFinished(); }, /** * Returns the current index pattern of the first layer */ async getFirstLayerIndexPattern() { - return await PageObjects.unifiedSearch.getSelectedDataView('lns_layerIndexPatternLabel'); + return await unifiedSearch.getSelectedDataView('lns_layerIndexPatternLabel'); }, async linkedToOriginatingApp() { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('lnsApp_saveAndReturnButton'); }, async notLinkedToOriginatingApp() { - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await testSubjects.missingOrFail('lnsApp_saveAndReturnButton'); }, @@ -1295,7 +1294,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await retry.try(async () => { await testSubjects.click(`lns_colorEditing_trigger`); // wait for the UI to settle - await PageObjects.common.sleep(100); + await common.sleep(100); await testSubjects.existOrFail('lns-palettePanelFlyout', { timeout: 2500, }); @@ -1315,13 +1314,13 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async setPalette(paletteId: string, isLegacy: boolean) { await testSubjects.click('lns_colorEditing_trigger'); // This action needs to be slowed WAY down, otherwise it will not correctly set the palette - await PageObjects.common.sleep(200); + await common.sleep(200); await testSubjects.setEuiSwitch( 'lns_colorMappingOrLegacyPalette_switch', isLegacy ? 'uncheck' : 'check' ); - await PageObjects.common.sleep(200); + await common.sleep(200); if (isLegacy) { await testSubjects.click('lns-palettePicker'); @@ -1330,7 +1329,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await testSubjects.click('kbnColoring_ColorMapping_PalettePicker'); await testSubjects.click(`kbnColoring_ColorMapping_Palette-${paletteId}`); } - await PageObjects.common.sleep(200); + await common.sleep(200); await this.closePaletteEditor(); }, @@ -1363,16 +1362,16 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async toggleColumnVisibility(dimension: string, no = 1) { await this.openDimensionEditor(dimension); const id = 'lns-table-column-hidden'; - await PageObjects.common.sleep(500); + await common.sleep(500); const isChecked = await testSubjects.isEuiSwitchChecked(id); log.debug(`switch status before the toggle = ${isChecked}`); await testSubjects.setEuiSwitch(id, isChecked ? 'uncheck' : 'check'); - await PageObjects.common.sleep(500); + await common.sleep(500); const isChecked2 = await testSubjects.isEuiSwitchChecked(id); log.debug(`switch status after the toggle = ${isChecked2}`); await this.closeDimensionEditor(); - await PageObjects.common.sleep(500); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.sleep(500); + await header.waitUntilLoadingHasFinished(); }, async clickTableCellAction(rowIndex = 0, colIndex = 0, actionTestSub: string) { @@ -1495,9 +1494,9 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont ignoreTimeFilter?: boolean; }) { log.debug(`createAndAddLens${title}`); - const inViewMode = await PageObjects.dashboard.getIsInViewMode(); + const inViewMode = await dashboard.getIsInViewMode(); if (inViewMode) { - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); } await dashboardAddPanel.clickCreateNewLink(); @@ -1562,11 +1561,11 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont const renderingCount = await visualizationContainer.getAttribute('data-rendering-count'); return Number(renderingCount); } - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await retry.waitFor('rendering count to stabilize', async () => { const firstCount = await getRenderingCount(); - await PageObjects.common.sleep(1000); + await common.sleep(1000); const secondCount = await getRenderingCount(); @@ -1576,7 +1575,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async switchToTextBasedLanguage(language: string) { await testSubjects.click('lns-dataView-switch-link'); - await PageObjects.unifiedSearch.selectTextBasedLanguage(language); + await unifiedSearch.selectTextBasedLanguage(language); }, async configureTextBasedLanguagesDimension(opts: { @@ -1747,7 +1746,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await input.clearValueWithKeyboard({ charByChar: true }); await input.type(formula); // Debounce time for formula - await PageObjects.common.sleep(300); + await common.sleep(300); }, async expectFormulaText(formula: string) { @@ -1926,12 +1925,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, closeShareModal() { - return PageObjects.share.closeShareModal(); + return share.closeShareModal(); }, async getUrl() { await this.ensureShareMenuIsOpen('link'); - const url = await PageObjects.share.getSharedUrl(); + const url = await share.getSharedUrl(); if (!url) { throw Error('No data-share-url attribute found'); diff --git a/x-pack/test/localization/tests/lens/formula.ts b/x-pack/test/localization/tests/lens/formula.ts index a897a5f1c7ed89..dcb63b2bdb4841 100644 --- a/x-pack/test/localization/tests/lens/formula.ts +++ b/x-pack/test/localization/tests/lens/formula.ts @@ -9,24 +9,24 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const elasticChart = getService('elasticChart'); describe('lens formula tests', () => { it('should allow creation of a lens chart via formula', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'formula', formula: `ifelse(count() > 1, (count() + average(bytes)) / 2, 5)`, }); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(0); - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(await lens.getWorkspaceErrorCount()).to.eql(0); + const data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data).to.be.ok(); }); }); diff --git a/x-pack/test/localization/tests/lens/index.ts b/x-pack/test/localization/tests/lens/index.ts index 0f4c2103578339..c54db350dd83ba 100644 --- a/x-pack/test/localization/tests/lens/index.ts +++ b/x-pack/test/localization/tests/lens/index.ts @@ -9,7 +9,7 @@ import { EsArchiver } from '@kbn/es-archiver'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects, loadTestFile }: FtrProviderContext) { - const PageObjects = getPageObjects(['timePicker']); + const { timePicker } = getPageObjects(['timePicker']); const browser = getService('browser'); const config = getService('config'); const log = getService('log'); @@ -54,7 +54,7 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid await esNode.load(esArchive); // changing the timepicker default here saves us from having to set it in Discover (~8s) - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.uiSettings.update({ defaultIndex: indexPatternString, 'dateFormat:tz': 'UTC', @@ -65,7 +65,7 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid after(async () => { await esArchiver.unload(esArchive); - await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); + await timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await kibanaServer.importExport.unload(fixtureDirs.lensBasic); await kibanaServer.importExport.unload(fixtureDirs.lensDefault); await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/localization/tests/lens/smokescreen.ts b/x-pack/test/localization/tests/lens/smokescreen.ts index 82056c17df1ac8..5e679febb5d634 100644 --- a/x-pack/test/localization/tests/lens/smokescreen.ts +++ b/x-pack/test/localization/tests/lens/smokescreen.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; import { getI18nLocaleFromServerArgs } from '../utils'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']); + const { visualize, lens } = getPageObjects(['visualize', 'lens']); const find = getService('find'); const listingTable = getService('listingTable'); const testSubjects = getService('testSubjects'); @@ -168,49 +168,49 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow creation of lens xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: '@message.raw', }); - await PageObjects.lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); - await PageObjects.lens.removeDimension('lnsDatatable_rows'); - await PageObjects.lens.switchToVisualization('bar', termTranslator('bar')); + await lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); + await lens.removeDimension('lnsDatatable_rows'); + await lens.switchToVisualization('bar', termTranslator('bar')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'ip', }); - await PageObjects.lens.save('Afancilenstest'); + await lens.save('Afancilenstest'); // Ensure the visualization shows up in the visualize list, and takes // us back to the visualization as we configured it. - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Afancilenstest'); - await PageObjects.lens.clickVisualizeListItemTitle('Afancilenstest'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.clickVisualizeListItemTitle('Afancilenstest'); + await lens.goToTimeRange(); + await lens.waitForVisualization('xyVisChart'); - expect(await PageObjects.lens.getTitle()).to.eql('Afancilenstest'); + expect(await lens.getTitle()).to.eql('Afancilenstest'); // .echLegendItem__title is the only viable way of getting the xy chart's // legend item(s), so we're using a class selector here. @@ -219,473 +219,443 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should create an xy visualization with filters aggregation', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); // Change the IP field to filters - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', operation: 'filters', keepOpen: true, }); - await PageObjects.lens.addFilterToAgg(`geo.src : CN`); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.addFilterToAgg(`geo.src : CN`); + await lens.waitForVisualization('xyVisChart'); // Verify that the field was persisted from the transition - expect(await PageObjects.lens.getFiltersAggLabels()).to.eql([`"ip" : *`, `geo.src : CN`]); + expect(await lens.getFiltersAggLabels()).to.eql([`"ip" : *`, `geo.src : CN`]); expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); }); it('should transition from metric to table to metric', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('Artistpreviouslyknownaslens'); - await PageObjects.lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.assertLegacyMetric(termTranslator('max', 'bytes'), '19,986'); - await PageObjects.lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); - expect(await PageObjects.lens.getDatatableHeaderText()).to.eql( - termTranslator('max', 'bytes') - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('19,986'); - await PageObjects.lens.switchToVisualization( - 'lnsLegacyMetric', - termTranslator('legacyMetric') - ); - await PageObjects.lens.assertLegacyMetric(termTranslator('max', 'bytes'), '19,986'); + await lens.clickVisualizeListItemTitle('Artistpreviouslyknownaslens'); + await lens.goToTimeRange(); + await lens.assertLegacyMetric(termTranslator('max', 'bytes'), '19,986'); + await lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); + expect(await lens.getDatatableHeaderText()).to.eql(termTranslator('max', 'bytes')); + expect(await lens.getDatatableCellText(0, 0)).to.eql('19,986'); + await lens.switchToVisualization('lnsLegacyMetric', termTranslator('legacyMetric')); + await lens.assertLegacyMetric(termTranslator('max', 'bytes'), '19,986'); }); it('should transition from a multi-layer stacked bar to a multi-layer line chart and correctly remove all layers', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer(); + await lens.createLayer(); - expect(await PageObjects.lens.hasChartSwitchWarning('line', termTranslator('line'))).to.eql( - false - ); + expect(await lens.hasChartSwitchWarning('line', termTranslator('line'))).to.eql(false); - await PageObjects.lens.switchToVisualization('line', termTranslator('line')); + await lens.switchToVisualization('line', termTranslator('line')); - expect(await PageObjects.lens.getLayerType(0)).to.eql(termTranslator('line')); - expect(await PageObjects.lens.getLayerType(1)).to.eql(termTranslator('bar')); + expect(await lens.getLayerType(0)).to.eql(termTranslator('line')); + expect(await lens.getLayerType(1)).to.eql(termTranslator('bar')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'machine.ram', }); - expect(await PageObjects.lens.getLayerCount()).to.eql(2); - await PageObjects.lens.removeLayer(); - await PageObjects.lens.removeLayer(); + expect(await lens.getLayerCount()).to.eql(2); + await lens.removeLayer(); + await lens.removeLayer(); await testSubjects.existOrFail('workspace-drag-drop-prompt'); }); it('should transition selected layer in a multi layer bar using layer chart switch', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.createLayer('data', undefined, 'bar'); - expect(await PageObjects.lens.getLayerType(1)).to.eql(termTranslator('bar')); - await PageObjects.lens.configureDimension({ + await lens.createLayer('data', undefined, 'bar'); + expect(await lens.getLayerType(1)).to.eql(termTranslator('bar')); + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lns-layerPanel-1 > lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'machine.ram', }); // only changes one layer for compatible chart - await PageObjects.lens.switchToVisualization('line', termTranslator('line'), 1); + await lens.switchToVisualization('line', termTranslator('line'), 1); - expect(await PageObjects.lens.getLayerType(0)).to.eql(termTranslator('bar')); - expect(await PageObjects.lens.getLayerType(1)).to.eql(termTranslator('line')); + expect(await lens.getLayerType(0)).to.eql(termTranslator('bar')); + expect(await lens.getLayerType(1)).to.eql(termTranslator('line')); // generates new one layer chart based on selected layer - await PageObjects.lens.switchToVisualization('pie', termTranslator('pie'), 1); - expect(await PageObjects.lens.getLayerType(0)).to.eql(termTranslator('pie')); - const sliceByText = await PageObjects.lens.getDimensionTriggerText( - 'lnsPie_sliceByDimensionPanel' - ); - const sizeByText = await PageObjects.lens.getDimensionTriggerText( - 'lnsPie_sizeByDimensionPanel' - ); + await lens.switchToVisualization('pie', termTranslator('pie'), 1); + expect(await lens.getLayerType(0)).to.eql(termTranslator('pie')); + const sliceByText = await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel'); + const sizeByText = await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel'); expect(sliceByText).to.be(termTranslator('terms', 'geo.src', 5)); expect(sizeByText).to.be(termTranslator('average', 'machine.ram')); }); it('should edit settings of xy line chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.removeDimension('lnsXY_splitDimensionPanel'); - await PageObjects.lens.switchToVisualization('line', termTranslator('line')); - await PageObjects.lens.configureDimension({ + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.removeDimension('lnsXY_splitDimensionPanel'); + await lens.switchToVisualization('line', termTranslator('line')); + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'max', field: 'memory', keepOpen: true, }); - await PageObjects.lens.editDimensionLabel('Test of label'); - await PageObjects.lens.editDimensionFormat(termTranslator('Percent')); - await PageObjects.lens.editDimensionColor('#ff0000'); - await PageObjects.lens.openVisualOptions(); + await lens.editDimensionLabel('Test of label'); + await lens.editDimensionFormat(termTranslator('Percent')); + await lens.editDimensionColor('#ff0000'); + await lens.openVisualOptions(); - await PageObjects.lens.setCurvedLines('CURVE_MONOTONE_X'); - await PageObjects.lens.editMissingValues('Linear'); + await lens.setCurvedLines('CURVE_MONOTONE_X'); + await lens.editMissingValues('Linear'); - await PageObjects.lens.assertMissingValues(termTranslator('Linear')); + await lens.assertMissingValues(termTranslator('Linear')); - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); - await PageObjects.lens.assertColor('#ff0000'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.assertColor('#ff0000'); await testSubjects.existOrFail('indexPattern-dimension-formatDecimals'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - 'Test of label' - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql('Test of label'); }); it('should not show static value tab for data layers', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); // Quick functions and Formula tabs should be visible expect(await testSubjects.exists('lens-dimensionTabs-quickFunctions')).to.eql(true); expect(await testSubjects.exists('lens-dimensionTabs-formula')).to.eql(true); // Static value tab should not be visible expect(await testSubjects.exists('lens-dimensionTabs-static_value')).to.eql(false); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should be able to add very long labels and still be able to remove a dimension', async () => { - await PageObjects.lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); + await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); const longLabel = 'Veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long label wrapping multiple lines'; - await PageObjects.lens.editDimensionLabel(longLabel); - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.editDimensionLabel(longLabel); + await lens.waitForVisualization('xyVisChart'); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - longLabel - ); - expect(await PageObjects.lens.canRemoveDimension('lnsXY_yDimensionPanel')).to.equal(true); - await PageObjects.lens.removeDimension('lnsXY_yDimensionPanel'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql(longLabel); + expect(await lens.canRemoveDimension('lnsXY_yDimensionPanel')).to.equal(true); + await lens.removeDimension('lnsXY_yDimensionPanel'); await testSubjects.missingOrFail('lnsXY_yDimensionPanel > lns-dimensionTrigger'); }); it('should allow creation of a multi-axis chart and switching multiple times', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('bar', termTranslator('bar')); + await lens.goToTimeRange(); + await lens.switchToVisualization('bar', termTranslator('bar')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'unique_count', field: 'bytes', keepOpen: true, }); - await PageObjects.lens.changeAxisSide('right'); - let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.changeAxisSide('right'); + let data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y.length).to.eql(2); expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(true); - await PageObjects.lens.changeAxisSide('left'); - data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + await lens.changeAxisSide('left'); + data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y.length).to.eql(1); expect(data?.axes?.y.some(({ position }) => position === 'right')).to.eql(false); - await PageObjects.lens.changeAxisSide('right'); - await PageObjects.lens.waitForVisualization('xyVisChart'); + await lens.changeAxisSide('right'); + await lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); }); it('should show value labels on bar charts when enabled', async () => { // enable value labels - await PageObjects.lens.openTextOptions(); + await lens.openTextOptions(); await testSubjects.click('lns_valueLabels_inside'); // check for value labels - let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + let data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.bars?.[0].labels).not.to.eql(0); // switch to stacked bar chart - await PageObjects.lens.switchToVisualization('bar', termTranslator('bar')); + await lens.switchToVisualization('bar', termTranslator('bar')); // check for value labels - data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.bars?.[0].labels).not.to.eql(0); }); it('should override axis title', async () => { const axisTitle = 'overridden axis'; - await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton'); + await lens.toggleToolbarPopover('lnsLeftAxisButton'); await testSubjects.setValue('lnsyLeftAxisTitle', axisTitle, { clearWithKeyboard: true, }); - let data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + let data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y?.[1].title).to.eql(axisTitle); // hide the gridlines await testSubjects.click('lnsshowyLeftAxisGridlines'); - data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + data = await lens.getCurrentChartDebugState('xyVisChart'); expect(data?.axes?.y?.[1].gridlines.length).to.eql(0); }); it('should transition from line chart to pie chart and to bar chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - expect(await PageObjects.lens.hasChartSwitchWarning('pie', termTranslator('pie'))).to.eql( - true - ); - await PageObjects.lens.switchToVisualization('pie', termTranslator('pie')); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + expect(await lens.hasChartSwitchWarning('pie', termTranslator('pie'))).to.eql(true); + await lens.switchToVisualization('pie', termTranslator('pie')); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsPie_sliceByDimensionPanel')).to.eql( termTranslator('terms', 'ip') ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( termTranslator('average', 'bytes') ); - expect(await PageObjects.lens.hasChartSwitchWarning('bar', termTranslator('bar'))).to.eql( - false - ); - await PageObjects.lens.switchToVisualization('bar', termTranslator('bar')); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.hasChartSwitchWarning('bar', termTranslator('bar'))).to.eql(false); + await lens.switchToVisualization('bar', termTranslator('bar')); + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( termTranslator('terms', 'ip') ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( termTranslator('average', 'bytes') ); }); it('should transition from bar chart to line chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('line', termTranslator('line')); - expect(await PageObjects.lens.getTitle()).to.eql('lnsXYvis'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await lens.switchToVisualization('line', termTranslator('line')); + expect(await lens.getTitle()).to.eql('lnsXYvis'); + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( termTranslator('average', 'bytes') ); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( + expect(await lens.getDimensionTriggerText('lnsXY_splitDimensionPanel')).to.eql( termTranslator('terms', 'ip') ); }); it('should transition from pie chart to treemap chart', async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsPieVis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsPieVis'); - await PageObjects.lens.goToTimeRange(); - expect( - await PageObjects.lens.hasChartSwitchWarning('treemap', termTranslator('treemap')) - ).to.eql(false); - await PageObjects.lens.switchToVisualization('treemap', termTranslator('treemap')); - expect( - await PageObjects.lens.getDimensionTriggersTexts('lnsPie_groupByDimensionPanel') - ).to.eql([termTranslator('terms', 'geo.dest', 7), termTranslator('terms', 'geo.src')]); - expect(await PageObjects.lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( + await lens.clickVisualizeListItemTitle('lnsPieVis'); + await lens.goToTimeRange(); + expect(await lens.hasChartSwitchWarning('treemap', termTranslator('treemap'))).to.eql(false); + await lens.switchToVisualization('treemap', termTranslator('treemap')); + expect(await lens.getDimensionTriggersTexts('lnsPie_groupByDimensionPanel')).to.eql([ + termTranslator('terms', 'geo.dest', 7), + termTranslator('terms', 'geo.src'), + ]); + expect(await lens.getDimensionTriggerText('lnsPie_sizeByDimensionPanel')).to.eql( termTranslator('average', 'bytes') ); }); it('should create a pie chart and switch to datatable', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('pie', termTranslator('pie')); - await PageObjects.lens.configureDimension({ + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('pie', termTranslator('pie')); + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect( - await PageObjects.lens.hasChartSwitchWarning('lnsDatatable', termTranslator('datatable')) - ).to.eql(false); - await PageObjects.lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); + expect(await lens.hasChartSwitchWarning('lnsDatatable', termTranslator('datatable'))).to.eql( + false + ); + await lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); // Need to provide a fn for these - // expect(await PageObjects.lens.getDatatableHeaderText()).to.eql('@timestamp per 3 hours'); - expect(await PageObjects.lens.getDatatableHeaderText(1)).to.eql( - termTranslator('average', 'bytes') - ); - expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('2015-09-20 00:00'); - expect(await PageObjects.lens.getDatatableCellText(0, 1)).to.eql('6,011.351'); + // expect(await lens.getDatatableHeaderText()).to.eql('@timestamp per 3 hours'); + expect(await lens.getDatatableHeaderText(1)).to.eql(termTranslator('average', 'bytes')); + expect(await lens.getDatatableCellText(0, 0)).to.eql('2015-09-20 00:00'); + expect(await lens.getDatatableCellText(0, 1)).to.eql('6,011.351'); }); it('should create a heatmap chart and transition to barchart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('heatmap', termTranslator('heatmap')); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('heatmap', termTranslator('heatmap')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_yDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.dest', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsHeatmap_cellPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - expect(await PageObjects.lens.hasChartSwitchWarning('bar', termTranslator('bar'))).to.eql( - false - ); - await PageObjects.lens.switchToVisualization('bar', termTranslator('bar')); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( - '@timestamp' - ); + expect(await lens.hasChartSwitchWarning('bar', termTranslator('bar'))).to.eql(false); + await lens.switchToVisualization('bar', termTranslator('bar')); + expect(await lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql('@timestamp'); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( - 'bytes' - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain('bytes'); }); it('should create a valid XY chart with references', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'moving_average', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ operation: termTranslator('sum'), field: 'bytes', }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'cumulative_sum', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ field: termTranslator('Records'), }); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); // Two Y axes that are both valid expect(await find.allByCssSelector('.echLegendItem')).to.have.length(2); }); it('should allow formatting on references', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_rows > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', disableEmptyRows: true, }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsDatatable_metrics > lns-empty-dimension', operation: 'moving_average', keepOpen: true, }); - await PageObjects.lens.configureReference({ + await lens.configureReference({ operation: termTranslator('sum'), field: 'bytes', }); - await PageObjects.lens.editDimensionFormat(termTranslator('Number')); - await PageObjects.lens.closeDimensionEditor(); + await lens.editDimensionFormat(termTranslator('Number')); + await lens.closeDimensionEditor(); - await PageObjects.lens.waitForVisualization(); + await lens.waitForVisualization(); const values = await Promise.all( - range(0, 6).map((index) => PageObjects.lens.getDatatableCellText(index, 1)) + range(0, 6).map((index) => lens.getDatatableCellText(index, 1)) ); expect(values).to.eql([ '-', @@ -705,149 +675,143 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { * 3. Being able to switch charts while in partial config */ it('should handle edge cases in reference-based operations', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'cumulative_sum', }); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + expect(await lens.getWorkspaceErrorCount()).to.eql(1); - await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(2); + await lens.removeDimension('lnsXY_xDimensionPanel'); + expect(await lens.getWorkspaceErrorCount()).to.eql(2); - await PageObjects.lens.dragFieldToDimensionTrigger( + await lens.dragFieldToDimensionTrigger( '@timestamp', 'lnsXY_xDimensionPanel > lns-empty-dimension' ); - expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(1); + expect(await lens.getWorkspaceErrorCount()).to.eql(1); - expect( - await PageObjects.lens.hasChartSwitchWarning('lnsDatatable', termTranslator('datatable')) - ).to.eql(false); - await PageObjects.lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); + expect(await lens.hasChartSwitchWarning('lnsDatatable', termTranslator('datatable'))).to.eql( + false + ); + await lens.switchToVisualization('lnsDatatable', termTranslator('datatable')); // TODO: fix this later on - // expect(await PageObjects.lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql( + // expect(await lens.getDimensionTriggerText('lnsDatatable_metrics')).to.eql( // 'Cumulative sum of (incomplete)' // ); }); it('should keep the field selection while transitioning to every reference-based operation', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'counter_rate', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'cumulative_sum', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'differences', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'moving_average', }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( - 'bytes' - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain('bytes'); }); it('should not leave an incomplete column in the visualization config with field-based operation', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'min', }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql( - undefined - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.eql(undefined); }); it('should revert to previous configuration and not leave an incomplete column in the visualization config with reference-based operations', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'moving_average', field: termTranslator('Records'), }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( termTranslator('moving_average') ); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'median', isPreviousIncompatible: true, keepOpen: true, }); - expect(await PageObjects.lens.isDimensionEditorOpen()).to.eql(true); + expect(await lens.isDimensionEditorOpen()).to.eql(true); - await PageObjects.lens.closeDimensionEditor(); + await lens.closeDimensionEditor(); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( termTranslator('moving_average') ); }); it('should transition from unique count to last value', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'unique_count', field: 'ip', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-dimensionTrigger', operation: 'last_value', field: 'bytes', isPreviousIncompatible: true, }); - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain( - 'bytes' - ); + expect(await lens.getDimensionTriggerText('lnsXY_yDimensionPanel')).to.contain('bytes'); }); it('should allow to change index pattern', async () => { @@ -857,34 +821,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } else { indexPatternString = 'log*'; } - await PageObjects.lens.switchFirstLayerIndexPattern(indexPatternString); - expect(await PageObjects.lens.getFirstLayerIndexPattern()).to.equal(indexPatternString); + await lens.switchFirstLayerIndexPattern(indexPatternString); + expect(await lens.getFirstLayerIndexPattern()).to.equal(indexPatternString); }); it('should allow filtering by legend on an xy chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', operation: 'date_histogram', field: '@timestamp', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'extension.raw', }); - await PageObjects.lens.filterLegend('jpg'); + await lens.filterLegend('jpg'); const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); expect(hasExtensionFilter).to.be(true); @@ -892,30 +856,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should allow filtering by legend on a pie chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.switchToVisualization('pie', termTranslator('pie')); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.goToTimeRange(); + await lens.switchToVisualization('pie', termTranslator('pie')); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'extension.raw', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sliceByDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'agent.raw', }); - await PageObjects.lens.configureDimension({ + await lens.configureDimension({ dimension: 'lnsPie_sizeByDimensionPanel > lns-empty-dimension', operation: 'average', field: 'bytes', }); - await PageObjects.lens.filterLegend('jpg'); + await lens.filterLegend('jpg'); const hasExtensionFilter = await filterBar.hasFilter('extension.raw', 'jpg'); expect(hasExtensionFilter).to.be(true); @@ -923,16 +887,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show visual options button group for a pie chart', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await PageObjects.lens.switchToVisualization('pie', termTranslator('pie')); + await visualize.navigateToNewVisualization(); + await visualize.clickVisType('lens'); + await lens.switchToVisualization('pie', termTranslator('pie')); - const hasVisualOptionsButton = await PageObjects.lens.hasVisualOptionsButton(); + const hasVisualOptionsButton = await lens.hasVisualOptionsButton(); expect(hasVisualOptionsButton).to.be(true); - await PageObjects.lens.openVisualOptions(); + await lens.openVisualOptions(); await retry.try(async () => { - expect(await PageObjects.lens.hasEmptySizeRatioButtonGroup()).to.be(true); + expect(await lens.hasEmptySizeRatioButtonGroup()).to.be(true); }); }); }); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index a488cd1a471718..cdc826919d0ab8 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -138,6 +138,7 @@ export default function ({ getService }: FtrProviderContext) { 'endpoint:metadata-check-transforms-task', 'endpoint:user-artifact-packager', 'fleet:check-deleted-files-task', + 'fleet:deploy_agent_policies', 'fleet:reassign_action:retry', 'fleet:request_diagnostics:retry', 'fleet:setup:upgrade_managed_package_policies', diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/async_search.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/async_search.ts index eabb15dd1cd4cc..c64eed898fee9f 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/async_search.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/async_search.ts @@ -12,7 +12,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const testSubjects = getService('testSubjects'); const log = getService('log'); - const PageObjects = getPageObjects(['common', 'header', 'dashboard', 'visChart']); + const { common, header, dashboard, visChart } = getPageObjects([ + 'common', + 'header', + 'dashboard', + 'visChart', + ]); const dashboardPanelActions = getService('dashboardPanelActions'); const queryBar = getService('queryBar'); const elasticChart = getService('elasticChart'); @@ -35,36 +40,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('not delayed should load', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Not Delayed'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('Not Delayed'); + await header.waitUntilLoadingHasFinished(); await dashboardExpect.noErrorEmbeddablesPresent(); await enableNewChartLibraryDebug(); - const data = await PageObjects.visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); + const data = await visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); expect(data.length).to.be(5); }); it('delayed should load', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Delayed 5s'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('Delayed 5s'); + await header.waitUntilLoadingHasFinished(); await dashboardExpect.noErrorEmbeddablesPresent(); await enableNewChartLibraryDebug(); - const data = await PageObjects.visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); + const data = await visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); expect(data.length).to.be(5); }); it('timed out should show error', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Delayed 15s'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('Delayed 15s'); + await header.waitUntilLoadingHasFinished(); await testSubjects.existOrFail('searchTimeoutError'); }); it('multiple searches are grouped and only single error popup is shown', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Multiple delayed'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('Multiple delayed'); + await header.waitUntilLoadingHasFinished(); // but only single error toast because searches are grouped expect((await testSubjects.findAll('searchTimeoutError')).length).to.be(1); diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/index.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/index.ts index deb4a53190ff69..4aafb68de0e888 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/index.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/index.ts @@ -10,8 +10,8 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common']); const searchSessions = getService('searchSessions'); + const { common } = getPageObjects(['common']); describe('Dashboard', function () { before(async () => { @@ -22,7 +22,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid ); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); await kibanaServer.uiSettings.replace({ 'search:timeout': 10000 }); - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); }); beforeEach(async () => { diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session.ts index bb7f87dadc3a15..e38db3afe0a758 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session.ts @@ -12,7 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const testSubjects = getService('testSubjects'); const log = getService('log'); - const PageObjects = getPageObjects([ + const { common, header, dashboard, visChart, searchSessionsManagement } = getPageObjects([ 'common', 'header', 'dashboard', @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Skipping because this build does not have the required shard_delay agg'); this.skip(); } - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); }); after(async function () { @@ -47,12 +47,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Restore using non-existing sessionId errors out. Refresh starts a new session and completes. Back button restores a session.', async () => { - await PageObjects.dashboard.loadSavedDashboard('Not Delayed'); + await dashboard.loadSavedDashboard('Not Delayed'); let url = await browser.getCurrentUrl(); const fakeSessionId = '__fake__'; const savedSessionURL = `${url}&searchSessionId=${fakeSessionId}`; await browser.get(savedSessionURL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); await testSubjects.existOrFail('embeddableError'); // expected that panel errors out because of non existing session @@ -62,7 +62,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(session1).to.be(fakeSessionId); await queryBar.clickQuerySubmitButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('completed'); await dashboardExpect.noErrorEmbeddablesPresent(); const session2 = await dashboardPanelActions.getSearchSessionIdByTitle( @@ -78,7 +78,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { url = await browser.getCurrentUrl(); expect(url).to.contain('searchSessionId'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); expect( @@ -87,8 +87,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Saves and restores a session', async () => { - await PageObjects.dashboard.loadSavedDashboard('Not Delayed'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.loadSavedDashboard('Not Delayed'); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); await searchSessions.save(); await searchSessions.expectState('backgroundCompleted'); @@ -100,8 +100,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const url = await browser.getCurrentUrl(); const savedSessionURL = `${url}&searchSessionId=${savedSessionId}`; await browser.get(savedSessionURL); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // Check that session is restored await searchSessions.expectState('restored'); @@ -109,23 +109,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // switching dashboard to edit mode (or any other non-fetch required) state change // should leave session state untouched - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); await searchSessions.expectState('restored'); const xyChartSelector = 'xyVisChart'; await enableNewChartLibraryDebug(); - const data = await PageObjects.visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); + const data = await visChart.getBarChartData(xyChartSelector, 'Sum of bytes'); expect(data.length).to.be(5); // navigating to a listing page clears the session - await PageObjects.dashboard.gotoDashboardLandingPage(); + await dashboard.gotoDashboardLandingPage(); await searchSessions.missingOrFail(); }); describe('TSVB & Timelion', () => { it('Restore session with TSVB & Timelion', async () => { - await PageObjects.dashboard.loadSavedDashboard('TSVBwithTimelion'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.loadSavedDashboard('TSVBwithTimelion'); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); await searchSessions.save(); await searchSessions.expectState('backgroundCompleted'); @@ -136,15 +136,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await searchSessions.openPopover(); await searchSessions.viewSearchSessions(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + const searchSessionList = await searchSessionsManagement.getList(); const searchSessionItem = searchSessionList.find( (session) => session.id === savedSessionId )!; expect(searchSessionItem.searchesCount).to.be(2); await searchSessionItem.view(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('restored'); expect(await toasts.getCount()).to.be(0); // no session restoration related warnings }); diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session_relative_time.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session_relative_time.ts index ad46f0a2add889..a73594e3b805a1 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session_relative_time.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/save_search_session_relative_time.ts @@ -11,13 +11,11 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const retry = getService('retry'); - const PageObjects = getPageObjects([ + const { common, header, dashboard, home, maps, searchSessionsManagement } = getPageObjects([ 'common', 'header', 'dashboard', - 'visChart', 'home', - 'timePicker', 'maps', 'searchSessionsManagement', ]); @@ -30,33 +28,33 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('save a search sessions with relative time', () => { before(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // use sample data set because it has recent relative time range and bunch of different visualizations - await PageObjects.home.addSampleDataSet('flights'); + await home.addSampleDataSet('flights'); await retry.tryForTime(10000, async () => { - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); + const isInstalled = await home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(true); }); - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); }); after(async () => { - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.removeSampleDataSet('flights'); - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); + await header.waitUntilLoadingHasFinished(); + await home.removeSampleDataSet('flights'); + const isInstalled = await home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(false); }); it('Saves and restores a session with relative time ranges', async () => { - await PageObjects.dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); - await PageObjects.dashboard.waitForRenderComplete(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); + await dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('completed'); await searchSessions.save(); @@ -65,14 +63,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await checkSampleDashboardLoaded('xyVisChart'); // load URL to restore a saved session - await PageObjects.searchSessionsManagement.goTo(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + await searchSessionsManagement.goTo(); + const searchSessionList = await searchSessionsManagement.getList(); // navigate to dashboard await searchSessionList[0].view(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); await checkSampleDashboardLoaded('xyVisChart'); // Check that session is restored @@ -99,7 +97,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPanelActions.openInspectorByTitle('[Flights] Origin Time Delayed'); await inspector.openInspectorView('Requests'); const requestStats = await inspector.getTableData(); - const totalHits = PageObjects.maps.getInspectorStatRowHit(requestStats, 'Hits'); + const totalHits = maps.getInspectorStatRowHit(requestStats, 'Hits'); expect(totalHits).to.equal('0'); await inspector.close(); } diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/search_sessions_tour.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/search_sessions_tour.ts index 86b7f41abf4ebd..1d8588c4b99d96 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/search_sessions_tour.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/search_sessions_tour.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const log = getService('log'); - const PageObjects = getPageObjects(['common', 'header', 'dashboard', 'visChart']); + const { common, header, dashboard } = getPageObjects(['common', 'header', 'dashboard']); const browser = getService('browser'); const searchSessions = getService('searchSessions'); const kibanaServer = getService('kibanaServer'); @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); await searchSessions.markTourUndone(); }); @@ -38,23 +38,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('search session popover auto opens when search is taking a while', async () => { - await PageObjects.dashboard.loadSavedDashboard('Delayed 15s'); + await dashboard.loadSavedDashboard('Delayed 15s'); await searchSessions.openedOrFail(); // tour auto opens when there is a long running search - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('completed'); const url = await browser.getCurrentUrl(); const fakeSessionId = '__fake__'; const savedSessionURL = `${url}&searchSessionId=${fakeSessionId}`; await browser.get(savedSessionURL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); await searchSessions.openedOrFail(); // tour auto opens on first restore await browser.get(savedSessionURL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); await searchSessions.closedOrFail(); // do not open on next restore }); diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/session_searches_integration.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/session_searches_integration.ts index 0a6b4f0625e952..9fdad941c208d6 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/session_searches_integration.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/session_searches_integration.ts @@ -13,11 +13,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const kibanaServer = getService('kibanaServer'); const browser = getService('browser'); - const PageObjects = getPageObjects([ + const { common, dashboard, searchSessionsManagement } = getPageObjects([ 'common', - 'header', 'dashboard', - 'visChart', 'searchSessionsManagement', ]); const toasts = getService('toasts'); @@ -36,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('Skipping because this build does not have the required shard_delay agg'); this.skip(); } - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); }); after(async function () { @@ -44,8 +42,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('until session is saved search keepAlive is short, when it is saved, keepAlive is extended and search is saved into the session saved object, when session is extended, searches are also extended', async () => { - await PageObjects.dashboard.loadSavedDashboard('Not Delayed'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.loadSavedDashboard('Not Delayed'); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); const searchResponse = await dashboardPanelActions.getSearchResponseByTitle( @@ -86,7 +84,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await searchSessions.openPopover(); await searchSessions.viewSearchSessions(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + const searchSessionList = await searchSessionsManagement.getList(); const searchSessionItem = searchSessionList.find((session) => session.id === savedSessionId)!; expect(searchSessionItem.searchesCount).to.be(1); @@ -101,9 +99,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('When session is deleted, searches are also deleted', async () => { - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Not Delayed'); - await PageObjects.dashboard.waitForRenderComplete(); + await common.navigateToApp('dashboard'); + await dashboard.loadSavedDashboard('Not Delayed'); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); const searchResponse = await dashboardPanelActions.getSearchResponseByTitle( @@ -125,7 +123,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await searchSessions.openPopover(); await searchSessions.viewSearchSessions(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + const searchSessionList = await searchSessionsManagement.getList(); const searchSessionItem = searchSessionList.find((session) => session.id === savedSessionId)!; expect(searchSessionItem.searchesCount).to.be(1); await searchSessionItem.delete(); @@ -140,7 +138,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Slow lens with other bucket', () => { before(async function () { await kibanaServer.uiSettings.unset('search:timeout'); - await PageObjects.common.navigateToApp('dashboard', { insertTimestamp: false }); + await common.navigateToApp('dashboard', { insertTimestamp: false }); await browser.execute(() => { window.ELASTIC_LENS_DELAY_SECONDS = 25; }); @@ -156,7 +154,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('Other bucket should be added to a session when restoring', async () => { // not using regular navigation method, because don't want to wait until all panels load - // await PageObjects.dashboard.loadSavedDashboard('Lens with other bucket'); + // await dashboard.loadSavedDashboard('Lens with other bucket'); await listingTable.clickItemLink('dashboard', 'Lens with other bucket'); await testSubjects.missingOrFail('dashboardLandingPage'); @@ -171,7 +169,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await searchSessions.openPopover(); await searchSessions.viewSearchSessions(); - let searchSessionList = await PageObjects.searchSessionsManagement.getList(); + let searchSessionList = await searchSessionsManagement.getList(); let searchSessionItem = searchSessionList.find((session) => session.id === savedSessionId)!; expect(searchSessionItem.searchesCount).to.be(1); await new Promise((resolve) => setTimeout(resolve, 10000)); @@ -189,7 +187,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await searchSessions.openPopover(); await searchSessions.viewSearchSessions(); - searchSessionList = await PageObjects.searchSessionsManagement.getList(); + searchSessionList = await searchSessionsManagement.getList(); searchSessionItem = searchSessionList.find((session) => session.id === savedSessionId)!; expect(searchSessionItem.searchesCount).to.be(2); diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/sessions_in_space.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/sessions_in_space.ts index 79b98e4741e0d9..e9356912ee92a6 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/sessions_in_space.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/async_search/sessions_in_space.ts @@ -10,14 +10,12 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const spacesService = getService('spaces'); - const security = getService('security'); - const PageObjects = getPageObjects([ + const securityService = getService('security'); + const { common, header, dashboard, security, searchSessionsManagement } = getPageObjects([ 'common', 'header', 'dashboard', - 'visChart', 'security', - 'timePicker', 'searchSessionsManagement', ]); const dashboardPanelActions = getService('dashboardPanelActions'); @@ -33,10 +31,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => await load(['minimal_read', 'store_search_session'])); it('Saves and restores a session', async () => { - await PageObjects.common.navigateToApp('dashboard', { basePath: 's/another-space' }); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard in another space'); + await common.navigateToApp('dashboard', { basePath: 's/another-space' }); + await dashboard.loadSavedDashboard('A Dashboard in another space'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); await searchSessions.save(); @@ -52,7 +50,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // https://github.com/elastic/kibana/issues/106074#issuecomment-920462094 await browser.refresh(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + const searchSessionList = await searchSessionsManagement.getList(); const searchSessionItem = searchSessionList.find( (session) => session.id === savedSessionId ); @@ -62,8 +60,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // navigate to discover await searchSessionItem.view(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); // Check that session is restored await searchSessions.expectState('restored'); @@ -75,17 +73,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => await load(['minimal_read'])); it("Doesn't allow to store a session", async () => { - await PageObjects.common.navigateToApp('dashboard', { basePath: 's/another-space' }); - await PageObjects.dashboard.loadSavedDashboard('A Dashboard in another space'); + await common.navigateToApp('dashboard', { basePath: 's/another-space' }); + await dashboard.loadSavedDashboard('A Dashboard in another space'); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboard.waitForRenderComplete(); await searchSessions.expectState('completed'); await searchSessions.disabledOrFail(); }); }); }); - async function load(dashboard: string[]) { + async function load(dashboards: string[]) { await kibanaServer.importExport.load( `x-pack/test/functional/fixtures/kbn_archiver/dashboard/session_in_space` ); @@ -103,38 +101,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { space: 'another-space' } ); - await security.role.create('data_analyst', { + await securityService.role.create('data_analyst', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['all'] }], }, kibana: [ { feature: { - dashboard, + dashboard: dashboards, }, spaces: ['another-space'], }, ], }); - await security.user.create('analyst', { + await securityService.user.create('analyst', { password: 'analyst-password', roles: ['data_analyst'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login('analyst', 'analyst-password', { + await security.login('analyst', 'analyst-password', { expectSpaceSelector: false, }); } async function clean() { await kibanaServer.savedObjects.cleanStandardList(); // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('data_analyst'); - await security.user.delete('analyst'); + await security.forceLogout(); + await securityService.role.delete('data_analyst'); + await securityService.user.delete('analyst'); await spacesService.delete('another-space'); await searchSessions.deleteAllSearchSessions(); } diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/index.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/index.ts index 021842a53191ae..bae4cdb3f7e3a0 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/index.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/index.ts @@ -10,14 +10,14 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ loadTestFile, getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); - const PageObjects = getPageObjects(['common']); const searchSessions = getService('searchSessions'); + const { common } = getPageObjects(['common']); describe('Search session sharing', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); - await PageObjects.common.navigateToApp('dashboard'); + await common.navigateToApp('dashboard'); }); after(async () => { diff --git a/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/lens.ts b/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/lens.ts index 39253534c54c7c..2942e31ee2f773 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/lens.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/dashboard/session_sharing/lens.ts @@ -12,9 +12,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardAddPanel = getService('dashboardAddPanel'); const find = getService('find'); - const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['header', 'common', 'dashboard', 'timePicker', 'lens']); + const { common, dashboard, lens } = getPageObjects(['common', 'dashboard', 'lens']); // Dashboard shares a search session with lens when navigating to and from by value lens to hit search cache // https://github.com/elastic/kibana/issues/99310 @@ -23,8 +22,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.preserveCrossAppState(); + await common.navigateToApp('dashboard'); + await dashboard.preserveCrossAppState(); }); after(async () => { @@ -39,35 +38,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it("should share search session with by value lens and don't share with by reference", async () => { // Add a by ref lens panel to a new dashboard const lensTitle = 'Artistpreviouslyknownaslens'; - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames(lensTitle); await find.clickByButtonText(lensTitle); await dashboardAddPanel.closeAddPanel(); - await PageObjects.lens.goToTimeRange(); - await PageObjects.dashboard.waitForRenderComplete(); + await lens.goToTimeRange(); + await dashboard.waitForRenderComplete(); // Navigating to lens and back should create a new session const byRefSessionId = await dashboardPanelActions.getSearchSessionIdByTitle(lensTitle); await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.saveAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); + await lens.saveAndReturn(); + await dashboard.waitForRenderComplete(); const newByRefSessionId = await dashboardPanelActions.getSearchSessionIdByTitle(lensTitle); expect(byRefSessionId).not.to.eql(newByRefSessionId); // Convert to by-value - const byRefPanel = await testSubjects.find('embeddablePanelHeading-' + lensTitle); - await dashboardPanelActions.legacyUnlinkFromLibrary(byRefPanel); - await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.legacyUnlinkFromLibrary(lensTitle); + await dashboard.waitForRenderComplete(); const byValueSessionId = await dashboardPanelActions.getSearchSessionIdByTitle(lensTitle); // Navigating to lens and back should keep the session await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); - await PageObjects.lens.saveAndReturn(); - await PageObjects.dashboard.waitForRenderComplete(); + await lens.saveAndReturn(); + await dashboard.waitForRenderComplete(); const newByValueSessionId = await dashboardPanelActions.getSearchSessionIdByTitle(lensTitle); expect(byValueSessionId).to.eql(newByValueSessionId); }); diff --git a/x-pack/test/search_sessions_integration/tests/apps/discover/async_search.ts b/x-pack/test/search_sessions_integration/tests/apps/discover/async_search.ts index 7fdea1ff3d6480..21c613f506706f 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/discover/async_search.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/discover/async_search.ts @@ -15,14 +15,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const inspector = getService('inspector'); - const PageObjects = getPageObjects([ - 'discover', - 'common', - 'timePicker', - 'header', - 'context', - 'searchSessionsManagement', - ]); + const { discover, common, timePicker, header, context, searchSessionsManagement } = + getPageObjects([ + 'discover', + 'common', + 'timePicker', + 'header', + 'context', + 'searchSessionsManagement', + ]); const searchSessions = getService('searchSessions'); const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); @@ -37,9 +38,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ enableESQL: true, }); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); }); after(async () => { await kibanaServer.importExport.unload( @@ -60,14 +61,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const fakeSearchSessionId = '__test__'; const savedSessionURL = url + `&searchSessionId=${fakeSearchSessionId}`; await browser.navigateTo(savedSessionURL); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); await testSubjects.existOrFail('discoverErrorCalloutTitle'); // expect error because of fake searchSessionId await toasts.dismissAll(); const searchSessionId1 = await getSearchSessionId(); expect(searchSessionId1).to.be(fakeSearchSessionId); await queryBar.clickQuerySubmitButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('completed'); const searchSessionId2 = await getSearchSessionId(); expect(searchSessionId2).not.to.be(searchSessionId1); @@ -80,7 +81,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { url = await browser.getCurrentUrl(); expect(url).to.contain('searchSessionId'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); // Note this currently fails, for some reason the fakeSearchSessionId is not restored await searchSessions.expectState('restored'); expect(await getSearchSessionId()).to.be(fakeSearchSessionId); @@ -89,12 +90,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // clean up page to get out of error state before proceeding to next test await toasts.dismissAll(); await queryBar.clickQuerySubmitButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); }); it('navigation to context cleans the session', async () => { - const table = await PageObjects.discover.getDocTable(); - const isLegacy = await PageObjects.discover.useLegacyTable(); + const table = await discover.getDocTable(); + const isLegacy = await discover.useLegacyTable(); await table.clickRowToggle({ rowIndex: 0 }); await retry.try(async () => { @@ -106,47 +107,47 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await rowActions[idxToClick].click(); }); - await PageObjects.context.waitUntilContextLoadingHasFinished(); + await context.waitUntilContextLoadingHasFinished(); await searchSessions.missingOrFail(); }); it('relative timerange works', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); await searchSessions.save(); await searchSessions.expectState('backgroundCompleted'); const searchSessionId = await getSearchSessionId(); - expect(await PageObjects.discover.hasNoResults()).to.be(true); + expect(await discover.hasNoResults()).to.be(true); log.info('searchSessionId', searchSessionId); // load URL to restore a saved session - await PageObjects.searchSessionsManagement.goTo(); - const searchSessionListBeforeRestore = await PageObjects.searchSessionsManagement.getList(); + await searchSessionsManagement.goTo(); + const searchSessionListBeforeRestore = await searchSessionsManagement.getList(); const searchesCountBeforeRestore = searchSessionListBeforeRestore[0].searchesCount; // navigate to Discover await searchSessionListBeforeRestore[0].view(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await searchSessions.expectState('restored'); - expect(await PageObjects.discover.hasNoResults()).to.be(true); + expect(await discover.hasNoResults()).to.be(true); expect(await toasts.getCount()).to.be(0); // no session restoration related warnings - await PageObjects.searchSessionsManagement.goTo(); - const searchSessionListAfterRestore = await PageObjects.searchSessionsManagement.getList(); + await searchSessionsManagement.goTo(); + const searchSessionListAfterRestore = await searchSessionsManagement.getList(); const searchesCountAfterRestore = searchSessionListAfterRestore[0].searchesCount; expect(searchesCountBeforeRestore).to.be(searchesCountAfterRestore); // no new searches started during restore }); it('should should clean the search session when navigating to ESQL mode, and reinitialize when navigating back', async () => { - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await common.navigateToApp('discover'); + await timePicker.setDefaultAbsoluteRange(); + await header.waitUntilLoadingHasFinished(); expect(await searchSessions.exists()).to.be(true); - await PageObjects.discover.selectTextBaseLang(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); await searchSessions.missingOrFail(); await browser.goBack(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); expect(await searchSessions.exists()).to.be(true); }); }); diff --git a/x-pack/test/search_sessions_integration/tests/apps/discover/sessions_in_space.ts b/x-pack/test/search_sessions_integration/tests/apps/discover/sessions_in_space.ts index 6c6228aa0056f9..8e545d7878d529 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/discover/sessions_in_space.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/discover/sessions_in_space.ts @@ -11,17 +11,17 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const spacesService = getService('spaces'); - const security = getService('security'); + const securityService = getService('security'); const inspector = getService('inspector'); - const PageObjects = getPageObjects([ - 'common', - 'header', - 'discover', - 'visChart', - 'security', - 'timePicker', - 'searchSessionsManagement', - ]); + const { common, header, discover, security, timePicker, searchSessionsManagement } = + getPageObjects([ + 'common', + 'header', + 'discover', + 'security', + 'timePicker', + 'searchSessionsManagement', + ]); const browser = getService('browser'); const searchSessions = getService('searchSessions'); const kibanaServer = getService('kibanaServer'); @@ -33,11 +33,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => await load(['all'])); it('Saves and restores a session', async () => { - await PageObjects.common.navigateToApp('discover', { basePath: 's/another-space' }); + await common.navigateToApp('discover', { basePath: 's/another-space' }); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDocTableLoadingComplete(); await searchSessions.expectState('completed'); await searchSessions.save(); @@ -56,7 +56,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // https://github.com/elastic/kibana/issues/106074#issuecomment-920462094 await browser.refresh(); - const searchSessionList = await PageObjects.searchSessionsManagement.getList(); + const searchSessionList = await searchSessionsManagement.getList(); const searchSessionItem = searchSessionList.find( (session) => session.id === savedSessionId ); @@ -66,8 +66,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // navigate to discover await searchSessionItem.view(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await header.waitUntilLoadingHasFinished(); + await discover.waitForDocTableLoadingComplete(); // Check that session is restored await searchSessions.expectState('restored'); @@ -78,23 +78,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => await load(['read'])); it("Doesn't allow to store a session", async () => { - await PageObjects.common.navigateToApp('discover', { basePath: 's/another-space' }); + await common.navigateToApp('discover', { basePath: 's/another-space' }); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await discover.selectIndexPattern('logstash-*'); - await PageObjects.timePicker.setAbsoluteRange( + await timePicker.setAbsoluteRange( 'Sep 1, 2015 @ 00:00:00.000', 'Oct 1, 2015 @ 00:00:00.000' ); - await PageObjects.discover.waitForDocTableLoadingComplete(); + await discover.waitForDocTableLoadingComplete(); await searchSessions.expectState('completed'); await searchSessions.disabledOrFail(); }); }); }); - async function load(discover: string[]) { + async function load(discoverIDs: string[]) { await kibanaServer.importExport.load( `x-pack/test/functional/fixtures/kbn_archiver/dashboard/session_in_space` ); @@ -112,29 +112,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { space: 'another-space' } ); - await security.role.create('data_analyst', { + await securityService.role.create('data_analyst', { elasticsearch: { indices: [{ names: ['logstash-*'], privileges: ['all'] }], }, kibana: [ { feature: { - discover, + discover: discoverIDs, }, spaces: ['another-space'], }, ], }); - await security.user.create('analyst', { + await securityService.user.create('analyst', { password: 'analyst-password', roles: ['data_analyst'], full_name: 'test user', }); - await PageObjects.security.forceLogout(); + await security.forceLogout(); - await PageObjects.security.login('analyst', 'analyst-password', { + await security.login('analyst', 'analyst-password', { expectSpaceSelector: false, }); } @@ -143,9 +143,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/dashboard/session_in_space' ); // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - await security.role.delete('data_analyst'); - await security.user.delete('analyst'); + await security.forceLogout(); + await securityService.role.delete('data_analyst'); + await securityService.user.delete('analyst'); await spacesService.delete('another-space'); await searchSessions.deleteAllSearchSessions(); } diff --git a/x-pack/test/search_sessions_integration/tests/apps/lens/search_sessions.ts b/x-pack/test/search_sessions_integration/tests/apps/lens/search_sessions.ts index 9690f9be99fc60..01359da876a555 100644 --- a/x-pack/test/search_sessions_integration/tests/apps/lens/search_sessions.ts +++ b/x-pack/test/search_sessions_integration/tests/apps/lens/search_sessions.ts @@ -11,7 +11,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const searchSession = getService('searchSessions'); - const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'timePicker', 'header']); + const { visualize, lens, header } = getPageObjects(['visualize', 'lens', 'header']); const listingTable = getService('listingTable'); const kibanaServer = getService('kibanaServer'); @@ -29,12 +29,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it("doesn't shows search sessions indicator UI", async () => { - await PageObjects.visualize.gotoVisualizationLandingPage(); + await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsXYvis'); - await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); - await PageObjects.lens.goToTimeRange(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.lens.isShowingNoResults()).to.be(false); + await lens.clickVisualizeListItemTitle('lnsXYvis'); + await lens.goToTimeRange(); + await header.waitUntilLoadingHasFinished(); + expect(await lens.isShowingNoResults()).to.be(false); await searchSession.missingOrFail(); }); diff --git a/x-pack/test/security_solution_api_integration/package.json b/x-pack/test/security_solution_api_integration/package.json index f750078df62cea..726d6b61feed53 100644 --- a/x-pack/test/security_solution_api_integration/package.json +++ b/x-pack/test/security_solution_api_integration/package.json @@ -45,6 +45,13 @@ "intialize-server:explore": "node scripts/index.js server explore trial_license_complete_tier", "run-tests:explore": "node scripts/index.js runner explore trial_license_complete_tier", + "genai_kb_entries:server:serverless": "npm run initialize-server:genai:trial_complete knowledge_base/entries serverless", + "genai_kb_entries:runner:serverless": "npm run run-tests:genai:trial_complete knowledge_base/entries serverless serverlessEnv", + "genai_kb_entries:qa:serverless": "npm run run-tests:genai:trial_complete knowledge_base/entries serverless qaPeriodicEnv", + "genai_kb_entries:qa:serverless:release": "npm run run-tests:genai:trial_complete knowledge_base/entries serverless qaEnv", + "genai_kb_entries:server:ess": "npm run initialize-server:genai:trial_complete knowledge_base/entries ess", + "genai_kb_entries:runner:ess": "npm run run-tests:genai:trial_complete knowledge_base/entries ess essEnv", + "nlp_cleanup_task:complete:server:serverless": "npm run initialize-server:genai:trial_complete nlp_cleanup_task serverless", "nlp_cleanup_task:complete:runner:serverless": "npm run run-tests:genai:trial_complete nlp_cleanup_task serverless serverlessEnv", "nlp_cleanup_task:complete:qa:serverless": "npm run run-tests:genai:trial_complete nlp_cleanup_task serverless qaPeriodicEnv", diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts index 0c432f02b78081..172d48b57d7e12 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/custom_query.ts @@ -18,6 +18,8 @@ import { ALERT_SUPPRESSION_TERMS, TIMESTAMP, ALERT_LAST_DETECTED, + ALERT_INTENDED_TIMESTAMP, + ALERT_RULE_EXECUTION_TIMESTAMP, } from '@kbn/rule-data-utils'; import { flattenWithPrefix } from '@kbn/securitysolution-rules'; import { Rule } from '@kbn/alerting-plugin/common'; @@ -538,6 +540,19 @@ export default ({ getService }: FtrProviderContext) => { expect(previewAlerts.length).toEqual(1); }); + it('should generate alerts with the correct intended timestamp fields', async () => { + const rule: QueryRuleCreateProps = { + ...getRuleForAlertTesting(['auditbeat-*']), + query: `_id:${ID}`, + }; + + const { previewId } = await previewRule({ supertest, rule }); + const previewAlerts = await getPreviewAlerts({ es, previewId }); + const alert = previewAlerts[0]._source; + + expect(alert?.[ALERT_INTENDED_TIMESTAMP]).toEqual(alert?.[TIMESTAMP]); + }); + describe('with suppression enabled', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/security_solution/suppression'); @@ -2447,6 +2462,56 @@ export default ({ getService }: FtrProviderContext) => { ); }); + it('alerts has intended_timestamp set to the time of the manual run', async () => { + const id = uuidv4(); + const firstTimestamp = moment(new Date()).subtract(3, 'h').toISOString(); + const secondTimestamp = new Date().toISOString(); + const firstDocument = { + id, + '@timestamp': firstTimestamp, + agent: { + name: 'agent-1', + }, + }; + const secondDocument = { + id, + '@timestamp': secondTimestamp, + agent: { + name: 'agent-2', + }, + }; + await indexListOfDocuments([firstDocument, secondDocument]); + + const rule: QueryRuleCreateProps = { + ...getRuleForAlertTesting(['ecs_compliant']), + rule_id: 'rule-1', + query: `id:${id}`, + from: 'now-1h', + interval: '1h', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits).toHaveLength(1); + + expect(alerts.hits.hits[0]?._source?.[ALERT_INTENDED_TIMESTAMP]).toEqual( + alerts.hits.hits[0]?._source?.[ALERT_RULE_EXECUTION_TIMESTAMP] + ); + + const backfillStartDate = moment(firstTimestamp).startOf('hour'); + const backfillEndDate = moment(backfillStartDate).add(1, 'h'); + const backfill = await scheduleRuleRun(supertest, [createdRule.id], { + startDate: backfillStartDate, + endDate: backfillEndDate, + }); + + await waitForBackfillExecuted(backfill, [createdRule.id], { supertest, log }); + const allNewAlerts = await getAlerts(supertest, log, es, createdRule); + expect(allNewAlerts.hits.hits[1]?._source?.[ALERT_INTENDED_TIMESTAMP]).toEqual( + backfillEndDate.toISOString() + ); + }); + it('alerts when run on a time range that the rule has not previously seen, and deduplicates if run there more than once', async () => { const id = uuidv4(); const firstTimestamp = moment(new Date()).subtract(3, 'h').toISOString(); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts index dc4443cffc5f6c..b688f53e288b10 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/indicator_match.ts @@ -153,6 +153,7 @@ function alertsAreTheSame(alertsA: any[], alertsB: any[]): void { 'kibana.alert.rule.uuid', 'kibana.alert.rule.execution.uuid', 'kibana.alert.rule.execution.timestamp', + 'kibana.alert.intended_timestamp', 'kibana.alert.start', 'kibana.alert.reason', 'kibana.alert.uuid', diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/alerts/remove_random_valued_properties_from_alert.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/alerts/remove_random_valued_properties_from_alert.ts index 84659d80f76981..4386474956563c 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/alerts/remove_random_valued_properties_from_alert.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/alerts/remove_random_valued_properties_from_alert.ts @@ -6,7 +6,7 @@ */ import { DetectionAlert } from '@kbn/security-solution-plugin/common/api/detection_engine'; -import { ALERT_LAST_DETECTED, ALERT_START } from '@kbn/rule-data-utils'; +import { ALERT_LAST_DETECTED, ALERT_START, ALERT_INTENDED_TIMESTAMP } from '@kbn/rule-data-utils'; export const removeRandomValuedPropertiesFromAlert = (alert: DetectionAlert | undefined) => { if (!alert) { @@ -24,6 +24,7 @@ export const removeRandomValuedPropertiesFromAlert = (alert: DetectionAlert | un 'kibana.alert.url': alertURL, [ALERT_START]: alertStart, [ALERT_LAST_DETECTED]: lastDetected, + [ALERT_INTENDED_TIMESTAMP]: intendedTimestamp, ...restOfAlert } = alert; return restOfAlert; diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/basic.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/basic.ts new file mode 100644 index 00000000000000..e31e36cf5f4bf3 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/basic.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { + DocumentEntryCreateFields, + DocumentEntryType, + IndexEntryCreateFields, + IndexEntryType, +} from '@kbn/elastic-assistant-common'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; +import { createEntry } from '../utils/create_entry'; + +const documentEntry: DocumentEntryCreateFields = { + name: 'Sample Document Entry', + type: DocumentEntryType.value, + required: false, + source: 'api', + kbResource: 'user', + namespace: 'default', + text: 'This is a sample document entry', + users: [], +}; + +const indexEntry: IndexEntryCreateFields = { + name: 'Sample Index Entry', + type: IndexEntryType.value, + namespace: 'default', + index: 'sample-index', + field: 'sample-field', + description: 'This is a sample index entry', + users: [], + queryDescription: 'Use sample-field to search in sample-index', +}; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const log = getService('log'); + + // TODO: Fill out tests + describe.skip('@ess @serverless Basic Security AI Assistant Knowledge Base Entries', () => { + describe('Create Entries', () => { + it('should create a new document entry', async () => { + const entry = await createEntry(supertest, log, documentEntry); + + expect(entry).toEqual(documentEntry); + }); + + it('should create a new index entry', async () => { + const entry = await createEntry(supertest, log, indexEntry); + + expect(entry).toEqual(indexEntry); + }); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/ess.config.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/ess.config.ts new file mode 100644 index 00000000000000..8b26b7b4652489 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/ess.config.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile( + require.resolve('../../../../../../config/ess/config.base.trial') + ); + + return { + ...functionalConfig.getAll(), + kbnTestServer: { + ...functionalConfig.get('kbnTestServer'), + serverArgs: [...functionalConfig.get('kbnTestServer.serverArgs')], + }, + testFiles: [require.resolve('..')], + junit: { + reportName: 'GenAI - Knowledge Base Entries Tests - ESS Env - Trial License', + }, + }; +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/serverless.config.ts new file mode 100644 index 00000000000000..129f7243059cab --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/configs/serverless.config.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestConfig } from '../../../../../../config/serverless/config.base'; + +export default createTestConfig({ + kbnTestServerArgs: [], + testFiles: [require.resolve('..')], + junit: { + reportName: 'GenAI - Knowledge Base Entries Tests - Serverless Env - Complete Tier', + }, +}); diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts new file mode 100644 index 00000000000000..a8f259ee4c8e28 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('GenAI - Knowledge Base Entries APIs', function () { + loadTestFile(require.resolve('./basic')); + }); +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/create_entry.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/create_entry.ts new file mode 100644 index 00000000000000..86210d53c45e22 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/utils/create_entry.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import type { ToolingLog } from '@kbn/tooling-log'; +import type SuperTest from 'supertest'; + +import { + ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL, + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryResponse, +} from '@kbn/elastic-assistant-common'; +import { routeWithNamespace } from '../../../../../../common/utils/security_solution'; + +/** + * Creates a Knowledge Base Entry + * @param supertest The supertest deps + * @param log The tooling logger + * @param entry The entry to create + * @param namespace The Kibana Space to create the entry in (optional) + */ +export const createEntry = async ( + supertest: SuperTest.Agent, + log: ToolingLog, + entry: KnowledgeBaseEntryCreateProps, + namespace?: string +): Promise => { + const route = routeWithNamespace(ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_ENTRIES_URL, namespace); + const response = await supertest + .post(route) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .send(entry); + if (response.status !== 200) { + throw new Error( + `Unexpected non 200 ok when attempting to create entry: ${JSON.stringify( + response.status + )},${JSON.stringify(response, null, 4)}` + ); + } else { + return response.body; + } +}; diff --git a/x-pack/test/security_solution_api_integration/tsconfig.json b/x-pack/test/security_solution_api_integration/tsconfig.json index 1f558e3c3f0516..82decfa5a6db34 100644 --- a/x-pack/test/security_solution_api_integration/tsconfig.json +++ b/x-pack/test/security_solution_api_integration/tsconfig.json @@ -47,6 +47,7 @@ "@kbn/utility-types", "@kbn/timelines-plugin", "@kbn/dev-cli-runner", + "@kbn/elastic-assistant-common", "@kbn/search-types", "@kbn/security-plugin", "@kbn/ftr-common-functional-ui-services", diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/connectors.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/connectors.ts index 58b679d6ebe01e..5cf1f44cf0ea33 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/connectors.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/connectors.ts @@ -5,12 +5,14 @@ * 2.0. */ +import { Connector } from '@kbn/actions-plugin/server/application/connector/types'; +import { rootRequest } from './common'; + export const createConnector = (connector: Record) => - cy.request({ + rootRequest({ method: 'POST', url: '/api/actions/action', body: connector, - headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }, }); const slackConnectorAPIPayload = { diff --git a/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/task_management.ts b/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/task_management.ts index c2d5e0edccf649..6323cef329ed61 100644 --- a/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/task_management.ts +++ b/x-pack/test/task_manager_claimer_mget/test_suites/task_manager/task_management.ts @@ -553,21 +553,6 @@ export default function ({ getService }: FtrProviderContext) { await releaseTasksWaitingForEventToComplete('releaseSecondWaveOfTasks'); }); - it('should increment attempts when task fails on markAsRunning', async () => { - const originalTask = await scheduleTask({ - taskType: 'sampleTask', - params: { throwOnMarkAsRunning: true }, - }); - - expect(originalTask.attempts).to.eql(0); - - // Wait for task manager to attempt running the task a second time - await retry.try(async () => { - const task = await currentTask(originalTask.id); - expect(task.attempts).to.eql(2); - }); - }); - it('should return a task run error result when trying to run a non-existent task', async () => { // runSoon should fail const failedRunSoonResult = await runTaskSoon({ diff --git a/x-pack/test/upgrade/apps/canvas/canvas_smoke_tests.ts b/x-pack/test/upgrade/apps/canvas/canvas_smoke_tests.ts index 6ba9bc721e1972..886a5f458f52b4 100644 --- a/x-pack/test/upgrade/apps/canvas/canvas_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/canvas/canvas_smoke_tests.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'header', 'home']); + const { common, header, home } = getPageObjects(['common', 'header', 'home']); const testSubjects = getService('testSubjects'); const browser = getService('browser'); @@ -31,12 +31,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { canvasTests.forEach(({ name, numElements, page }) => { describe('space: ' + space, () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleCanvas(name); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleCanvas(name); + await header.waitUntilLoadingHasFinished(); }); it('renders elements on workpad ' + name + ' page ' + page, async () => { const browserUrl = await browser.getCurrentUrl(); @@ -49,7 +49,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { if (name === 'ecommerce') { if (!browserUrl.includes('page/' + page)) { await browser.get(browserUrl.replace(/\/[^\/]*$/, '/' + page), false); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); } } await retry.try(async () => { diff --git a/x-pack/test/upgrade/apps/dashboard/dashboard_smoke_tests.ts b/x-pack/test/upgrade/apps/dashboard/dashboard_smoke_tests.ts index 2d54d3ba0a52ba..dc51b0f294780b 100644 --- a/x-pack/test/upgrade/apps/dashboard/dashboard_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/dashboard/dashboard_smoke_tests.ts @@ -15,7 +15,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const renderable = getService('renderable'); const dashboardExpect = getService('dashboardExpect'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'header', 'home', 'dashboard', 'timePicker']); + const { common, header, home, dashboard } = getPageObjects([ + 'common', + 'header', + 'home', + 'dashboard', + ]); const browser = getService('browser'); describe('upgrade dashboard smoke tests', function describeIndexTests() { @@ -33,10 +38,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { spaces.forEach(({ space, basePath }) => { describe('space: ' + space, () => { beforeEach(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); await browser.refresh(); }); dashboardTests.forEach(({ name, numPanels }) => { @@ -44,10 +49,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'timepicker:timeDefaults': `{ "from": "now-5y", "to": "now"}`, }); - await PageObjects.home.launchSampleDashboard(name); - await PageObjects.header.waitUntilLoadingHasFinished(); + await home.launchSampleDashboard(name); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); - const panelCount = await PageObjects.dashboard.getPanelCount(); + const panelCount = await dashboard.getPanelCount(); expect(panelCount).to.be.above(numPanels); }); }); @@ -55,8 +60,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.uiSettings.update({ 'timepicker:timeDefaults': `{ "from": "now-5y", "to": "now"}`, }); - await PageObjects.home.launchSampleDashboard('flights'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await home.launchSampleDashboard('flights'); + await header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); log.debug('Checking saved searches rendered'); await dashboardExpect.savedSearchRowCount(49); diff --git a/x-pack/test/upgrade/apps/discover/discover_smoke_tests.ts b/x-pack/test/upgrade/apps/discover/discover_smoke_tests.ts index 64adb488ca2b92..9f8378ecc4133b 100644 --- a/x-pack/test/upgrade/apps/discover/discover_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/discover/discover_smoke_tests.ts @@ -9,7 +9,13 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'header', 'home', 'discover', 'timePicker']); + const { common, header, home, discover, timePicker } = getPageObjects([ + 'common', + 'header', + 'home', + 'discover', + 'timePicker', + ]); describe('upgrade discover smoke tests', function describeIndexTests() { const spaces = [ @@ -27,25 +33,25 @@ export default function ({ getPageObjects }: FtrProviderContext) { discoverTests.forEach(({ name, timefield, hits }) => { describe('space: ' + space + ', name: ' + name, () => { before(async () => { - await PageObjects.common.navigateToApp('discover', { + await common.navigateToApp('discover', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - const indices = await PageObjects.discover.getIndexPatterns(); + await header.waitUntilLoadingHasFinished(); + const indices = await discover.getIndexPatterns(); const index = indices.find((element) => { if (element.toLowerCase().includes(name)) { return true; } }); - await PageObjects.discover.selectIndexPattern(String(index)); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await discover.selectIndexPattern(String(index)); + await discover.waitUntilSearchingHasFinished(); if (timefield) { - await PageObjects.timePicker.setCommonlyUsedTime('Last_1 year'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setCommonlyUsedTime('Last_1 year'); + await discover.waitUntilSearchingHasFinished(); } }); it('shows hit count greater than zero', async () => { - const hitCount = await PageObjects.discover.getHitCountInt(); + const hitCount = await discover.getHitCountInt(); if (hits === '') { expect(hitCount).to.be.greaterThan(0); } else { @@ -53,7 +59,7 @@ export default function ({ getPageObjects }: FtrProviderContext) { } }); it('shows table rows not empty', async () => { - const tableRows = await PageObjects.discover.getDocTableRows(); + const tableRows = await discover.getDocTableRows(); expect(tableRows.length).to.be.greaterThan(0); }); }); @@ -62,19 +68,19 @@ export default function ({ getPageObjects }: FtrProviderContext) { discoverTests.forEach(({ name, timefield, hits }) => { describe('space: ' + space + ', name: ' + name, () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleDiscover(name); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleDiscover(name); + await header.waitUntilLoadingHasFinished(); if (timefield) { - await PageObjects.timePicker.setCommonlyUsedTime('Last_1 year'); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await timePicker.setCommonlyUsedTime('Last_1 year'); + await discover.waitUntilSearchingHasFinished(); } }); it('shows hit count greater than zero', async () => { - const hitCount = await PageObjects.discover.getHitCountInt(); + const hitCount = await discover.getHitCountInt(); if (hits === '') { expect(hitCount).to.be.greaterThan(0); } else { @@ -82,7 +88,7 @@ export default function ({ getPageObjects }: FtrProviderContext) { } }); it('shows table rows not empty', async () => { - const tableRows = await PageObjects.discover.getDocTableRows(); + const tableRows = await discover.getDocTableRows(); expect(tableRows.length).to.be.greaterThan(0); }); }); diff --git a/x-pack/test/upgrade/apps/graph/graph_smoke_tests.ts b/x-pack/test/upgrade/apps/graph/graph_smoke_tests.ts index d9e9c2dd396228..cdb3c069c7bb71 100644 --- a/x-pack/test/upgrade/apps/graph/graph_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/graph/graph_smoke_tests.ts @@ -10,7 +10,7 @@ import semver from 'semver'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'header', 'home', 'graph']); + const { common, header, home, graph } = getPageObjects(['common', 'header', 'home', 'graph']); const log = getService('log'); describe('upgrade graph smoke tests', function describeIndexTests() { @@ -37,15 +37,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { graphTests.forEach(({ name, numNodes }) => { describe('space: ' + space, () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleGraph(name); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleGraph(name); + await header.waitUntilLoadingHasFinished(); }); it('renders graph for ' + name, async () => { - const elements = await PageObjects.graph.getAllGraphNodes(); + const elements = await graph.getAllGraphNodes(); expect(elements).to.be.equal(numNodes); }); }); diff --git a/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts b/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts index db8e624ac43568..f653a3d32d65d3 100644 --- a/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts @@ -15,7 +15,13 @@ export default function ({ getService, updateBaselines, }: FtrProviderContext & { updateBaselines: boolean }) { - const PageObjects = getPageObjects(['common', 'maps', 'header', 'home', 'timePicker']); + const { common, maps, header, home, timePicker } = getPageObjects([ + 'common', + 'maps', + 'header', + 'home', + 'timePicker', + ]); const mapsHelper = getService('mapsHelper'); const screenshot = getService('screenshots'); const testSubjects = getService('testSubjects'); @@ -103,21 +109,21 @@ export default function ({ spaces.forEach(({ space, basePath }) => { describe('space: ' + space + ', name: ecommerce', () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleMap('ecommerce'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); - await PageObjects.maps.toggleLayerVisibility('United Kingdom'); - await PageObjects.maps.toggleLayerVisibility('France'); - await PageObjects.maps.toggleLayerVisibility('United States'); - await PageObjects.maps.toggleLayerVisibility('World Countries'); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleMap('ecommerce'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + await maps.toggleEmsBasemapLayerVisibility(); + await maps.toggleLayerVisibility('United Kingdom'); + await maps.toggleLayerVisibility('France'); + await maps.toggleLayerVisibility('United States'); + await maps.toggleLayerVisibility('World Countries'); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); @@ -131,17 +137,17 @@ export default function ({ }); describe('space: ' + space + ', name: flights', () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleMap('flights'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleMap('flights'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + await maps.toggleEmsBasemapLayerVisibility(); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); @@ -155,18 +161,18 @@ export default function ({ }); describe('space: ' + space + ', name: web logs', () => { before(async () => { - await PageObjects.common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { + await common.navigateToActualUrl('home', '/tutorial_directory/sampleData', { basePath, }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.launchSampleMap('logs'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.maps.waitForLayersToLoad(); - await PageObjects.maps.toggleEmsBasemapLayerVisibility(); + await header.waitUntilLoadingHasFinished(); + await home.launchSampleMap('logs'); + await header.waitUntilLoadingHasFinished(); + await maps.waitForLayersToLoad(); + await maps.toggleEmsBasemapLayerVisibility(); await mapsHelper.toggleLayerVisibilityTotalRequests(); - await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); + await timePicker.setCommonlyUsedTime('sample_data range'); + await maps.enterFullScreen(); + await maps.closeLegend(); const mapContainerElement = await testSubjects.find('mapContainer'); await mapContainerElement.moveMouseTo({ xOffset: 0, yOffset: 0 }); }); diff --git a/x-pack/test/upgrade/services/maps_upgrade_services.ts b/x-pack/test/upgrade/services/maps_upgrade_services.ts index 63aa41e676c8a2..e5949ce90708e2 100644 --- a/x-pack/test/upgrade/services/maps_upgrade_services.ts +++ b/x-pack/test/upgrade/services/maps_upgrade_services.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export function MapsHelper({ getPageObjects, getService }: FtrProviderContext) { - const PageObjects = getPageObjects(['maps', 'common']); + const { maps } = getPageObjects(['maps']); const testSubjects = getService('testSubjects'); return { @@ -28,10 +28,10 @@ export function MapsHelper({ getPageObjects, getService }: FtrProviderContext) { throw new Error('Layer total requests not found'); } if (isRequestByCountry) { - await PageObjects.maps.toggleLayerVisibility('Total Requests by Country'); + await maps.toggleLayerVisibility('Total Requests by Country'); } if (isRequestByDestination) { - await PageObjects.maps.toggleLayerVisibility('Total Requests by Destination'); + await maps.toggleLayerVisibility('Total Requests by Destination'); } }, }; diff --git a/x-pack/test_serverless/api_integration/test_suites/search/search_indices/indices.ts b/x-pack/test_serverless/api_integration/test_suites/search/search_indices/indices.ts new file mode 100644 index 00000000000000..4ece363018554c --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/search/search_indices/indices.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { InternalRequestHeader, RoleCredentials } from '../../../../shared/services'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const INTERNAL_API_BASE_PATH = '/internal/search_indices'; + +export default function ({ getService }: FtrProviderContext) { + const log = getService('log'); + const svlCommonApi = getService('svlCommonApi'); + const svlUserManager = getService('svlUserManager'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + let roleAuthc: RoleCredentials; + let internalReqHeader: InternalRequestHeader; + + describe('search_indices Indices APIs', function () { + before(function () { + internalReqHeader = svlCommonApi.getInternalRequestHeader(); + }); + describe('create index', function () { + const createIndexName = 'a-test-index'; + describe('developer', function () { + before(async () => { + // get auth header for Viewer role + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('developer'); + }); + after(async () => { + // Cleanup index created for testing purposes + try { + await esDeleteAllIndices(createIndexName); + } catch (err) { + log.debug('[Cleanup error] Error deleting index'); + throw err; + } + await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc); + }); + + it('can create a new index', async () => { + const { body } = await supertestWithoutAuth + .post(`${INTERNAL_API_BASE_PATH}/indices/create`) + .set(internalReqHeader) + .set(roleAuthc.apiKeyHeader) + .send({ + indexName: createIndexName, + }) + .expect(200); + + expect(body?.index).toBe(createIndexName); + }); + it('gives a conflict error if the index exists already', async () => { + await supertestWithoutAuth + .post(`${INTERNAL_API_BASE_PATH}/indices/create`) + .set(internalReqHeader) + .set(roleAuthc.apiKeyHeader) + .send({ + indexName: createIndexName, + }) + .expect(409); + }); + }); + describe('viewer', function () { + before(async () => { + // get auth header for Viewer role + roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('viewer'); + }); + + it('cannot create a new index', async () => { + await supertestWithoutAuth + .post(`${INTERNAL_API_BASE_PATH}/indices/create`) + .set(internalReqHeader) + .set(roleAuthc.apiKeyHeader) + .send({ + indexName: 'a-new-index', + }) + .expect(403); + }); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/page_objects/index.ts b/x-pack/test_serverless/functional/page_objects/index.ts index 1487d8e18190b3..6874f1e7aa6212 100644 --- a/x-pack/test_serverless/functional/page_objects/index.ts +++ b/x-pack/test_serverless/functional/page_objects/index.ts @@ -22,6 +22,7 @@ import { SvlManagementPageProvider } from './svl_management_page'; import { SvlIngestPipelines } from './svl_ingest_pipelines'; import { SvlSearchHomePageProvider } from './svl_search_homepage'; import { SvlSearchIndexDetailPageProvider } from './svl_search_index_detail_page'; +import { SvlSearchElasticsearchStartPageProvider } from './svl_search_elasticsearch_start_page'; export const pageObjects = { ...xpackFunctionalPageObjects, @@ -41,4 +42,5 @@ export const pageObjects = { svlIngestPipelines: SvlIngestPipelines, svlSearchHomePage: SvlSearchHomePageProvider, svlSearchIndexDetailPage: SvlSearchIndexDetailPageProvider, + svlSearchElasticsearchStartPage: SvlSearchElasticsearchStartPageProvider, }; diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts new file mode 100644 index 00000000000000..cb09613d169729 --- /dev/null +++ b/x-pack/test_serverless/functional/page_objects/svl_search_elasticsearch_start_page.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export function SvlSearchElasticsearchStartPageProvider({ getService }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const browser = getService('browser'); + const retry = getService('retry'); + + return { + async expectToBeOnStartPage() { + expect(await browser.getCurrentUrl()).contain('/app/elasticsearch/start'); + await testSubjects.existOrFail('elasticsearchStartPage', { timeout: 2000 }); + }, + async expectToBeOnIndexDetailsPage() { + await retry.tryForTime(60 * 1000, async () => { + expect(await browser.getCurrentUrl()).contain( + '/app/management/data/index_management/indices/index_details' + ); + }); + }, + async expectIndexNameToExist() { + await testSubjects.existOrFail('indexNameField'); + }, + async setIndexNameValue(value: string) { + await testSubjects.existOrFail('indexNameField'); + await testSubjects.setValue('indexNameField', value); + }, + async expectCreateIndexButtonToExist() { + await testSubjects.existOrFail('createIndexBtn'); + }, + async expectCreateIndexButtonToBeEnabled() { + await testSubjects.existOrFail('createIndexBtn'); + expect(await testSubjects.isEnabled('createIndexBtn')).equal(true); + }, + async expectCreateIndexButtonToBeDisabled() { + await testSubjects.existOrFail('createIndexBtn'); + expect(await testSubjects.isEnabled('createIndexBtn')).equal(false); + }, + async clickCreateIndexButton() { + await testSubjects.existOrFail('createIndexBtn'); + expect(await testSubjects.isEnabled('createIndexBtn')).equal(true); + await testSubjects.click('createIndexBtn'); + }, + }; +} diff --git a/x-pack/test_serverless/functional/services/svl_search_navigation.ts b/x-pack/test_serverless/functional/services/svl_search_navigation.ts index db2992287c1588..d37cdb1518e0c7 100644 --- a/x-pack/test_serverless/functional/services/svl_search_navigation.ts +++ b/x-pack/test_serverless/functional/services/svl_search_navigation.ts @@ -22,5 +22,13 @@ export function SvlSearchNavigationServiceProvider({ await testSubjects.existOrFail('svlSearchOverviewPage', { timeout: 2000 }); }); }, + async navigateToElasticsearchStartPage() { + await retry.tryForTime(60 * 1000, async () => { + await PageObjects.common.navigateToApp('elasticsearch/start', { + shouldLoginIfPrompted: false, + }); + await testSubjects.existOrFail('elasticsearchStartPage', { timeout: 2000 }); + }); + }, }; } diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts b/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts index fb310c7a17faa8..6719a75c3ea5c9 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/embeddable/_saved_search_embeddable.ts @@ -17,19 +17,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects([ + const { common, svlCommonPage, dashboard, header, discover } = getPageObjects([ 'common', 'svlCommonPage', 'dashboard', 'header', - 'timePicker', 'discover', ]); describe('discover saved search embeddable', () => { before(async () => { await browser.setWindowSize(1300, 800); - await PageObjects.svlCommonPage.loginWithPrivilegedRole(); + await svlCommonPage.loginWithPrivilegedRole(); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/dashboard/current/data'); await kibanaServer.savedObjects.cleanStandardList(); @@ -39,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.setTime({ + await common.setTime({ from: 'Sep 22, 2015 @ 00:00:00.000', to: 'Sep 23, 2015 @ 00:00:00.000', }); @@ -49,28 +48,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.unload('test/functional/fixtures/es_archiver/dashboard/current/data'); await kibanaServer.savedObjects.cleanStandardList(); - await PageObjects.common.unsetTime(); + await common.unsetTime(); }); beforeEach(async () => { - await PageObjects.dashboard.navigateToApp(); + await dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); - await PageObjects.dashboard.gotoDashboardLandingPage(); - await PageObjects.dashboard.clickNewDashboard(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); }); const addSearchEmbeddableToDashboard = async () => { await dashboardAddPanel.addSavedSearch('Rendering-Test:-saved-search'); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); const rows = await dataGrid.getDocTableRows(); expect(rows.length).to.be.above(0); }; const refreshDashboardPage = async () => { await browser.refresh(); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.dashboard.waitForRenderComplete(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); }; it('can save a search embeddable with a defined rows per page number', async function () { @@ -78,7 +77,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addSearchEmbeddableToDashboard(); await dataGrid.checkCurrentRowsPerPageToBe(100); - await PageObjects.dashboard.saveDashboard(dashboardName, { + await dashboard.saveDashboard(dashboardName, { waitDialogIsClosed: true, exitFromEditMode: false, saveAsNew: true, @@ -90,7 +89,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dataGrid.changeRowsPerPageTo(10); - await PageObjects.dashboard.saveDashboard(dashboardName, { saveAsNew: false }); + await dashboard.saveDashboard(dashboardName, { saveAsNew: false }); await refreshDashboardPage(); await dataGrid.checkCurrentRowsPerPageToBe(10); @@ -98,7 +97,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should control columns correctly', async () => { await addSearchEmbeddableToDashboard(); - await PageObjects.dashboard.switchToEditMode(); + await dashboard.switchToEditMode(); const cell = await dataGrid.getCellElementExcludingControlColumns(0, 0); expect(await cell.getVisibleText()).to.be('Sep 22, 2015 @ 23:50:13.253'); @@ -127,11 +126,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await addSearchEmbeddableToDashboard(); await queryBar.setQuery('bytes > 5000'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); - expect(await PageObjects.discover.getSavedSearchDocumentCount()).to.be('2,572 documents'); + await header.waitUntilLoadingHasFinished(); + expect(await discover.getSavedSearchDocumentCount()).to.be('2,572 documents'); await queryBar.setQuery('this < is not : a valid > query'); await queryBar.submitQuery(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await header.waitUntilLoadingHasFinished(); const embeddableError = await testSubjects.find('embeddableError'); const errorMessage = await embeddableError.findByTestSubject('errorMessageMarkdown'); const errorText = await errorMessage.getVisibleText(); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts index 91e5d16a8df5b4..eff79084e9dee6 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts @@ -18,11 +18,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ]); const dashboardCustomizePanel = getService('dashboardCustomizePanel'); const dashboardBadgeActions = getService('dashboardBadgeActions'); - const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); const panelActions = getService('dashboardPanelActions'); const kibanaServer = getService('kibanaServer'); + const visTitle = 'My TSVB to Lens viz 2'; describe('Dashboard to TSVB to Lens', function describeIndexTests() { const fixture = @@ -46,7 +46,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); - await dashboardPanelActions.customizePanel(); + await panelActions.customizePanel(); await dashboardCustomizePanel.enableCustomTimeRange(); await dashboardCustomizePanel.openDatePickerQuickMenu(); await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); @@ -75,17 +75,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert a by reference TSVB viz to a Lens viz', async () => { await dashboard.gotoDashboardEditMode('Convert to Lens - Dashboard - TSVB - 2'); - // await dashboard.gotoDashboardEditMode('Convert to Lens - Dashboard - Metric'); await timePicker.setDefaultAbsoluteRange(); // save it to library - const originalPanel = await testSubjects.find('embeddablePanelHeading-'); - await panelActions.saveToLibrary('My TSVB to Lens viz 2', originalPanel); + await panelActions.saveToLibrary(visTitle); await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); - await dashboardPanelActions.customizePanel(); + await panelActions.customizePanel(); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); await dashboardCustomizePanel.enableCustomTimeRange(); await dashboardCustomizePanel.openDatePickerQuickMenu(); @@ -99,7 +97,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); - await panelActions.convertToLensByTitle('My TSVB to Lens viz 2'); + await panelActions.convertToLensByTitle(visTitle); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -113,14 +111,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(embeddableCount).to.eql(originalEmbeddableCount); }); - const panel = await testSubjects.find(`embeddablePanelHeading-MyTSVBtoLensviz2(converted)`); - const descendants = await testSubjects.findAllDescendant( - 'embeddablePanelNotification-ACTION_LIBRARY_NOTIFICATION', - panel - ); - expect(descendants.length).to.equal(0); const titles = await dashboard.getPanelTitles(); - expect(titles[0]).to.be('My TSVB to Lens viz 2 (converted)'); + expect(titles[0]).to.be(`${visTitle} (converted)`); + await panelActions.expectNotLinkedToLibrary(titles[0], true); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); await panelActions.removePanel(); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts index 5b5adf48319db8..ac32a49f3694fb 100644 --- a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts +++ b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts @@ -7,6 +7,82 @@ import { FtrProviderContext } from '../../ftr_provider_context'; -export default function ({}: FtrProviderContext) { - describe('Elasticsearch Start [Onboarding Empty State]', function () {}); +import { testHasEmbeddedConsole } from './embedded_console'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects([ + 'svlCommonPage', + 'embeddedConsole', + 'svlSearchElasticsearchStartPage', + ]); + const svlSearchNavigation = getService('svlSearchNavigation'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + const es = getService('es'); + + const deleteAllTestIndices = async () => { + await esDeleteAllIndices(['search-*', 'test-*']); + }; + + describe('Elasticsearch Start [Onboarding Empty State]', function () { + describe('developer', function () { + before(async () => { + await pageObjects.svlCommonPage.loginWithRole('developer'); + }); + after(async () => { + await deleteAllTestIndices(); + }); + beforeEach(async () => { + await deleteAllTestIndices(); + await svlSearchNavigation.navigateToElasticsearchStartPage(); + }); + + it('should have embedded dev console', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await testHasEmbeddedConsole(pageObjects); + }); + + it('should support index creation flow with UI', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await pageObjects.svlSearchElasticsearchStartPage.expectCreateIndexButtonToBeEnabled(); + await pageObjects.svlSearchElasticsearchStartPage.clickCreateIndexButton(); + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnIndexDetailsPage(); + }); + + it('should support setting index name', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await pageObjects.svlSearchElasticsearchStartPage.expectIndexNameToExist(); + await pageObjects.svlSearchElasticsearchStartPage.setIndexNameValue('INVALID_INDEX'); + await pageObjects.svlSearchElasticsearchStartPage.expectCreateIndexButtonToBeDisabled(); + await pageObjects.svlSearchElasticsearchStartPage.setIndexNameValue('test-index-name'); + await pageObjects.svlSearchElasticsearchStartPage.expectCreateIndexButtonToBeEnabled(); + await pageObjects.svlSearchElasticsearchStartPage.clickCreateIndexButton(); + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnIndexDetailsPage(); + }); + + it('should redirect to index details when index is created via API', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await es.indices.create({ index: 'test-my-index' }); + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnIndexDetailsPage(); + }); + }); + describe('viewer', function () { + before(async () => { + await pageObjects.svlCommonPage.loginAsViewer(); + await deleteAllTestIndices(); + }); + beforeEach(async () => { + await svlSearchNavigation.navigateToElasticsearchStartPage(); + }); + after(async () => { + await deleteAllTestIndices(); + }); + + it('should redirect to index details when index is created via API', async () => { + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); + await pageObjects.svlSearchElasticsearchStartPage.expectCreateIndexButtonToBeDisabled(); + await es.indices.create({ index: 'test-my-api-index' }); + await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnIndexDetailsPage(); + }); + }); + }); } diff --git a/yarn.lock b/yarn.lock index c35f617e6d8c49..b984c1145b972f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1831,10 +1831,10 @@ "@elastic/react-search-ui-views" "1.20.2" "@elastic/search-ui" "1.20.2" -"@elastic/request-converter@^8.15.3": - version "8.15.3" - resolved "https://registry.yarnpkg.com/@elastic/request-converter/-/request-converter-8.15.3.tgz#0d2753e689a8e5c1f1167a883f8beb863b31b3f0" - integrity sha512-sUhVQReQ1VPn4qRlsYyjDOp340LZxYmaQCcu1HgKSYr1NR7pdSUhbSxmEbl/sH4HXh7Avq4bRf14vBvtHi19kA== +"@elastic/request-converter@^8.15.4": + version "8.15.4" + resolved "https://registry.yarnpkg.com/@elastic/request-converter/-/request-converter-8.15.4.tgz#332dc6266841b5a578c92e1655eee46b82c47ed2" + integrity sha512-iZDQpZpygV+AVOweaDzTsMJBfa2hwwduPXNNzk/yTXgC9qtjmns/AjehtLStKXs274+u3fg+BFxVt6NcMwUAAg== dependencies: child-process-promise "^2.2.1" commander "^12.1.0" @@ -14125,10 +14125,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@^128.0.0: - version "128.0.0" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-128.0.0.tgz#7f75a984101199e0bcc2c92fe9f91917fcd1f918" - integrity sha512-Ggo21z/dFQxTOTgU0vm0V59Mi79yyR+9AUk/KiVAsRfbDRdVZQYQWfgxnIvD/x8KOKn0oB7haRzDO/KfrKyvOA== +chromedriver@^128.0.1: + version "128.0.1" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-128.0.1.tgz#971fb267cc6893a712808cea6c977473ba167145" + integrity sha512-UmWqZXXAyuRa37pE+lnU46vJcCM/y0ddF015LHxycEOYfuqsK7k9ZxJuXCQNWbws9e7FAMQj/GJZT92WPgis0g== dependencies: "@testim/chrome-version" "^1.1.4" axios "^1.7.4" @@ -18587,10 +18587,10 @@ gcp-metadata@^6.1.0: gaxios "^6.0.0" json-bigint "^1.0.0" -geckodriver@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.4.3.tgz#0f3ae367e784bb0f37df4088d3d551913df1ffde" - integrity sha512-79rvaq8pvKVUtuM9XBjQApb04kOVkl3TFRX+zTt1wlmL+wqpt85ocWCdqiENU/3zIzg2Me21eClUcnE7F1kL2w== +geckodriver@^4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.4.4.tgz#0aad02533e8cf127573f4d86f1cc5450c913f095" + integrity sha512-0zaw19tcmWeluqx7+Y559JGBtidu1D0Lb8ElYKiNEQu8r3sCfrLUf5V10xypl8u29ZLbgRV7WflxCJVTCkCMFA== dependencies: "@wdio/logger" "^9.0.0" "@zip.js/zip.js" "^2.7.48"