diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 62ca848819d1c..cd0c62dd4c5e6 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -91,6 +91,9 @@ disabled: - x-pack/test_serverless/api_integration/test_suites/security/config.feature_flags.ts - x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts + # Failing: See https://github.com/elastic/kibana/issues/174020 + - x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts + defaultQueue: 'n2-4-spot' enabled: - test/accessibility/config.ts @@ -185,7 +188,6 @@ enabled: - x-pack/test/api_integration/config_security_trial.ts - x-pack/test/api_integration/apis/aiops/config.ts - x-pack/test/api_integration/apis/asset_manager/config_when_disabled.ts - - x-pack/test/api_integration/apis/asset_manager/config_when_enabled.ts - x-pack/test/api_integration/apis/cases/config.ts - x-pack/test/api_integration/apis/cloud_security_posture/config.ts - x-pack/test/api_integration/apis/console/config.ts diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index 64ebe01e9227b..ccef23374d91b 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -88,7 +88,7 @@ steps: - exit_status: -1 agents: queue: n2-2 - timeout_in_minutes: 30 + timeout_in_minutes: 60 if: "build.env('RELEASE_BUILD') == null || build.env('RELEASE_BUILD') == '' || build.env('RELEASE_BUILD') == 'false'" retry: automatic: diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 6011d1d78a696..03019a107df9e 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -57,198 +57,6 @@ steps: - exit_status: '*' limit: 1 - - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh - label: 'Serverless Entity Analytics - Security Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 2 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh - label: 'Serverless Explore - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 4 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh - label: 'Serverless Investigations - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 8 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_rule_management.sh - label: 'Serverless Rule Management - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 8 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_rule_management_prebuilt_rules.sh - label: 'Serverless Rule Management - Prebuilt Rules - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 4 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_detection_engine.sh - label: 'Serverless Detection Engine - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 6 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_detection_engine_exceptions.sh - label: 'Serverless Detection Engine - Exceptions - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 6 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_ai_assistant.sh - label: 'Serverless AI Assistant - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 1 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_entity_analytics.sh - label: 'Entity Analytics - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 2 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_explore.sh - label: 'Explore - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 4 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_rule_management.sh - label: 'Rule Management - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 8 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_rule_management_prebuilt_rules.sh - label: 'Rule Management - Prebuilt Rules - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 6 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_detection_engine.sh - label: 'Detection Engine - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 8 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_detection_engine_exceptions.sh - label: 'Detection Engine - Exceptions - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 6 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_ai_assistant.sh - label: 'AI Assistant - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 1 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_solution_investigations.sh - label: 'Investigations - Security Solution Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 8 - retry: - automatic: - - exit_status: '*' - limit: 1 - - command: .buildkite/scripts/steps/functional/threat_intelligence.sh label: 'Threat Intelligence Cypress Tests' agents: diff --git a/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml b/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml new file mode 100644 index 0000000000000..3de3ece499a6e --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml @@ -0,0 +1,24 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_serverless_ai_assistant.sh + label: 'Serverless AI Assistant - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 1 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_ai_assistant.sh + label: 'AI Assistant - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 1 + retry: + automatic: + - exit_status: '*' + limit: 1 diff --git a/.buildkite/pipelines/pull_request/cypress_burn.yml b/.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml similarity index 100% rename from .buildkite/pipelines/pull_request/cypress_burn.yml rename to .buildkite/pipelines/pull_request/security_solution/cypress_burn.yml diff --git a/.buildkite/pipelines/pull_request/defend_workflows.yml b/.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml similarity index 100% rename from .buildkite/pipelines/pull_request/defend_workflows.yml rename to .buildkite/pipelines/pull_request/security_solution/defend_workflows.yml diff --git a/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml b/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml new file mode 100644 index 0000000000000..6196e2e251522 --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/detection_engine.yml @@ -0,0 +1,48 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_serverless_detection_engine.sh + label: 'Serverless Detection Engine - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 6 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_detection_engine_exceptions.sh + label: 'Serverless Detection Engine - Exceptions - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 6 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_detection_engine.sh + label: 'Detection Engine - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 8 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_detection_engine_exceptions.sh + label: 'Detection Engine - Exceptions - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 6 + retry: + automatic: + - exit_status: '*' + limit: 1 diff --git a/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml b/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml new file mode 100644 index 0000000000000..482107467884c --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml @@ -0,0 +1,24 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh + label: 'Serverless Entity Analytics - Security Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_entity_analytics.sh + label: 'Entity Analytics - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 diff --git a/.buildkite/pipelines/pull_request/security_solution/explore.yml b/.buildkite/pipelines/pull_request/security_solution/explore.yml new file mode 100644 index 0000000000000..5acd56ebe7f06 --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/explore.yml @@ -0,0 +1,24 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_solution_explore.sh + label: 'Explore - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 4 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh + label: 'Serverless Explore - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 4 + retry: + automatic: + - exit_status: '*' + limit: 1 \ No newline at end of file diff --git a/.buildkite/pipelines/pull_request/security_solution/investigations.yml b/.buildkite/pipelines/pull_request/security_solution/investigations.yml new file mode 100644 index 0000000000000..0390f5dfec8e7 --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/investigations.yml @@ -0,0 +1,24 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_solution_investigations.sh + label: 'Investigations - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 8 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh + label: 'Serverless Investigations - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 8 + retry: + automatic: + - exit_status: '*' + limit: 1 \ No newline at end of file diff --git a/.buildkite/pipelines/pull_request/security_solution/rule_management.yml b/.buildkite/pipelines/pull_request/security_solution/rule_management.yml new file mode 100644 index 0000000000000..e36f77ec60988 --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/rule_management.yml @@ -0,0 +1,48 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_serverless_rule_management.sh + label: 'Serverless Rule Management - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 8 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_rule_management_prebuilt_rules.sh + label: 'Serverless Rule Management - Prebuilt Rules - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 4 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_rule_management.sh + label: 'Rule Management - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 8 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_solution_rule_management_prebuilt_rules.sh + label: 'Rule Management - Prebuilt Rules - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 6 + retry: + automatic: + - exit_status: '*' + limit: 1 \ No newline at end of file diff --git a/.buildkite/pull_requests.json b/.buildkite/pull_requests.json index 02686fe378b4f..0c6714d1c75b7 100644 --- a/.buildkite/pull_requests.json +++ b/.buildkite/pull_requests.json @@ -8,7 +8,6 @@ "enabled": true, "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["barlowm", "renovate[bot]"], "set_commit_status": true, "commit_status_context": "kibana-ci", "build_on_commit": true, @@ -16,17 +15,13 @@ "build_drafts": false, "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^\\/ci$", "always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^\\/ci$", - "skip_ci_labels": ["skip-ci", "jenkins-ci"], + "skip_ci_labels": ["skip-ci"], "skip_target_branches": ["6.8", "7.11", "7.12"], "enable_skippable_commits": true, "skip_ci_on_only_changed": [ "^dev_docs/", "^docs/", "^rfcs/", - "^.ci/.+\\.yml$", - "^.ci/es-snapshots/", - "^.ci/pipeline-library/", - "^.ci/Jenkinsfile_[^/]+$", "^\\.github/", "\\.md$", "\\.mdx$", @@ -59,7 +54,6 @@ "enabled": true, "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["barlowm", "renovate[bot]"], "set_commit_status": true, "commit_status_context": "kibana-ci-test", "build_on_commit": true, @@ -73,10 +67,6 @@ "^dev_docs/", "^docs/", "^rfcs/", - "^.ci/.+\\.yml$", - "^.ci/es-snapshots/", - "^.ci/pipeline-library/", - "^.ci/Jenkinsfile_[^/]+$", "^\\.github/", "\\.md$", "\\.mdx$", diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 0a305f49a811f..ca0a83616492e 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -176,7 +176,9 @@ const uploadPipeline = (pipelineContent: string | object) => { GITHUB_PR_LABELS.includes('ci:cypress-burn') || GITHUB_PR_LABELS.includes('ci:all-cypress-suites') ) { - pipeline.push(getPipeline('.buildkite/pipelines/pull_request/cypress_burn.yml')); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/cypress_burn.yml') + ); } if ( @@ -189,7 +191,78 @@ const uploadPipeline = (pipelineContent: string | object) => { ])) || GITHUB_PR_LABELS.includes('ci:all-cypress-suites') ) { - pipeline.push(getPipeline('.buildkite/pipelines/pull_request/defend_workflows.yml')); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/defend_workflows.yml') + ); + } + + if ( + (await doAnyChangesMatch([ + /^package.json/, + /^packages\/kbn-securitysolution-.*/, + /^x-pack\/plugins\/alerting/, + /^x-pack\/plugins\/data_views\/common/, + /^x-pack\/plugins\/lists/, + /^x-pack\/plugins\/rule_registry\/common/, + /^x-pack\/plugins\/security_solution/, + /^x-pack\/plugins\/security_solution_ess/, + /^x-pack\/plugins\/security_solution_serverless/, + /^x-pack\/plugins\/task_manager/, + /^x-pack\/plugins\/timelines/, + /^x-pack\/plugins\/triggers_actions_ui\/public\/application\/sections\/action_connector_form/, + /^x-pack\/plugins\/triggers_actions_ui\/public\/application\/context\/actions_connectors_context\.tsx/, + /^x-pack\/plugins\/triggers_actions_ui\/server\/connector_types\/openai/, + /^x-pack\/plugins\/triggers_actions_ui\/server\/connector_types\/bedrock/, + /^x-pack\/plugins\/usage_collection\/public/, + /^x-pack\/plugins\/elastic_assistant/, + /^x-pack\/packages\/security-solution/, + /^x-pack\/packages\/kbn-elastic-assistant/, + /^x-pack\/packages\/kbn-elastic-assistant-common/, + /^x-pack\/test\/security_solution_cypress/, + ])) || + GITHUB_PR_LABELS.includes('ci:all-cypress-suites') + ) { + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml') + ); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/detection_engine.yml') + ); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/entity_analytics.yml') + ); + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/security_solution/explore.yml')); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/rule_management.yml') + ); + } + + if ( + (await doAnyChangesMatch([ + /^package.json/, + /^packages\/kbn-securitysolution-.*/, + /^x-pack\/plugins\/alerting/, + /^x-pack\/plugins\/data_views\/common/, + /^x-pack\/plugins\/lists/, + /^x-pack\/plugins\/rule_registry\/common/, + /^x-pack\/plugins\/security_solution/, + /^x-pack\/plugins\/security_solution_ess/, + /^x-pack\/plugins\/security_solution_serverless/, + /^x-pack\/plugins\/task_manager/, + /^x-pack\/plugins\/timelines/, + /^x-pack\/plugins\/triggers_actions_ui\/public\/application\/sections\/alerts_table/, + /^x-pack\/plugins\/usage_collection\/public/, + /^x-pack\/plugins\/elastic_assistant/, + /^x-pack\/packages\/security-solution/, + /^x-pack\/packages\/kbn-elastic-assistant/, + /^x-pack\/packages\/kbn-elastic-assistant-common/, + /^x-pack\/test\/security_solution_cypress/, + ])) || + GITHUB_PR_LABELS.includes('ci:all-cypress-suites') + ) { + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/investigations.yml') + ); } pipeline.push(getPipeline('.buildkite/pipelines/pull_request/post_build.yml')); diff --git a/.buildkite/scripts/steps/checks/yarn_deduplicate.sh b/.buildkite/scripts/steps/checks/yarn_deduplicate.sh index ce62b2312c034..22bf115aad9c0 100755 --- a/.buildkite/scripts/steps/checks/yarn_deduplicate.sh +++ b/.buildkite/scripts/steps/checks/yarn_deduplicate.sh @@ -7,4 +7,4 @@ source .buildkite/scripts/common/util.sh echo "--- Check yarn.lock for duplicated modules" node scripts/yarn_deduplicate -check_for_changed_files 'node scripts/yarn_deduplicate && yarn kbn bootstrap' false +check_for_changed_files 'node scripts/yarn_deduplicate' false 'TO FIX: Run node '"'"'scripts/yarn_deduplicate && yarn kbn bootstrap'"'"' locally, or add an exception to src/dev/yarn_deduplicate/index.ts and then commit the changes and push to your branch' diff --git a/.ci/Dockerfile b/.ci/Dockerfile deleted file mode 100644 index 109b9ffab3cc5..0000000000000 --- a/.ci/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -# NOTE: This Dockerfile is ONLY used to run certain tasks in CI. It is not used to run Kibana or as a distributable. -# If you're looking for the Kibana Docker image distributable, please see: src/dev/build/tasks/os_packages/docker_generator/templates/dockerfile.template.ts - -ARG NODE_VERSION=18.18.2 - -FROM node:${NODE_VERSION} AS base - -RUN apt-get update && \ - apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \ - libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \ - libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \ - libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \ - libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget openjdk-11-jre && \ - rm -rf /var/lib/apt/lists/* - -RUN curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ - && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ - && apt-get update \ - && apt-get install -y rsync jq bsdtar google-chrome-stable \ - --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -RUN LATEST_VAULT_RELEASE=$(curl -s https://api.github.com/repos/hashicorp/vault/tags | jq --raw-output .[0].name[1:]) \ - && curl -L https://releases.hashicorp.com/vault/${LATEST_VAULT_RELEASE}/vault_${LATEST_VAULT_RELEASE}_linux_amd64.zip -o vault.zip \ - && unzip vault.zip \ - && rm vault.zip \ - && chmod +x vault \ - && mv vault /usr/local/bin/vault - -RUN groupadd -r kibana && useradd -r -g kibana kibana && mkdir /home/kibana && chown kibana:kibana /home/kibana - -COPY ./bash_standard_lib.sh /usr/local/bin/bash_standard_lib.sh -RUN chmod +x /usr/local/bin/bash_standard_lib.sh - -COPY ./runbld /usr/local/bin/runbld -RUN chmod +x /usr/local/bin/runbld - -USER kibana diff --git a/.ci/Jenkinsfile_baseline_capture b/.ci/Jenkinsfile_baseline_capture deleted file mode 100644 index ff3803cd903cd..0000000000000 --- a/.ci/Jenkinsfile_baseline_capture +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/groovy - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -kibanaPipeline(timeoutMinutes: 210) { - githubCommitStatus.trackBuild(params.commit, 'kibana-ci-baseline') { - ciStats.trackBuild { - catchErrors { - slackNotifications.onFailure( - title: "*<${env.BUILD_URL}|[${params.branch}] Baseline Capture Failure>*", - message: "[${params.branch}/${params.commit}] Baseline Capture Failure", - ) { - retryable.enable(2) - - catchErrors { - workers.ci( - name: 'baseline-worker', - size: 'xl', - ramDisk: true, - runErrorReporter: false, - bootstrapped: false - ) { - withGcpServiceAccount.fromVaultSecret('secret/ci/elastic-kibana/ci-artifacts-key', 'value') { - withEnv([ - 'DISABLE_BOOTSTRAP_VALIDATION=true', - ]) { - kibanaPipeline.doSetup() - } - } - - kibanaPipeline.withCiTaskQueue([parallel: 2]) { - catchErrors { - tasks([ - kibanaPipeline.functionalTestProcess('xpack-baseline', './test/scripts/jenkins_xpack_baseline.sh'), - kibanaPipeline.scriptTask('Check Public API Docs', 'test/scripts/checks/baseline_plugin_public_api_docs.sh'), - ]) - } - } - } - } - } - } - } - - kibanaPipeline.sendMail() - } -} diff --git a/.ci/Jenkinsfile_baseline_trigger b/.ci/Jenkinsfile_baseline_trigger deleted file mode 100644 index fd1c267fb3301..0000000000000 --- a/.ci/Jenkinsfile_baseline_trigger +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/groovy - -return - -def MAXIMUM_COMMITS_TO_CHECK = 10 -def MAXIMUM_COMMITS_TO_BUILD = 5 - -if (!params.branches_yaml) { - error "'branches_yaml' parameter must be specified" -} - -def additionalBranches = [] - -def branches = readYaml(text: params.branches_yaml) + additionalBranches - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -withGithubCredentials { - branches.each { branch -> - if (branch == '6.8') { - // skip 6.8, it is tracked but we don't need snapshots for it and haven't backported - // the baseline capture scripts to it. - return; - } - - stage(branch) { - def commits = getCommits(branch, MAXIMUM_COMMITS_TO_CHECK, MAXIMUM_COMMITS_TO_BUILD) - - commits.take(MAXIMUM_COMMITS_TO_BUILD).each { commit -> - catchErrors { - githubCommitStatus.create(commit, 'pending', 'Baseline started.', 'kibana-ci-baseline') - - build( - propagate: false, - wait: false, - job: 'elastic+kibana+baseline-capture', - parameters: [ - string(name: 'branch_specifier', value: branch), - string(name: 'commit', value: commit), - ] - ) - } - } - } - } -} - -def getCommits(String branch, maximumCommitsToCheck, maximumCommitsToBuild) { - print "Getting latest commits for ${branch}..." - def commits = githubApi.get("repos/elastic/kibana/commits?sha=${branch}").take(maximumCommitsToCheck).collect { it.sha } - def commitsToBuild = [] - - for (commit in commits) { - print "Getting statuses for ${commit}" - def status = githubApi.get("repos/elastic/kibana/statuses/${commit}").find { it.context == 'kibana-ci-baseline' } - print "Commit '${commit}' already built? ${status ? 'Yes' : 'No'}" - - if (!status) { - commitsToBuild << commit - } else { - // Stop at the first commit we find that's already been triggered - break - } - - if (commitsToBuild.size() >= maximumCommitsToBuild) { - break - } - } - - return commitsToBuild.reverse() // We want the builds to trigger oldest-to-newest -} diff --git a/.ci/Jenkinsfile_flaky b/.ci/Jenkinsfile_flaky deleted file mode 100644 index 370643789c2cd..0000000000000 --- a/.ci/Jenkinsfile_flaky +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/groovy - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -def TASK_PARAM = params.TASK ?: params.CI_GROUP -// Looks like 'oss:ciGroup:1', 'oss:firefoxSmoke' -def JOB_PARTS = TASK_PARAM.split(':') -def IS_XPACK = JOB_PARTS[0] == 'xpack' -def JOB = JOB_PARTS.size() > 1 ? JOB_PARTS[1] : JOB_PARTS[0] -def CI_GROUP = JOB_PARTS.size() > 2 ? JOB_PARTS[2] : '' -def EXECUTIONS = params.NUMBER_EXECUTIONS.toInteger() -def AGENT_COUNT = getAgentCount(EXECUTIONS) -def NEED_BUILD = JOB != 'jestIntegration' && JOB != 'apiIntegration' - -currentBuild.displayName += trunc(" ${params.GITHUB_OWNER}:${params.branch_specifier}", 24) -currentBuild.description = "${params.CI_GROUP}
Agents: ${AGENT_COUNT}
Executions: ${params.NUMBER_EXECUTIONS}" - -kibanaPipeline(timeoutMinutes: 180) { - def agents = [:] - def workerFailures = [] - - def worker = getWorkerFromParams(IS_XPACK, JOB, CI_GROUP) - - for(def agentNumber = 1; agentNumber <= AGENT_COUNT; agentNumber++) { - def agentExecutions = floor(EXECUTIONS/AGENT_COUNT) + (agentNumber <= EXECUTIONS%AGENT_COUNT ? 1 : 0) - - agents["agent-${agentNumber}"] = { - agentProcess( - agentNumber: agentNumber, - agentExecutions: agentExecutions, - worker: worker, - workerFailures: workerFailures, - needBuild: NEED_BUILD, - isXpack: IS_XPACK, - ciGroup: CI_GROUP - ) - } - } - - parallel(agents) - - currentBuild.description += ", Failures: ${workerFailures.size()}" - - if (workerFailures.size() > 0) { - print "There were ${workerFailures.size()} test suite failures." - print "The executions that failed were:" - print workerFailures.join("\n") - print "Please check 'Test Result' and 'Pipeline Steps' pages for more info" - } -} - -def agentProcess(Map params = [:]) { - def config = [ - agentNumber: 1, - agentExecutions: 0, - worker: {}, - workerFailures: [], - needBuild: false, - isXpack: false, - ciGroup: null, - ] + params - - catchErrors { - print "Agent ${config.agentNumber} - ${config.agentExecutions} executions" - - withEnv([ - 'IGNORE_SHIP_CI_STATS_ERROR=true', - ]) { - kibanaPipeline.withTasks([ - parallel: 20, - ]) { - task { - if (config.needBuild) { - kibanaPipeline.buildKibana() - } - - for(def i = 0; i < config.agentExecutions; i++) { - def taskNumber = i - task({ - withEnv([ - "REMOVE_KIBANA_INSTALL_DIR=1", - ]) { - catchErrors { - try { - config.worker() - } catch (ex) { - config.workerFailures << "agent-${config.agentNumber}-${taskNumber}" - throw ex - } - } - } - }) - } - } - } - } - } -} - -def getWorkerFromParams(isXpack, job, ciGroup) { - if (!isXpack) { - if (job == 'accessibility') { - return kibanaPipeline.functionalTestProcess('kibana-accessibility', './test/scripts/jenkins_accessibility.sh') - } else if (job == 'firefoxSmoke') { - return kibanaPipeline.functionalTestProcess('firefoxSmoke', './test/scripts/jenkins_firefox_smoke.sh') - } else if (job == 'visualRegression') { - return kibanaPipeline.functionalTestProcess('visualRegression', './test/scripts/jenkins_visual_regression.sh') - } else if (job == 'jestIntegration') { - return kibanaPipeline.scriptTaskDocker('Jest Integration Tests', 'test/scripts/test/jest_integration.sh') - } else if (job == 'apiIntegration') { - return kibanaPipeline.scriptTask('API Integration Tests', 'test/scripts/test/api_integration.sh') - } else if (job == 'pluginFunctional') { - return kibanaPipeline.functionalTestProcess('oss-pluginFunctional', './test/scripts/jenkins_plugin_functional.sh') - } else { - return kibanaPipeline.ossCiGroupProcess(ciGroup) - } - } - - if (job == 'accessibility') { - return kibanaPipeline.functionalTestProcess('xpack-accessibility', './test/scripts/jenkins_xpack_accessibility.sh') - } else if (job == 'firefoxSmoke') { - return kibanaPipeline.functionalTestProcess('xpack-firefoxSmoke', './test/scripts/jenkins_xpack_firefox_smoke.sh') - } else if (job == 'visualRegression') { - return kibanaPipeline.functionalTestProcess('xpack-visualRegression', './test/scripts/jenkins_xpack_visual_regression.sh') - } else { - return kibanaPipeline.xpackCiGroupProcess(ciGroup) - } -} - -def getAgentCount(executions) { - // Increase agent count every 20 worker processess, up to 3 agents maximum - return Math.min(3, 1 + floor(executions/20)) -} - -def trunc(str, length) { - if (str.size() >= length) { - return str.take(length) + "..." - } - - return str; -} - -// All of the real rounding/truncating methods are sandboxed -def floor(num) { - return num - .toString() - .split('\\.')[0] - .toInteger() -} diff --git a/.ci/Jenkinsfile_security_cypress b/.ci/Jenkinsfile_security_cypress deleted file mode 100644 index d48b9965919dc..0000000000000 --- a/.ci/Jenkinsfile_security_cypress +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/groovy - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -kibanaPipeline(timeoutMinutes: 180) { - slackNotifications.onFailure( - disabled: !params.NOTIFY_ON_FAILURE, - channel: '#security-solution-slack-testing' - ) { - catchError { - withEnv([ - 'CI_PARALLEL_PROCESS_NUMBER=1', - 'IGNORE_SHIP_CI_STATS_ERROR=true', - ]) { - def job = 'xpack-securityCypress' - - workers.ci(name: job, size: 'l', ramDisk: true) { - kibanaPipeline.bash('test/scripts/jenkins_build_kibana.sh', 'Build Distributable') - kibanaPipeline.functionalTestProcess(job, 'test/scripts/jenkins_security_solution_cypress_chrome.sh')() - // Temporarily disabled to figure out test flake - // kibanaPipeline.functionalTestProcess(job, 'test/scripts/jenkins_security_solution_cypress_firefox.sh')() - } - } - } - } - - if (params.NOTIFY_ON_FAILURE) { - kibanaPipeline.sendMail(to: 'siem_dev_team@elastic.co') - } -} diff --git a/.ci/build_docker.sh b/.ci/build_docker.sh deleted file mode 100755 index 07013f13cdae5..0000000000000 --- a/.ci/build_docker.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -cd "$(dirname "${0}")" - -cp /usr/local/bin/runbld ./ -cp /usr/local/bin/bash_standard_lib.sh ./ - -if which docker >/dev/null; then - docker build -t kibana-ci -f ./Dockerfile . -else - echo "Docker binary is not available. Skipping the docker build this time." -fi diff --git a/.ci/ci_groups.yml b/.ci/ci_groups.yml deleted file mode 100644 index 508f118ce9dd7..0000000000000 --- a/.ci/ci_groups.yml +++ /dev/null @@ -1,46 +0,0 @@ -root: - - ciGroup1 - - ciGroup2 - - ciGroup3 - - ciGroup4 - - ciGroup5 - - ciGroup6 - - ciGroup7 - - ciGroup8 - - ciGroup9 - - ciGroup10 - - ciGroup11 - - ciGroup12 - -xpack: - - ciGroup1 - - ciGroup2 - - ciGroup3 - - ciGroup4 - - ciGroup5 - - ciGroup6 - - ciGroup7 - - ciGroup8 - - ciGroup9 - - ciGroup10 - - ciGroup11 - - ciGroup12 - - ciGroup13 - - ciGroup14 - - ciGroup15 - - ciGroup16 - - ciGroup17 - - ciGroup18 - - ciGroup19 - - ciGroup20 - - ciGroup21 - - ciGroup22 - - ciGroup23 - - ciGroup24 - - ciGroup25 - - ciGroup26 - - ciGroup27 - - ciGroup28 - - ciGroup29 - - ciGroup30 - - ciGroup31 diff --git a/.ci/es-snapshots/Jenkinsfile_build_es b/.ci/es-snapshots/Jenkinsfile_build_es deleted file mode 100644 index 7ace3b441144c..0000000000000 --- a/.ci/es-snapshots/Jenkinsfile_build_es +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/groovy - -// This job effectively has two SCM configurations: -// one for kibana, used to check out this Jenkinsfile (which means it's the job's main SCM configuration), as well as kick-off the downstream verification job -// one for elasticsearch, used to check out the elasticsearch source before building it - -// There are two parameters that drive which branch is checked out for each of these, but they will typically be the same -// 'branch_specifier' is for kibana / the job itself -// ES_BRANCH is for elasticsearch - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -def ES_BRANCH = params.ES_BRANCH - -if (!ES_BRANCH) { - error "Parameter 'ES_BRANCH' must be specified." -} - -currentBuild.displayName += " - ${ES_BRANCH}" -currentBuild.description = "ES: ${ES_BRANCH}
Kibana: ${params.branch_specifier}" - -def PROMOTE_WITHOUT_VERIFY = !!params.PROMOTE_WITHOUT_VERIFICATION - -timeout(time: 120, unit: 'MINUTES') { - timestamps { - ansiColor('xterm') { - slackNotifications.onFailure { - node(workers.label('l')) { - catchErrors { - def VERSION - def SNAPSHOT_ID - def DESTINATION - - def scmVars = checkoutEs(ES_BRANCH) - def GIT_COMMIT = scmVars.GIT_COMMIT - def GIT_COMMIT_SHORT = sh(script: "git rev-parse --short ${GIT_COMMIT}", returnStdout: true).trim() - - buildArchives('to-archive') - - dir('to-archive') { - def now = new Date() - def date = now.format("yyyyMMdd-HHmmss") - - def filesRaw = sh(script: "ls -1", returnStdout: true).trim() - def files = filesRaw - .split("\n") - .collect { filename -> - // Filename examples - // elasticsearch-oss-8.0.0-SNAPSHOT-linux-x86_64.tar.gz - // elasticsearch-8.0.0-SNAPSHOT-linux-x86_64.tar.gz - def parts = filename.replace("elasticsearch-oss", "oss").split("-") - - VERSION = VERSION ?: parts[1] - SNAPSHOT_ID = SNAPSHOT_ID ?: "${date}_${GIT_COMMIT_SHORT}" - DESTINATION = DESTINATION ?: "${VERSION}/archives/${SNAPSHOT_ID}" - - return [ - filename: filename, - checksum: filename + '.sha512', - url: "https://storage.googleapis.com/kibana-ci-es-snapshots-daily/${DESTINATION}/${filename}".toString(), - version: parts[1], - platform: parts[3], - architecture: parts[4].split('\\.')[0], - license: parts[0] == 'oss' ? 'oss' : 'default', - ] - } - - sh 'find * -exec bash -c "shasum -a 512 {} > {}.sha512" \\;' - - def manifest = [ - bucket: "kibana-ci-es-snapshots-daily/${DESTINATION}".toString(), - branch: ES_BRANCH, - sha: GIT_COMMIT, - sha_short: GIT_COMMIT_SHORT, - version: VERSION, - generated: now.format("yyyy-MM-dd'T'HH:mm:ss'Z'", TimeZone.getTimeZone("UTC")), - archives: files, - ] - def manifestJson = toJSON(manifest).toString() - writeFile file: 'manifest.json', text: manifestJson - - upload(DESTINATION, '*.*') - - sh "cp manifest.json manifest-latest.json" - upload(VERSION, 'manifest-latest.json') - } - - if (PROMOTE_WITHOUT_VERIFY) { - esSnapshots.promote(VERSION, SNAPSHOT_ID) - - emailext( - to: 'build-kibana@elastic.co', - subject: "ES snapshot promoted without verification: ${params.ES_BRANCH}", - body: '${SCRIPT,template="groovy-html.template"}', - mimeType: 'text/html', - ) - } else { - build( - propagate: false, - wait: false, - job: 'elasticsearch+snapshots+verify', - parameters: [ - string(name: 'branch_specifier', value: branch_specifier), - string(name: 'SNAPSHOT_VERSION', value: VERSION), - string(name: 'SNAPSHOT_ID', value: SNAPSHOT_ID), - ] - ) - } - } - - kibanaPipeline.sendMail() - } - } - } - } -} - -def checkoutEs(branch) { - retryWithDelay(8, 15) { - return checkout([ - $class: 'GitSCM', - branches: [[name: branch]], - doGenerateSubmoduleConfigurations: false, - extensions: [], - submoduleCfg: [], - userRemoteConfigs: [[ - credentialsId: 'f6c7695a-671e-4f4f-a331-acdce44ff9ba', - url: 'git@github.com:elastic/elasticsearch', - ]], - ]) - } -} - -def upload(destination, pattern) { - return googleStorageUpload( - credentialsId: 'kibana-ci-gcs-plugin', - bucket: "gs://kibana-ci-es-snapshots-daily/${destination}", - pattern: pattern, - sharedPublicly: false, - showInline: false, - ) -} - -def buildArchives(destination) { - def props = readProperties file: '.ci/java-versions.properties' - withEnv([ - // Select the correct JDK for this branch - "PATH=/var/lib/jenkins/.java/${props.ES_BUILD_JAVA}/bin:${env.PATH}", - - // These Jenkins env vars trigger some automation in the elasticsearch repo that we don't want - "BUILD_NUMBER=", - "JENKINS_URL=", - "BUILD_URL=", - "JOB_NAME=", - "NODE_NAME=", - ]) { - sh """ - ./gradlew -Dbuild.docker=true assemble --parallel - mkdir -p ${destination} - find distribution -type f \\( -name 'elasticsearch-*-*-*-*.tar.gz' -o -name 'elasticsearch-*-*-*-*.zip' \\) -not -path *no-jdk* -not -path *build-context* -exec cp {} ${destination} \\; - docker images "docker.elastic.co/elasticsearch/elasticsearch" --format "{{.Tag}}" | xargs -n1 bash -c 'docker save docker.elastic.co/elasticsearch/elasticsearch:\${0} | gzip > ${destination}/elasticsearch-\${0}-docker-image.tar.gz' - """ - } -} diff --git a/.ci/es-snapshots/Jenkinsfile_trigger_build_es b/.ci/es-snapshots/Jenkinsfile_trigger_build_es deleted file mode 100644 index d4e59ca3e411b..0000000000000 --- a/.ci/es-snapshots/Jenkinsfile_trigger_build_es +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/groovy - -// Only run this pipeline for 6.8. Higher branches are now running in Buildkite. -def branches = ['6.8'] - -branches.each { branch -> - build( - propagate: false, - wait: false, - job: 'elasticsearch+snapshots+build', - parameters: [ - string(name: 'branch_specifier', value: branch), - string(name: 'ES_BRANCH', value: branch), - ] - ) -} diff --git a/.ci/es-snapshots/Jenkinsfile_verify_es b/.ci/es-snapshots/Jenkinsfile_verify_es deleted file mode 100644 index dc3a3cde7d658..0000000000000 --- a/.ci/es-snapshots/Jenkinsfile_verify_es +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/groovy - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -def SNAPSHOT_VERSION = params.SNAPSHOT_VERSION -def SNAPSHOT_ID = params.SNAPSHOT_ID - -if (!SNAPSHOT_VERSION) { - error "Parameter SNAPSHOT_VERSION must be specified" -} - -if (!SNAPSHOT_ID) { - error "Parameter SNAPSHOT_ID must be specified" -} - -currentBuild.displayName += " - ${SNAPSHOT_VERSION}" -currentBuild.description = "ES: ${SNAPSHOT_VERSION}
Kibana: ${params.branch_specifier}" - -def SNAPSHOT_MANIFEST = "https://storage.googleapis.com/kibana-ci-es-snapshots-daily/${SNAPSHOT_VERSION}/archives/${SNAPSHOT_ID}/manifest.json" - -kibanaPipeline(timeoutMinutes: 210) { - catchErrors { - slackNotifications.onFailure( - title: "*<${env.BUILD_URL}|[${SNAPSHOT_VERSION}] ES Snapshot Verification Failure>*", - message: "[${SNAPSHOT_VERSION}] ES Snapshot Verification Failure", - ) { - retryable.enable(2) - withEnv([ - "ES_SNAPSHOT_MANIFEST=${SNAPSHOT_MANIFEST}", - 'IGNORE_SHIP_CI_STATS_ERROR=true', - ]) { - kibanaPipeline.withTasks { - tasks([ - kibanaPipeline.scriptTaskDocker('Jest Integration Tests', 'test/scripts/test/jest_integration.sh'), - kibanaPipeline.scriptTask('API Integration Tests', 'test/scripts/test/api_integration.sh'), - ]) - - task { - kibanaPipeline.buildKibana(16) - tasks.ossCiGroups() - tasks.xpackCiGroups() - tasks.xpackCiGroupDocker() - } - } - } - - promoteSnapshot(SNAPSHOT_VERSION, SNAPSHOT_ID) - } - } - - kibanaPipeline.sendMail() -} - -def promoteSnapshot(snapshotVersion, snapshotId) { - if (buildUtils.getBuildStatus() == 'SUCCESS') { - node(workers.label('s')) { - esSnapshots.promote(snapshotVersion, snapshotId) - } - } -} diff --git a/.ci/packer_cache.sh b/.ci/packer_cache.sh deleted file mode 100755 index fc5a52f1ac991..0000000000000 --- a/.ci/packer_cache.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ "$(which docker)" != "" && "$(command uname -m)" != "aarch64" ]]; then - # cache image used by kibana-load-testing project - docker pull "maven:3.6.3-openjdk-8-slim" -fi - -./.ci/packer_cache_for_branch.sh main -./.ci/packer_cache_for_branch.sh 7.16 diff --git a/.ci/packer_cache_for_branch.sh b/.ci/packer_cache_for_branch.sh deleted file mode 100755 index 78548f4667a9f..0000000000000 --- a/.ci/packer_cache_for_branch.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash - -set -e - -branch="$1" -checkoutDir="$(pwd)" - -function cleanup() -{ - if [[ "$branch" != "main" ]]; then - rm --preserve-root -rf "$checkoutDir" - fi - - exit 0 -} - -trap 'cleanup' 0 - -if [[ "$branch" != "main" ]]; then - checkoutDir="/tmp/kibana-$branch" - git clone https://github.com/elastic/kibana.git --branch "$branch" --depth 1 "$checkoutDir" - cd "$checkoutDir" -fi - -source src/dev/ci_setup/setup.sh; - -# download es snapshots -node scripts/es snapshot --download-only; - -# download reporting browsers -(cd "x-pack" && node ../node_modules/.bin/gulp downloadChromium); - -# cache the chromedriver archive -chromedriverDistVersion="$(node -e "console.log(require('chromedriver').version)")" -chromedriverPkgVersion="$(node -e "console.log(require('./package.json').devDependencies.chromedriver)")" -if [ -z "$chromedriverDistVersion" ] || [ -z "$chromedriverPkgVersion" ]; then - echo "UNABLE TO DETERMINE CHROMEDRIVER VERSIONS" - exit 1 -fi -mkdir -p .chromedriver -curl "https://chromedriver.storage.googleapis.com/$chromedriverDistVersion/chromedriver_linux64.zip" > .chromedriver/chromedriver.zip -echo "$chromedriverPkgVersion" > .chromedriver/pkgVersion - -# cache the geckodriver archive -geckodriverPkgVersion="$(node -e "console.log(require('./package.json').devDependencies.geckodriver)")" -if [ -z "$geckodriverPkgVersion" ]; then - echo "UNABLE TO DETERMINE geckodriver VERSIONS" - exit 1 -fi -mkdir -p ".geckodriver" -cp "node_modules/geckodriver/geckodriver.tar.gz" .geckodriver/geckodriver.tar.gz -echo "$geckodriverPkgVersion" > .geckodriver/pkgVersion - -echo "Creating bootstrap_cache archive" - -# archive cacheable directories -mkdir -p "$HOME/.kibana/bootstrap_cache" -tar -cf "$HOME/.kibana/bootstrap_cache/$branch.tar" \ - .chromium \ - .es \ - .chromedriver \ - .geckodriver \ - .yarn-local-mirror; - -echo "created $HOME/.kibana/bootstrap_cache/$branch.tar" - -.ci/build_docker.sh - diff --git a/.ci/pipeline-library/README.md b/.ci/pipeline-library/README.md deleted file mode 100644 index 71d7c39e37f4f..0000000000000 --- a/.ci/pipeline-library/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Kibana Jenkins Pipeline Library - -## Running tests - -```bash -cd .ci/pipeline-library -./gradlew test -``` \ No newline at end of file diff --git a/.ci/pipeline-library/build.gradle b/.ci/pipeline-library/build.gradle deleted file mode 100644 index ac5e7a4ed034a..0000000000000 --- a/.ci/pipeline-library/build.gradle +++ /dev/null @@ -1,46 +0,0 @@ -plugins { - id 'groovy' - id 'idea' -} - -group = 'co.elastic.kibana.pipeline' -version = '0.0.1' - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -repositories { - maven { url 'https://repo.jenkins-ci.org/releases/' } - maven { url 'https://repo.maven.apache.org/maven2' } -} - -dependencies { - implementation 'org.codehaus.groovy:groovy-all:2.4.12' - implementation 'org.jenkins-ci.main:jenkins-core:2.23' - implementation 'org.jenkins-ci.plugins.workflow:workflow-step-api:2.19@jar' - testImplementation 'com.lesfurets:jenkins-pipeline-unit:1.4' - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.+' - testImplementation 'org.assertj:assertj-core:3.15+' // Temporary https://github.com/jenkinsci/JenkinsPipelineUnit/issues/209 -} - -sourceSets { - main { - groovy { - srcDirs = ['vars'] - } - } - - test { - groovy { - srcDirs = ['src/test'] - } - } -} - -test { - testLogging { - events 'passed', 'skipped', 'failed' - exceptionFormat = 'full' - } -} diff --git a/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.jar b/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 62d4c053550b9..0000000000000 Binary files a/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.properties b/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index a4f0001d203b2..0000000000000 --- a/.ci/pipeline-library/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/.ci/pipeline-library/gradlew b/.ci/pipeline-library/gradlew deleted file mode 100755 index fbd7c515832da..0000000000000 --- a/.ci/pipeline-library/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/.ci/pipeline-library/gradlew.bat b/.ci/pipeline-library/gradlew.bat deleted file mode 100644 index a9f778a7a964b..0000000000000 --- a/.ci/pipeline-library/gradlew.bat +++ /dev/null @@ -1,104 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/.ci/pipeline-library/src/test/KibanaBasePipelineTest.groovy b/.ci/pipeline-library/src/test/KibanaBasePipelineTest.groovy deleted file mode 100644 index 4112cb3c0e14b..0000000000000 --- a/.ci/pipeline-library/src/test/KibanaBasePipelineTest.groovy +++ /dev/null @@ -1,113 +0,0 @@ -import com.lesfurets.jenkins.unit.* -import org.junit.Before - -class KibanaBasePipelineTest extends BasePipelineTest { - Map env = [:] - Map params = [:] - - public def Mocks = [ - TEST_FAILURE_URL: 'https://localhost/', - TEST_FAILURE_NAME: 'Kibana Pipeline / kibana-xpack-agent / Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/fake/testĀ·ts.Fake test should & pass &', - ] - - @Before - void setUp() { - super.setUp() - - env.BRANCH_NAME = 'master' - env.BUILD_ID = '1' - env.BUILD_DISPLAY_NAME = "#${env.BUILD_ID}" - - env.JENKINS_URL = 'http://jenkins.localhost:8080' - env.BUILD_URL = "${env.JENKINS_URL}/job/elastic+kibana+${env.BRANCH_NAME}/${env.BUILD_ID}/".toString() - - env.JOB_BASE_NAME = "elastic / kibana # ${env.BRANCH_NAME}".toString() - env.JOB_NAME = env.JOB_BASE_NAME - - env.WORKSPACE = 'WS' - - props([ - buildUtils: [ - getBuildStatus: { 'SUCCESS' }, - printStacktrace: { ex -> print ex }, - ], - githubPr: [ - isPr: { false }, - ], - jenkinsApi: [ getFailedSteps: { [] } ], - testUtils: [ getFailures: { [] } ], - ]) - - vars([ - env: env, - params: params, - ]) - - // Some wrappers that can just be mocked to immediately call the closure passed in - [ - 'catchError', - 'catchErrors', - 'timestamps', - 'withGithubCredentials', - ].each { - helper.registerAllowedMethod(it, [Closure.class], null) - } - } - - void props(Map properties) { - properties.each { - binding.setProperty(it.key, it.value) - } - } - - void prop(String propertyName, Object propertyValue) { - binding.setProperty(propertyName, propertyValue) - } - - void vars(Map variables) { - variables.each { - binding.setVariable(it.key, it.value) - } - } - - void var(String variableName, Object variableValue) { - binding.setVariable(variableName, variableValue) - } - - def fnMock(String name) { - return helper.callStack.find { it.methodName == name } - } - - def fnMocks(String name) { - helper.callStack.findAll { it.methodName == name } - } - - void mockFailureBuild() { - props([ - buildUtils: [ - getBuildStatus: { 'FAILURE' }, - printStacktrace: { ex -> print ex }, - ], - jenkinsApi: [ getFailedSteps: { [ - [ - displayName: 'Check out from version control', - logs: 'http://jenkins.localhost:8080', - ], - [ - displayName: 'Execute test task', - logs: 'http://jenkins.localhost:8080', - ], - ] } ], - testUtils: [ - getFailures: { - return [ - [ - url: Mocks.TEST_FAILURE_URL, - fullDisplayName: Mocks.TEST_FAILURE_NAME, - ] - ] - }, - ], - ]) - } -} diff --git a/.ci/pipeline-library/src/test/buildState.groovy b/.ci/pipeline-library/src/test/buildState.groovy deleted file mode 100644 index b748cce29e7f4..0000000000000 --- a/.ci/pipeline-library/src/test/buildState.groovy +++ /dev/null @@ -1,48 +0,0 @@ -import org.junit.* -import static groovy.test.GroovyAssert.* - -class BuildStateTest extends KibanaBasePipelineTest { - def buildState - - @Before - void setUp() { - super.setUp() - - buildState = loadScript("vars/buildState.groovy") - } - - @Test - void 'get() returns existing data'() { - buildState.add('test', 1) - def actual = buildState.get('test') - assertEquals(1, actual) - } - - @Test - void 'get() returns null for missing data'() { - def actual = buildState.get('missing_key') - assertEquals(null, actual) - } - - @Test - void 'add() does not overwrite existing keys'() { - assertTrue(buildState.add('test', 1)) - assertFalse(buildState.add('test', 2)) - - def actual = buildState.get('test') - - assertEquals(1, actual) - } - - @Test - void 'set() overwrites existing keys'() { - assertFalse(buildState.has('test')) - buildState.set('test', 1) - assertTrue(buildState.has('test')) - buildState.set('test', 2) - - def actual = buildState.get('test') - - assertEquals(2, actual) - } -} diff --git a/.ci/pipeline-library/src/test/githubCommitStatus.groovy b/.ci/pipeline-library/src/test/githubCommitStatus.groovy deleted file mode 100644 index c770d5596f9cb..0000000000000 --- a/.ci/pipeline-library/src/test/githubCommitStatus.groovy +++ /dev/null @@ -1,87 +0,0 @@ -import org.junit.* -import static org.mockito.Mockito.*; - -class GithubCommitStatusTest extends KibanaBasePipelineTest { - def githubCommitStatus - def githubApiMock - def buildStateMock - - def EXPECTED_STATUS_URL = 'repos/elastic/kibana/statuses/COMMIT_HASH' - def EXPECTED_CONTEXT = 'kibana-ci' - def EXPECTED_BUILD_URL = 'http://jenkins.localhost:8080/job/elastic+kibana+master/1/' - - interface BuildState { - Object get(String key) - Object has(String key) - } - - interface GithubApi { - Object post(String url, Map data) - } - - @Before - void setUp() { - super.setUp() - - buildStateMock = mock(BuildState) - githubApiMock = mock(GithubApi) - - when(buildStateMock.has('checkoutInfo')).thenReturn(true) - when(buildStateMock.get('checkoutInfo')).thenReturn([ commit: 'COMMIT_HASH', ]) - when(githubApiMock.post(any(), any())).thenReturn(null) - - props([ - buildState: buildStateMock, - githubApi: githubApiMock, - ]) - - githubCommitStatus = loadScript("vars/githubCommitStatus.groovy") - } - - void verifyStatusCreate(String state, String description) { - verify(githubApiMock).post( - EXPECTED_STATUS_URL, - [ - 'state': state, - 'description': description, - 'context': EXPECTED_CONTEXT, - 'target_url': EXPECTED_BUILD_URL, - ] - ) - } - - @Test - void 'onStart() should create a pending status'() { - githubCommitStatus.onStart() - verifyStatusCreate('pending', 'Build started.') - } - - @Test - void 'onFinish() should create a success status'() { - githubCommitStatus.onFinish() - verifyStatusCreate('success', 'Build completed successfully.') - } - - @Test - void 'onFinish() should create an error status for failed builds'() { - mockFailureBuild() - githubCommitStatus.onFinish() - verifyStatusCreate('error', 'Build failed.') - } - - @Test - void 'onStart() should exit early for PRs'() { - prop('githubPr', [ isPr: { true } ]) - - githubCommitStatus.onStart() - verifyZeroInteractions(githubApiMock) - } - - @Test - void 'onFinish() should exit early for PRs'() { - prop('githubPr', [ isPr: { true } ]) - - githubCommitStatus.onFinish() - verifyZeroInteractions(githubApiMock) - } -} diff --git a/.ci/pipeline-library/src/test/prChanges.groovy b/.ci/pipeline-library/src/test/prChanges.groovy deleted file mode 100644 index e3f82e6102acc..0000000000000 --- a/.ci/pipeline-library/src/test/prChanges.groovy +++ /dev/null @@ -1,113 +0,0 @@ -import org.junit.* -import static groovy.test.GroovyAssert.* - -class PrChangesTest extends KibanaBasePipelineTest { - def prChanges - - @Before - void setUp() { - super.setUp() - - env.ghprbPullId = '1' - - props([ - githubPr: [ - isPr: { true }, - ], - ]) - - prChanges = loadScript("vars/prChanges.groovy") - } - - @Test - void 'areChangesSkippable() with no changes'() { - props([ - githubPrs: [ - getChanges: { [] }, - ], - ]) - - assertTrue(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with skippable changes'() { - props([ - githubPrs: [ - getChanges: { [ - [filename: 'docs/test/a-fake-doc.asciidoc'], - [filename: 'README.md'], - ] }, - ], - ]) - - assertTrue(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with skippable renames'() { - props([ - githubPrs: [ - getChanges: { [ - [ filename: 'docs/test/a-fake-doc.asciidoc', previousFilename: 'docs/test/a-different-fake-doc.asciidoc' ], - [ filename: 'README.md', previousFilename: 'README-old.md' ], - ] }, - ], - ]) - - assertTrue(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with unskippable changes'() { - props([ - githubPrs: [ - getChanges: { [ - [filename: 'src/core/index.ts'], - ] }, - ], - ]) - - assertFalse(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with skippable and unskippable changes'() { - props([ - githubPrs: [ - getChanges: { [ - [filename: 'README.md'], - [filename: 'src/core/index.ts'], - ] }, - ], - ]) - - assertFalse(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with skippable changes that are in notSkippablePaths'() { - props([ - githubPrs: [ - getChanges: { [ - [filename: 'docs/developer/plugin-list.asciidoc'], - ] }, - ], - ]) - - assertFalse(prChanges.areChangesSkippable()) - } - - @Test - void 'areChangesSkippable() with plugin readme changes'() { - props([ - githubPrs: [ - getChanges: { [ - [filename: 'src/plugins/foo/README.asciidoc'], - ] }, - ], - ]) - - assertFalse(prChanges.areChangesSkippable()) - } -} diff --git a/.ci/pipeline-library/src/test/slackNotifications.groovy b/.ci/pipeline-library/src/test/slackNotifications.groovy deleted file mode 100644 index 33b3afed80bde..0000000000000 --- a/.ci/pipeline-library/src/test/slackNotifications.groovy +++ /dev/null @@ -1,185 +0,0 @@ -import org.junit.* -import static groovy.test.GroovyAssert.* - -class SlackNotificationsTest extends KibanaBasePipelineTest { - def slackNotifications - - @Before - void setUp() { - super.setUp() - - helper.registerAllowedMethod('slackSend', [Map.class], null) - prop('buildState', loadScript("vars/buildState.groovy")) - slackNotifications = loadScript('vars/slackNotifications.groovy') - } - - @Test - void 'getTestFailures() should properly format failure steps'() { - mockFailureBuild() - - def failureMessage = slackNotifications.getTestFailures() - - assertEquals( - "*Test Failures*\nā€¢ <${Mocks.TEST_FAILURE_URL}|x-pack/test/functional/apps/fake/testĀ·ts.Fake test <Component> should & pass &>", - failureMessage - ) - } - - @Test - void 'sendFailedBuild() should call slackSend() with an in-progress message'() { - mockFailureBuild() - - slackNotifications.sendFailedBuild() - - def args = fnMock('slackSend').args[0] - - def expected = [ - channel: '#kibana-operations-alerts', - username: 'Kibana Operations', - iconEmoji: ':jenkins:', - color: 'danger', - message: ':hourglass_flowing_sand: elastic / kibana # master #1', - ] - - expected.each { - assertEquals(it.value.toString(), args[it.key].toString()) - } - - assertEquals( - ":hourglass_flowing_sand: **", - args.blocks[0].text.text.toString() - ) - - assertEquals( - "*Failed Steps*\nā€¢ ", - args.blocks[1].text.text.toString() - ) - - assertEquals( - "*Test Failures*\nā€¢ ", - args.blocks[2].text.text.toString() - ) - } - - @Test - void 'sendFailedBuild() should call slackSend() with message'() { - mockFailureBuild() - - slackNotifications.sendFailedBuild(isFinal: true) - - def args = fnMock('slackSend').args[0] - - def expected = [ - channel: '#kibana-operations-alerts', - username: 'Kibana Operations', - iconEmoji: ':jenkins:', - color: 'danger', - message: ':broken_heart: elastic / kibana # master #1', - ] - - expected.each { - assertEquals(it.value.toString(), args[it.key].toString()) - } - - assertEquals( - ":broken_heart: **", - args.blocks[0].text.text.toString() - ) - - assertEquals( - "*Failed Steps*\nā€¢ ", - args.blocks[1].text.text.toString() - ) - - assertEquals( - "*Test Failures*\nā€¢ ", - args.blocks[2].text.text.toString() - ) - } - - @Test - void 'sendFailedBuild() should call slackSend() with a backup message when first attempt fails'() { - mockFailureBuild() - def counter = 0 - helper.registerAllowedMethod('slackSend', [Map.class], { ++counter > 1 }) - slackNotifications.sendFailedBuild(isFinal: true) - - def args = fnMocks('slackSend')[1].args[0] - - def expected = [ - channel: '#kibana-operations-alerts', - username: 'Kibana Operations', - iconEmoji: ':jenkins:', - color: 'danger', - message: ':broken_heart: elastic / kibana # master #1', - ] - - expected.each { - assertEquals(it.value.toString(), args[it.key].toString()) - } - - assertEquals( - ":broken_heart: **" + - "\n\nFirst attempt at sending this notification failed. Please check the build.", - args.blocks[0].text.text.toString() - ) - } - - @Test - void 'sendFailedBuild() should call slackSend() with a channel id and timestamp on second call'() { - mockFailureBuild() - helper.registerAllowedMethod('slackSend', [Map.class], { [ channelId: 'CHANNEL_ID', ts: 'TIMESTAMP' ] }) - slackNotifications.sendFailedBuild(isFinal: false) - slackNotifications.sendFailedBuild(isFinal: true) - - def args = fnMocks('slackSend')[1].args[0] - - def expected = [ - channel: 'CHANNEL_ID', - timestamp: 'TIMESTAMP', - username: 'Kibana Operations', - iconEmoji: ':jenkins:', - color: 'danger', - message: ':broken_heart: elastic / kibana # master #1', - ] - - expected.each { - assertEquals(it.value.toString(), args[it.key].toString()) - } - } - - @Test - void 'getTestFailures() should truncate list of failures to 10'() { - prop('testUtils', [ - getFailures: { - return (1..12).collect { - return [ - url: Mocks.TEST_FAILURE_URL, - fullDisplayName: "Failure #${it}", - ] - } - }, - ]) - - def message = (String) slackNotifications.getTestFailures() - - assertTrue("Message ends with truncated indicator", message.endsWith("...and 2 more")) - assertTrue("Message contains Failure #10", message.contains("Failure #10")) - assertTrue("Message does not contain Failure #11", !message.contains("Failure #11")) - } - - @Test - void 'shortenMessage() should truncate a long message, but leave parts that fit'() { - assertEquals('Hello\nHello\n[...truncated...]', slackNotifications.shortenMessage('Hello\nHello\nthis is a long string', 29)) - } - - @Test - void 'shortenMessage() should not modify a short message'() { - assertEquals('Hello world', slackNotifications.shortenMessage('Hello world', 11)) - } - - @Test - void 'shortenMessage() should truncate an entire message with only one part'() { - assertEquals('[...truncated...]', slackNotifications.shortenMessage('Hello world this is a really long message', 40)) - } -} diff --git a/.ci/pipeline-library/vars b/.ci/pipeline-library/vars deleted file mode 120000 index 8559d2e08fc22..0000000000000 --- a/.ci/pipeline-library/vars +++ /dev/null @@ -1 +0,0 @@ -../../vars \ No newline at end of file diff --git a/.ci/runbld_no_junit.yml b/.ci/runbld_no_junit.yml deleted file mode 100644 index 1bcb7e22a2648..0000000000000 --- a/.ci/runbld_no_junit.yml +++ /dev/null @@ -1,6 +0,0 @@ -# This file is not picked up by anything automatically -# It is used by being passed as an argument to runbld, when automatic processing of junit reports is not desired -profiles: -- ".*": # Match any job - tests: - junit-filename-pattern: false diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9ec0cc7fab0a4..b3d2e9cf82ad4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -486,6 +486,7 @@ src/plugins/kibana_utils @elastic/appex-sharedux x-pack/plugins/kubernetes_security @elastic/kibana-cloud-security-posture packages/kbn-language-documentation-popover @elastic/kibana-visualizations packages/kbn-lens-embeddable-utils @elastic/obs-ux-infra_services-team @elastic/kibana-visualizations +packages/kbn-lens-formula-docs @elastic/kibana-visualizations x-pack/plugins/lens @elastic/kibana-visualizations x-pack/plugins/license_api_guard @elastic/platform-deployment-management x-pack/plugins/license_management @elastic/platform-deployment-management @@ -1497,17 +1498,12 @@ x-pack/test/threat_intelligence_cypress @elastic/protections-experience x-pack/plugins/security_solution/common/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/common/search_strategy/security_solution/risk_score @elastic/security-entity-analytics x-pack/plugins/security_solution/public/entity_analytics @elastic/security-entity-analytics -x-pack/plugins/security_solution/public/explore/components/risk_score @elastic/security-entity-analytics -x-pack/plugins/security_solution/public/overview/pages/entity_analytics.tsx @elastic/security-entity-analytics -x-pack/plugins/security_solution/public/overview/components/entity_analytics x-pack/plugins/security_solution/server/lib/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/server/lib/risk_score @elastic/security-entity-analytics x-pack/test/security_solution_api_integration/test_suites/entity_analytics @elastic/security-entity-analytics x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics @elastic/security-entity-analytics x-pack/plugins/security_solution/public/flyout/entity_details @elastic/security-entity-analytics x-pack/plugins/security_solution/common/api/entity_analytics @elastic/security-entity-analytics -/x-pack/plugins/security_solution/public/entity_analytics @elastic/security-entity-analytics -/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics @elastic/security-entity-analytics # Security Defend Workflows - OSQuery Ownership /x-pack/plugins/security_solution/common/api/detection_engine/model/rule_response_actions @elastic/security-defend-workflows diff --git a/.i18nrc.json b/.i18nrc.json index 1af130820cd36..119c072688489 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -79,6 +79,7 @@ "kibana_utils": "src/plugins/kibana_utils", "kibana-react": "src/plugins/kibana_react", "kibanaOverview": "src/plugins/kibana_overview", + "lensFormulaDocs": "packages/kbn-lens-formula-docs", "lists": "packages/kbn-securitysolution-list-utils/src", "exceptionList-components": "packages/kbn-securitysolution-exception-list-components/src", "management": [ diff --git a/.node-version b/.node-version index 87ec8842b158d..d5a159609d095 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -18.18.2 +20.10.0 diff --git a/.nvmrc b/.nvmrc index 87ec8842b158d..d5a159609d095 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.18.2 +20.10.0 diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 7dd3d0f41d27a..0000000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/groovy - -if (!env.ghprbPullId) { - print "Non-PR builds are now in Buildkite." - return -} - -library 'kibana-pipeline-library' -kibanaLibrary.load() - -kibanaPipeline(timeoutMinutes: 210, checkPrChanges: true, setCommitStatus: true) { - slackNotifications.onFailure(disabled: !params.NOTIFY_ON_FAILURE) { - githubPr.withDefaultPrComments { - ciStats.trackBuild(requireSuccess: githubPr.isTrackedBranchPr()) { - catchError { - retryable.enable() - kibanaPipeline.allCiTasks() - } - } - } - } - - if (params.NOTIFY_ON_FAILURE) { - kibanaPipeline.sendMail() - } -} diff --git a/NOTICE.txt b/NOTICE.txt index 45af6e5231783..d02031c4b5a2b 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,5 +1,5 @@ Kibana source code with Kibana X-Pack source code -Copyright 2012-2023 Elasticsearch B.V. +Copyright 2012-2024 Elasticsearch B.V. --- Pretty handling of logarithmic axes. diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index e614bdff172f9..5f8cce19705d4 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -22,13 +22,13 @@ load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install # Setup the Node.js toolchain for the architectures we want to support node_repositories( node_repositories = { - "18.18.2-darwin_amd64": ("node-v18.18.2-darwin-x64.tar.gz", "node-v18.18.2-darwin-x64", "5bb8da908ed590e256a69bf2862238c8a67bc4600119f2f7721ca18a7c810c0f"), - "18.18.2-darwin_arm64": ("node-v18.18.2-darwin-arm64.tar.gz", "node-v18.18.2-darwin-arm64", "9f982cc91b28778dd8638e4f94563b0c2a1da7aba62beb72bd427721035ab553"), - "18.18.2-linux_arm64": ("node-v18.18.2-linux-arm64.tar.xz", "node-v18.18.2-linux-arm64", "8a5a03f6a742159c9aa0ae3a99b368cd938cf62f3a5522a2e5acbe6313710efe"), - "18.18.2-linux_amd64": ("node-v18.18.2-linux-x64.tar.xz", "node-v18.18.2-linux-x64", "f7cf590bc7153f3beaa9e1138d00e50d74df223f0bec61f63e7df65f7315b76a"), - "18.18.2-windows_amd64": ("node-v18.18.2-win-x64.zip", "node-v18.18.2-win-x64", "3bb0e51e579a41a22b3bf6cb2f3e79c03801aa17acbe0ca00fc555d1282e7acd"), + "20.10.0-darwin_amd64": ("node-v20.10.0-darwin-x64.tar.gz", "node-v20.10.0-darwin-x64", "5ff5e8abd3eea6e5f507eb6677554f5b2188eedef654096aa4168a9941e91a32"), + "20.10.0-darwin_arm64": ("node-v20.10.0-darwin-arm64.tar.gz", "node-v20.10.0-darwin-arm64", "68b93099451d77aac116cf8fce179cabcf53fec079508dc6b39d3a086fb461a8"), + "20.10.0-linux_arm64": ("node-v20.10.0-linux-arm64.tar.xz", "node-v20.10.0-linux-arm64", "a5c22683890d5d244f3afd488ef44e573b5b8287f8911b9a1b061ed3f20a5e6d"), + "20.10.0-linux_amd64": ("node-v20.10.0-linux-x64.tar.xz", "node-v20.10.0-linux-x64", "9c0fbc8cc7be9a6543af4b9afb05759c538c0f81015c388d63277b0158507697"), + "20.10.0-windows_amd64": ("node-v20.10.0-win-x64.zip", "node-v20.10.0-win-x64", "e5b861814a97e28ae7ac06a34e88fd5e0565b447d270c26e20b5ef60bf0aaaf9"), }, - node_version = "18.18.2", + node_version = "20.10.0", node_urls = [ "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v{version}/{filename}", ], @@ -60,7 +60,6 @@ yarn_install( "GECKODRIVER_CDNURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", "CHROMEDRIVER_CDNURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", "CHROMEDRIVER_CDNBINARIESURL": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache", - "SASS_BINARY_SITE": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass", "RE2_DOWNLOAD_MIRROR": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2", "CYPRESS_DOWNLOAD_MIRROR": "https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/cypress", } diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 5fa32d9b97356..a95a7d9c209c6 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2845,6 +2845,27 @@ "path": "x-pack/plugins/actions/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-server.ActionTypeExecutorOptions.request", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + " | undefined" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -4574,6 +4595,27 @@ "path": "x-pack/plugins/actions/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.ActionTypeExecutorResult.errorSource", + "type": "CompoundType", + "tags": [], + "label": "errorSource", + "description": [], + "signature": [ + { + "pluginId": "taskManager", + "scope": "common", + "docId": "kibTaskManagerPluginApi", + "section": "def-common.TaskErrorSource", + "text": "TaskErrorSource" + }, + " | undefined" + ], + "path": "x-pack/plugins/actions/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -5243,6 +5285,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-common.GenerativeAIForObservabilityConnectorFeatureId", + "type": "string", + "tags": [], + "label": "GenerativeAIForObservabilityConnectorFeatureId", + "description": [], + "signature": [ + "\"generativeAIForObservability\"" + ], + "path": "x-pack/plugins/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-common.IExecutionKPIResult", @@ -5615,6 +5672,53 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-common.GenerativeAIForObservabilityFeature", + "type": "Object", + "tags": [], + "label": "GenerativeAIForObservabilityFeature", + "description": [], + "path": "x-pack/plugins/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-common.GenerativeAIForObservabilityFeature.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.GenerativeAIForObservabilityFeature.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.GenerativeAIForObservabilityFeature.compatibility", + "type": "string", + "tags": [], + "label": "compatibility", + "description": [], + "path": "x-pack/plugins/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-common.MustacheInEmailRegExp", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 0d548cad85aba..281a4e1348185 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 269 | 0 | 263 | 31 | +| 276 | 0 | 270 | 31 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 26b4be1969357..3648f99ea4831 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 2039c9ac564b9..d3331b027d951 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index edcf581deb96f..163f5204f7e78 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: 2023-12-20 +date: 2024-01-03 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 32f08c6a0e78f..75b3c06d42d6b 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 15f5fd2f156b5..5fd8e35e631a9 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -934,6 +934,46 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertsClientError", + "type": "Class", + "tags": [], + "label": "AlertsClientError", + "description": [], + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.AlertsClientError", + "text": "AlertsClientError" + }, + " extends Error" + ], + "path": "x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertsClientError.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-server.InstallShutdownError", @@ -3533,10 +3573,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts" }, - { - "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts" - }, { "plugin": "stackAlerts", "path": "x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts" diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index adc70de114502..89309bed8376f 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 823 | 1 | 792 | 51 | +| 825 | 1 | 794 | 51 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 245012914fc85..b380c619d5e67 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-12-20 +date: 2024-01-03 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 9a120eebe3ed4..79422355cd46e 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 0ac5809fbca3b..7aace57deee4f 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index e9816c6447a10..4fd665cd9b20a 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-12-20 +date: 2024-01-03 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 93201fe179841..433f90a1053b0 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-12-20 +date: 2024-01-03 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 cac829ab79309..89ab8a4a91808 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index 25ca9db072727..ce739ea2399bb 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -2962,6 +2962,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.FEATURE_ID", + "type": "string", + "tags": [], + "label": "FEATURE_ID", + "description": [], + "signature": [ + "\"generalCases\"" + ], + "path": "x-pack/plugins/cases/common/constants/application.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.GENERAL_CASES_OWNER", diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index de2829ce93f0d..45c579f7fdd87 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 114 | 0 | 94 | 27 | +| 115 | 0 | 95 | 27 | ## Client diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 5196545d7539f..6d413558acb67 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-12-20 +date: 2024-01-03 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 5867d5b825705..2b09b8b7f4692 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-12-20 +date: 2024-01-03 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 c169145b714b7..09c76a68af874 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-12-20 +date: 2024-01-03 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 deac1416f138c..dd178b545e280 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-12-20 +date: 2024-01-03 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 b60f92510930a..3145d19a29f5e 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-12-20 +date: 2024-01-03 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 d8dac36a8e49e..37b3e4d8903c1 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-12-20 +date: 2024-01-03 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 ba0a1ca7370a4..1be971ab4f9d9 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-12-20 +date: 2024-01-03 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 f997d267fc3c5..f6f169a648d3b 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: 2023-12-20 +date: 2024-01-03 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 e28e0be933f77..de441c85f5298 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-12-20 +date: 2024-01-03 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 e1cd80030b4e8..6cbf150bab20b 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-12-20 +date: 2024-01-03 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 4ab19494bc12e..d0022ed7d4937 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-12-20 +date: 2024-01-03 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 c408255e9e437..98fcf5ca3a078 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-12-20 +date: 2024-01-03 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 8de976a267406..9d1902cbc0db8 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index cbae12b08c276..6c126a001865f 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-12-20 +date: 2024-01-03 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 fb8259e59b2a4..ac0e8a0add0a5 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-12-20 +date: 2024-01-03 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 e268263406505..0f6f82176a98f 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-12-20 +date: 2024-01-03 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 dfa448a4bf5c6..776605a08a29a 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-12-20 +date: 2024-01-03 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 4c1454ea6e648..8213fc9c72b7e 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-12-20 +date: 2024-01-03 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 64dfa575555f0..e9fe566a53bd3 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: 2023-12-20 +date: 2024-01-03 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 74551d06871f4..e6219e5675d7d 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: 2023-12-20 +date: 2024-01-03 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 309a3527d3953..44a4654eb5e2e 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: 2023-12-20 +date: 2024-01-03 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 b2a7f60ba614f..ef17fb470eee4 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,7 +18,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | ruleRegistry, observability, ml, infra, monitoring, securitySolution, stackAlerts, synthetics, transform, uptime | - | -| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, savedObjects, indexManagement, visualizations, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, advancedSettings, exploratoryView, fleet, metricsDataAccess, licenseManagement, maps, dataVisualizer, ml, osquery, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, infra, ingestPipelines, logstash, monitoring, observabilityOnboarding, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | +| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, savedObjects, indexManagement, visualizations, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, advancedSettings, licenseManagement, maps, dataVisualizer, ml, exploratoryView, fleet, metricsDataAccess, osquery, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, graph, grokdebugger, indexLifecycleManagement, infra, ingestPipelines, logstash, monitoring, observabilityOnboarding, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | @@ -28,7 +28,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | triggersActionsUi | - | -| | inspector, data, savedObjects, runtimeFields, indexManagement, dataViewEditor, unifiedSearch, embeddable, visualizations, dashboard, licensing, savedObjectsTagging, dataViewFieldEditor, lens, security, triggersActionsUi, cases, observabilityShared, advancedSettings, exploratoryView, fleet, telemetry, maps, timelines, banners, reporting, cloudSecurityPosture, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, uptime, cloudLinks, console, dataViewManagement, eventAnnotationListing, filesManagement, uiActions, visTypeVislib | - | +| | inspector, data, savedObjects, runtimeFields, indexManagement, dataViewEditor, unifiedSearch, embeddable, visualizations, dashboard, licensing, savedObjectsTagging, dataViewFieldEditor, lens, security, triggersActionsUi, cases, observabilityShared, advancedSettings, telemetry, maps, exploratoryView, fleet, timelines, banners, reporting, cloudSecurityPosture, dashboardEnhanced, imageEmbeddable, graph, monitoring, securitySolution, synthetics, uptime, cloudLinks, console, dataViewManagement, eventAnnotationListing, filesManagement, uiActions, visTypeVislib | - | | | @kbn/core, visualizations, triggersActionsUi, advancedSettings | - | | | observability, @kbn/securitysolution-data-table, securitySolution | - | | | monitoring | - | @@ -57,7 +57,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | securitySolution | - | | | securitySolution | - | -| | exploratoryView, fleet, dataVisualizer, osquery, cloudSecurityPosture, discoverEnhanced, synthetics | - | +| | dataVisualizer, exploratoryView, fleet, osquery, cloudSecurityPosture, discoverEnhanced, synthetics | - | | | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, savedObjects, unifiedSearch, visualizations, fileUpload, dashboardEnhanced, transform, discover, dataVisualizer | - | | | @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, visualizations, exploratoryView, transform, @kbn/core-saved-objects-browser-mocks | - | | | actions, alerting | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 1f71eaa96d1b4..2648ec6df8172 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -831,14 +831,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## globalSearchBar - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/global_search_bar/public/plugin.tsx#:~:text=KibanaThemeProvider) | - | - - - ## globalSearchProviders | Deprecated API | Reference location(s) | Remove By | @@ -991,7 +983,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts#:~:text=toMountPoint), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts#:~:text=toMountPoint) | - | +| | [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [confirm_modal_promise.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/confirm_modal_promise.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [remove_layer_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_actions/remove_layer_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [revert_changes_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/revert_changes_action.tsx#:~:text=toMountPoint), [edit_action_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts#:~:text=toMountPoint), [edit_action_helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts#:~:text=toMountPoint) | - | | | [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [help_popover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/datasources/form_based/help_popover.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=KibanaThemeProvider), [settings_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/app_plugin/settings_menu.tsx#:~:text=KibanaThemeProvider)+ 12 more | - | | | [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=SavedObjectSaveModal), [save_action.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/visualizations/xy/annotations/actions/save_action.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/lens/public/persistence/saved_objects_utils/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract) | - | @@ -1353,7 +1345,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [wrap_search_source_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.ts#:~:text=create) | - | | | [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch) | - | | | [api.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts#:~:text=options) | - | -| | [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/saved_objects.ts#:~:text=toMountPoint)+ 3 more | - | +| | [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts#:~:text=toMountPoint), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/saved_objects.ts#:~:text=toMountPoint)+ 3 more | - | | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider) | - | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | @@ -1427,7 +1419,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation) | - | -| | [rule_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts#:~:text=alertFactory), [get_entities_and_generate_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory) | - | +| | [get_entities_and_generate_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory) | - | | | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | | | [data_view_select.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/data_view_select.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns) | - | | | [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx#:~:text=fieldFormats) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index d01634d94f307..765dc2a38f65c 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 05a42dfee4f9c..6a4bc5a428642 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index d21ac35895264..b086a06274a8f 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -2382,14 +2382,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_discover_link.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx" - }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx" @@ -2398,6 +2390,14 @@ "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/actions_panel/actions_panel.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_discover_link.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx" + }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/public/packs/pack_queries_status_table.tsx" diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 1623ea1ab919d..8f9a0054a494f 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-12-20 +date: 2024-01-03 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 24a9c9bc9a03c..6cd00b2a94c00 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index ee97616a9a10f..83f31d4fa967d 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 0f18338ae23fe..30f40a7e90148 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -221,10 +221,10 @@ }, { "parentPluginId": "elasticAssistant", - "id": "def-server.AssistantToolParams.assistantLangChain", + "id": "def-server.AssistantToolParams.isEnabledKnowledgeBase", "type": "boolean", "tags": [], - "label": "assistantLangChain", + "label": "isEnabledKnowledgeBase", "description": [], "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, @@ -1546,7 +1546,7 @@ "section": "def-common.KibanaRequest", "text": "KibanaRequest" }, - "" + "" ], "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 1df64189eba35..0b2670a8873a2 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: 2023-12-20 +date: 2024-01-03 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 466683e754287..7aa3a7d6758ec 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-12-20 +date: 2024-01-03 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 05c1f0c349e09..321d251c575e3 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-12-20 +date: 2024-01-03 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 caace4728e9d9..9647227264dc0 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-12-20 +date: 2024-01-03 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 42daa2becb86c..13b7b18c900d2 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 654b46b0c5e4b..233eb29c2c756 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8b2e0bcb53fb6..365f107bb7dfe 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-12-20 +date: 2024-01-03 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 25a74bf46d0ea..4b91172377f37 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: 2023-12-20 +date: 2024-01-03 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 a9b9113640bcb..3fd5ddbcfaf58 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-12-20 +date: 2024-01-03 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 a52100f992de4..437aa907c5539 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: 2023-12-20 +date: 2024-01-03 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 a9e936abeddf3..7b351931acbe1 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-12-20 +date: 2024-01-03 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 4cca71abe0790..88cc7b5f39438 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-12-20 +date: 2024-01-03 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 6b5b21f4fb204..9cafdd4bfd20a 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-12-20 +date: 2024-01-03 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 c77f8c64853d9..49d21cd89648f 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-12-20 +date: 2024-01-03 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 0430d47a37bac..2693102013cb8 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-12-20 +date: 2024-01-03 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 a255b55611268..0094d6bded0f8 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-12-20 +date: 2024-01-03 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 5a123ab07f33a..2ea41a3b7d7f5 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-12-20 +date: 2024-01-03 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 a856a46b6481e..fd0055b84b469 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-12-20 +date: 2024-01-03 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 278599d9f3562..f24cf0f3fc50d 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-12-20 +date: 2024-01-03 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 158fcfa11750f..3ec151c84ff9d 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 2935d4c8b714d..fe9166cafc00f 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-12-20 +date: 2024-01-03 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 d2a4a1381c977..65c4039788709 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-12-20 +date: 2024-01-03 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 232a524194c7f..f51e647e6d816 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-12-20 +date: 2024-01-03 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 032e5d0349a13..cbc90e0b5197e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-12-20 +date: 2024-01-03 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 37a7f280f7a62..90433a5e9110e 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-12-20 +date: 2024-01-03 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 a2cd495db1062..859c789455f15 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 4b9eaff4fd17f..57bff5b1b69c8 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-12-20 +date: 2024-01-03 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 c21eec2cbe5b8..66fc660112973 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-12-20 +date: 2024-01-03 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 d578eacf9ffe4..53660e5ab6727 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-12-20 +date: 2024-01-03 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 056dc4d6fb607..d581b113fb519 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-12-20 +date: 2024-01-03 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 a19c4362e84b6..898af943a8029 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-12-20 +date: 2024-01-03 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 61902a7030a95..c3edd4dbe4079 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-12-20 +date: 2024-01-03 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 87256269da456..0ce444c73b495 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-12-20 +date: 2024-01-03 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 1baf60cb540e1..6fe87e2bd16ce 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-12-20 +date: 2024-01-03 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 06a730d0ba9fd..f35ddb73641a7 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-12-20 +date: 2024-01-03 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 1a450bb87e9ba..bdb4ea347757d 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 8216c86f9babb..78449bd7a1927 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index b4632bcd58c02..94bcac34fe032 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 73b04a3df72e2..53d6e671698bb 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 1cbd11dfd0d03..e6bd17a2da1bc 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-12-20 +date: 2024-01-03 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 f51172b1a406b..be5ddfeece0d6 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: 2023-12-20 +date: 2024-01-03 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 121f39152fd02..957ed4277ea4c 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 8f1195e363d75..fce03996d1fd3 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 7fb9322954dd3..4a329e2ad5eaa 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index e6904e0c59ffe..625f69b41f813 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: 2023-12-20 +date: 2024-01-03 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 31ec9aeb7e855..9df1a5e0eba48 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: 2023-12-20 +date: 2024-01-03 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 0431988537292..5f26f2569b2f5 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'error.grouping_key'?: string | undefined; 'error.grouping_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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'error.message'?: 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; 'monitor.id'?: string | undefined; 'monitor.name'?: 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.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.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.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.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.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.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; } & { '@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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'error.grouping_key'?: string | undefined; 'error.grouping_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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; 'error.message'?: 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; 'monitor.id'?: string | undefined; 'monitor.name'?: 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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.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.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.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.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; } & { '@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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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, @@ -405,7 +405,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; '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.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.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.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.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.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.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; } & { '@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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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; '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.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.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.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.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; } & { '@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; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | 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.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | 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; '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.imphash'?: string | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | 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.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.imports'?: unknown[] | 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; 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.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.imphash'?: string | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | 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.id'?: string | undefined; 'orchestrator.resource.ip'?: 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.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.imports'?: unknown[] | 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; 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.start'?: 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.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.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.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.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.imports'?: unknown[] | 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; 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.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.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.imphash'?: string | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | 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.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.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.imphash'?: string | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | 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.start'?: 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.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: 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.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.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.imports'?: unknown[] | 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; 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.imphash'?: string | 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.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.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, diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 1fb4cd71832a9..d3cdedd416f89 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 5c12f240b701d..6c0b274a863b0 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: 2023-12-20 +date: 2024-01-03 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 59e01e8711ac5..33bb144d96e85 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 19f35f51788c9..d38ac3ecd03eb 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -742,6 +742,26 @@ "plugin": "apm", "path": "x-pack/plugins/apm/public/services/telemetry/telemetry_client.ts" }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts" + }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts" + }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts" + }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts" + }, + { + "plugin": "elasticAssistant", + "path": "x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts" + }, { "plugin": "globalSearchBar", "path": "x-pack/plugins/global_search_bar/public/telemetry/event_reporter.ts" @@ -866,6 +886,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" + }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_ai_assistant/public/service/create_chat_service.test.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 1af7047716207..136e3802b11aa 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 52d45c656ac9e..b415312f60bd2 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 2f3eccb35f7ab..c96ba8475c350 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 8f05e511bcacb..8f19d26485744 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 16e2cbff3383f..b5773b652cbf3 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 5ef08bb07042e..7f28e363b0a88 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index d9fbce1b70916..2a65f9c6ef18e 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 7fd594402e9a7..eaa5699ba4e85 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index bbf5c2e0afd8a..f30c027fd5da3 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-12-20 +date: 2024-01-03 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 0a1418a7d31bf..dd7ac7b7ac758 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index d564479d022d4..fecd230bae721 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index ea5defb14a6d4..76b68d7e8a8ab 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-12-20 +date: 2024-01-03 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 e825eb91fee44..60870f01959fa 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: 2023-12-20 +date: 2024-01-03 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 9370ac0707dd9..a125de923f214 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: 2023-12-20 +date: 2024-01-03 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 6faa4c4037efc..8b10cb871b976 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: 2023-12-20 +date: 2024-01-03 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 0f935c59087ff..59d5bdd4b056e 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index a60ae4b0cedd9..c32de33ae36d2 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-12-20 +date: 2024-01-03 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 82f2b5d6cd2d2..def9203b5df07 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: 2023-12-20 +date: 2024-01-03 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 2e5e7e969b6cc..380dfe6305806 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-12-20 +date: 2024-01-03 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 3a28582b70126..5a5b23f29794c 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-12-20 +date: 2024-01-03 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 51d84b5832477..50d5f231553e9 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-12-20 +date: 2024-01-03 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 9b4cc2cba02f2..4578b10c12a3c 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-12-20 +date: 2024-01-03 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 dfda599353594..d63fd39ae8920 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index eda7e11372879..f3c88feafb8fb 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 8f40b76f15167..27900a811c078 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: 2023-12-20 +date: 2024-01-03 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 eea5fdc3b63ae..cc7ae2a291ac3 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-12-20 +date: 2024-01-03 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 1d61d5261d950..e088532380eef 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-12-20 +date: 2024-01-03 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 ffee5680dff63..0d9234edd43d2 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 1dd83bb9e9195..27978886440f5 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-12-20 +date: 2024-01-03 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 7d26d795cc0b6..52168398d455e 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index c6160456ba0c7..2f86930f47883 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: 2023-12-20 +date: 2024-01-03 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 7a08374bcf7bb..ca1ef88a1a84f 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: 2023-12-20 +date: 2024-01-03 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 13da50f3da458..954c6639e5880 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: 2023-12-20 +date: 2024-01-03 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 b734c8d7a18fb..1d98bfb99c974 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 548bf253a4c2d..f8ff902603871 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: 2023-12-20 +date: 2024-01-03 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 646ac64e92f54..fb67afa9f68f9 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 a7879e4d3d8b7..084a2064caa70 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 25289bfe400a2..2c296064cc413 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 0f6cb5412babb..820b9b50a857e 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-12-20 +date: 2024-01-03 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 56784937c528b..ed9ddf9ba7278 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 f6fb22ca13693..8895890bbda27 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 d87a0916ddaad..69e7a953b57cb 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 ca7e995b042d6..dc8042fc624b2 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 170a694892e35..010704177b189 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 8ee8a76549cb2..ce9452d1b6d25 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-12-20 +date: 2024-01-03 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 5b78000d8d91d..8dd653db6a14a 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 31762b4cb59be..b7a5f1b773856 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 fb1b3ffddcd96..62693c356c349 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 7094d688d58da..a2857301c2ee2 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 08dd066890f32..12d84e7534fb2 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-12-20 +date: 2024-01-03 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 e6b8399a6fb25..a4315c041bc38 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 298111aa0fed3..1f46f664c85d7 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 dbb476c98bb80..93ee246b6daed 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 ebfa6afcb88ca..e93970c01e89f 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-12-20 +date: 2024-01-03 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 f1e5c2d4985cc..18b16da16a429 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-12-20 +date: 2024-01-03 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 4170ccd2b6a61..2a9a67281fd56 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 f0b86d8109388..d48b8db85e8b8 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 34236f3571dfd..a501da2a419de 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 c51fc1b3c8b8f..e21bed9178568 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 395a13be812fc..b3ffb68bfc9a3 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 3567c91b27509..11f476d661dc6 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 c82dbdfcda4bf..c31ef8466be22 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 ea3c4459c636e..7b46e4bda2bdd 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-12-20 +date: 2024-01-03 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 2936975bb78c6..2ac5f5a0f3f99 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-12-20 +date: 2024-01-03 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 a77dedb859eb4..2975a2dd8f608 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 05866c562bb49..408a458442a2c 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 630a23a542d7f..d0d0dc5db65cc 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 ada0b777ba4f7..eb3d82b08be26 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 4eb744e8a2589..3454f526a4658 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 78c7b425cd391..745db2ae5330c 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-12-20 +date: 2024-01-03 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 cb208e9c0433c..6ef3177e1992b 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-12-20 +date: 2024-01-03 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 ecc04327dc53b..c0399a7f4d096 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 30f5741da71ec..09d119948c21a 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 edebce6161506..ac09858373c69 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 9b3b9769fd650..26b8565018958 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 69f2a57657f42..4c4ad04ae1639 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-12-20 +date: 2024-01-03 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 d7175588a43e9..4c7257ac2ac36 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 9a0d5e597f865..fec986b99d1fd 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 42854703b4afe..c6850b2c70007 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 095a92a32b5c4..346ca2d190bbf 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-12-20 +date: 2024-01-03 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 f15aee88a3db3..39479af5f1377 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 d9fe32a1d6138..d5d27043ce5c4 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 82abcf6512748..1b2e8908f0a0f 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 b4b5580681867..ce72221f86261 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 e7ad84e90c8ec..e11b99119989a 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 4a6b4bfed4e51..5f2630e38c80c 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 6a5f735f86a28..e1ed98c3c2126 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 3a7991dbf5f4a..4749de418f516 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-12-20 +date: 2024-01-03 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 51c751beed415..65ef3da10669f 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-12-20 +date: 2024-01-03 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 65cbfab2036ae..9a70bce6e3102 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 4c6a0b6bf4182..415460c1a58c7 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 108457965b7b9..84e518b002b46 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 b0ce16df03234..c30e71484c941 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 75cc5baef38de..af017fb002122 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 7787852fd47b0..82de69c4be7ea 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 ba79a9400352c..276d926365c69 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 073f3cd3d3d69..2fc031418675d 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-12-20 +date: 2024-01-03 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 3d2d1b3cf6033..ef4c144548594 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 34383de09320b..e1c2cc8c7ae18 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-12-20 +date: 2024-01-03 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 bf4a485ef597f..e8f02b23c9f33 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-12-20 +date: 2024-01-03 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 1baff418e6686..43ed60b3ba322 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 bf19251f98526..931293c715b06 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 c75f43c9091a0..69a2492af2c24 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 c9ac829505fdc..d5aa6a118e180 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 9f2a3a12bdd55..1fdad6d156ff6 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3412,6 +3412,10 @@ "plugin": "security", "path": "x-pack/plugins/security/server/routes/api_keys/get.ts" }, + { + "plugin": "security", + "path": "x-pack/plugins/security/server/routes/api_keys/has_active.ts" + }, { "plugin": "security", "path": "x-pack/plugins/security/server/routes/anonymous_access/get_capabilities.ts" @@ -4404,6 +4408,10 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" }, + { + "plugin": "serverlessSearch", + "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" + }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/connectors_routes.ts" @@ -5520,6 +5528,10 @@ "plugin": "security", "path": "x-pack/plugins/security/server/routes/api_keys/get.test.ts" }, + { + "plugin": "security", + "path": "x-pack/plugins/security/server/routes/api_keys/has_active.test.ts" + }, { "plugin": "security", "path": "x-pack/plugins/security/server/routes/authentication/index.test.ts" @@ -13389,6 +13401,10 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts" }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts" + }, { "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index efb5ca9a8627d..4ab26d2d59bc6 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-12-20 +date: 2024-01-03 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 916f9228d6bcf..1df81d16867d5 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 b0002eac4cde9..263279611b441 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 2f480eac36974..514b6aa871ad0 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 3c9c19fbe0ab0..8093ac0446912 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 c3efefc42e35b..09aec2547a4ac 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-12-20 +date: 2024-01-03 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 524fc3c56027e..c7c33a5b6118e 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 fd742237c6162..5fb00144b8c78 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 049cf5508ab0a..dbc63a501a5fd 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 ff3398960d536..6ceb5a9662846 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 bb7904f1a7e23..09c38f28a542b 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 3359ce214df07..dd98257acd82e 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 92e2cf6d02c50..f3acecd69cd42 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 57f23b6197477..dea4a77a2b4de 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-12-20 +date: 2024-01-03 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 427d68cd9ea41..c12bd0a09e3af 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 7585d0d2c23cc..40e5d02a8ad58 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 31a4b63250962..e8722874c4686 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 c6c149b4a5998..a51553a551049 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-12-20 +date: 2024-01-03 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 3a893ec3a2501..9c2c844dff888 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 c2898a671ce2e..7b7ccf141fe28 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4a370c82f9098..c414274124d1e 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 3823aebb76ab9..35d68f65b5e58 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 970d898d0d8c4..4ee47e2d8dd60 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-12-20 +date: 2024-01-03 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 ef230c858a647..9aacfa448896c 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 0738dc8f8c3dd..0e1baa15d4200 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 448876b7c2496..4752700e1c99d 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 1a2e017640cac..60f5ae32452b2 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-12-20 +date: 2024-01-03 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 56aa30dba4c5e..f7dc3c3ddc4f8 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 34fafde085c17..d63b0def5c05b 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 e09fba5618ddf..e1bb395d680b5 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 a0349c9b53ed7..8b67baca1c60a 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 d3bfa4169e5b1..5b153a5f41f39 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 d4fb8e133a88b..f4b82cc736f55 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 e881c62aacd1c..fd1f986e4c439 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 8f16e6f81448d..abbfa4511d9f1 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4b0c81a1c5046..da897df7ec3b9 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 8c0dd9c9fe836..a2a0aaf9118c7 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 6dc965a446f0c..d040203085f15 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: 2023-12-20 +date: 2024-01-03 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 1681c5f47a9b1..49e8c56fb4b5b 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: 2023-12-20 +date: 2024-01-03 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 0d978818515f9..1854c6fa54dce 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-12-20 +date: 2024-01-03 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 9064da09b3629..cc53b2eaaec33 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 7f88a8586bbb4..4ad04774e3d68 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-12-20 +date: 2024-01-03 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 71706e6fcfbeb..a23b044901e0e 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 e7ff92d28e49b..40c49d0116428 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 3babef55d3712..bfd50e040c375 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 3de72e8ff4118..dcdb95e7bbcee 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 d315bee07fc0b..66684b6ad5075 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 99238dd4fd2a2..e584098dad104 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 2f8b013711db7..92d730df53d96 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-12-20 +date: 2024-01-03 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 62b278170c193..21829e8279486 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4747c7f8fc142..418fd4ac62c68 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 ae394f1cf3327..7bd30b20d2e47 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 8f9a96801704e..41e78996ea96d 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 ff35430ad0409..cb0fb3f6baa9e 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 74942dc0b4db5..a16963f102bfc 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 d91a51016a033..5031e809ed813 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-12-20 +date: 2024-01-03 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 237e39632690b..da7613f02bbd1 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 8cefa52d203b0..9a4668c1262c4 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 82f4839ece5eb..3eacc30df4fdb 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 b43e84a8491a2..9ca3561cc5916 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4e47164ec80c0..5945e190b4691 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-12-20 +date: 2024-01-03 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 061fa4404deea..26180f76794cd 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 1f39a2340d61c..626cf4f89b04f 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 6af81fdd63711..34d470522d22e 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 0be162fcd2365..18fcfbb094b01 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-12-20 +date: 2024-01-03 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 44e10756806e4..bf766399819b4 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 aa3e08fc99c66..34beba74de29f 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-12-20 +date: 2024-01-03 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 d129c2e9699e1..2866e403ef49d 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 a4156eb3580d2..2c962ca195ee4 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 dfd0ff5f563f3..46528c170ec7d 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-12-20 +date: 2024-01-03 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 15efb3c0dfb0e..41a589bc5ac10 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 8a2bd0d4eef0c..13061b14ec965 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-12-20 +date: 2024-01-03 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 903efb2d21160..7d924c455d36c 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: 2023-12-20 +date: 2024-01-03 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 5272b17ba6b54..e90d6e84ae5b5 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-12-20 +date: 2024-01-03 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 ae85352065c88..69498c46d3d14 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 c403fd047b5c9..2cecef44b7aa4 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 de950736bfaff..2d1e6cb70ad1f 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4f1d61590ae6a..c0615e03e7124 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 231f464db3db2..7d1e4ae48cfd3 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 3cf1536c2d9cd..1189bbd4e76f6 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 edaaacb4887df..c00ea25223ac0 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-12-20 +date: 2024-01-03 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 4ba5a4f944dd7..f377f812c53b7 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-12-20 +date: 2024-01-03 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 f0fad67938c8d..9577d99b879e7 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 ac2b99490fca4..a9747955ced7d 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 657d10ba32d61..30a5f4f911ebd 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-12-20 +date: 2024-01-03 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 dacb1a60213fd..c8f403350217a 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 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 c5c5a1863251a..9deb4e9043a4f 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 9e0664a60a6b9..6d40f3e613b6b 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: 2023-12-20 +date: 2024-01-03 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_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index fbd7b533a17af..77a75b4c31f80 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.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 82fde9834b40d..e3362ebb5c110 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: 2023-12-20 +date: 2024-01-03 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 832838b23cd60..9782f7bcc7385 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-12-20 +date: 2024-01-03 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 32487c868527a..c906455a6b7dc 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 2094394427370..70392256f5d0a 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: 2023-12-20 +date: 2024-01-03 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 fdc7d2b471a53..2160f14689d94 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: 2023-12-20 +date: 2024-01-03 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 a7a7b42edc5fe..d67b6d92f1713 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 6851c44cd8d3a..71a723d246023 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 168dac22f1c78..535720cf4e94a 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-12-20 +date: 2024-01-03 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 e93f9eb98e7d0..9d322f0778f15 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: 2023-12-20 +date: 2024-01-03 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 dcbb1e7e72b1e..7a96972afca3f 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 855973318b3bf..d4ba2283f9b33 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: 2023-12-20 +date: 2024-01-03 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 0dbf258601435..c8652fba0e7bb 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: 2023-12-20 +date: 2024-01-03 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 18e70293bd50a..a369a14687d79 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: 2023-12-20 +date: 2024-01-03 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 a9a7f53acc315..b95bad9a2e80a 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index d3f6dd79f3df1..017d76bdbb719 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: 2023-12-20 +date: 2024-01-03 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 90300109368ca..a1440065b3f50 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: 2023-12-20 +date: 2024-01-03 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 e687ca4a1b4c5..c7bf147d812b2 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: 2023-12-20 +date: 2024-01-03 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 0542a938ccff9..16526a11f6bba 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: 2023-12-20 +date: 2024-01-03 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 80cafa7dbbd6d..e5974cd2ed6eb 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-12-20 +date: 2024-01-03 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 c9838a7a6fa4c..63e79c1b93307 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-12-20 +date: 2024-01-03 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 5ecdf8cb813a1..17453f780b438 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-12-20 +date: 2024-01-03 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 da8379cb1b7b3..dd10715c25188 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 6568e50674607..7a69e749fe9f2 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 6db8a4679d6ce..5e9bd89ba93b7 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -952,7 +952,7 @@ "label": "serverlessSearch", "description": [], "signature": [ - "{ readonly gettingStartedExplore: string; readonly gettingStartedIngest: string; readonly gettingStartedSearch: string; readonly integrations: string; readonly integrationsBeats: string; readonly integrationsConnectorClient: string; readonly integrationsLogstash: string; }" + "{ readonly gettingStartedExplore: string; readonly gettingStartedIngest: string; readonly gettingStartedSearch: string; readonly integrations: string; readonly integrationsBeats: string; readonly integrationsConnectorClient: string; readonly integrationsConnectorClientRunFromSource: string; readonly integrationsConnectorClientRunWithDocker: string; readonly integrationsLogstash: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 3774d8c765fe2..dbb26e025754b 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-12-20 +date: 2024-01-03 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 840cc94a4c2d0..ebb45c1079ca8 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 91490fd580eb9..c94f5987750c9 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: 2023-12-20 +date: 2024-01-03 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 6bb9f301e847e..9543c83cdbb3d 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 2f466de40d446..935959878e454 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 848e461f325c0..689a27844fad4 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: 2023-12-20 +date: 2024-01-03 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 1c109848d555d..1670c41dae040 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: 2023-12-20 +date: 2024-01-03 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.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index 8b855265a22ca..3ac4e681392e9 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -159,7 +159,7 @@ "label": "AssistantProvider", "description": [], "signature": [ - "({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, assistantStreamingEnabled, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, baseAllowReplacement, defaultAllow, defaultAllowReplacement, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, getInitialConversations, modelEvaluatorEnabled, nameSpace, ragOnAlerts, setConversations, setDefaultAllow, setDefaultAllowReplacement, title, toasts, }: React.PropsWithChildren<", + "({ actionTypeRegistry, alertsIndexPattern, assistantAvailability, assistantStreamingEnabled, assistantTelemetry, augmentMessageCodeBlocks, baseAllow, baseAllowReplacement, defaultAllow, defaultAllowReplacement, docLinks, basePath, basePromptContexts, baseQuickPrompts, baseSystemPrompts, children, getComments, http, getInitialConversations, modelEvaluatorEnabled, nameSpace, setConversations, setDefaultAllow, setDefaultAllowReplacement, title, toasts, }: React.PropsWithChildren<", "AssistantProviderProps", ">) => JSX.Element" ], @@ -172,7 +172,7 @@ "id": "def-public.AssistantProvider.$1", "type": "CompoundType", "tags": [], - "label": "{\n actionTypeRegistry,\n alertsIndexPattern,\n assistantAvailability,\n assistantStreamingEnabled = false,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n baseAllow,\n baseAllowReplacement,\n defaultAllow,\n defaultAllowReplacement,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n getInitialConversations,\n modelEvaluatorEnabled = false,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n ragOnAlerts = false,\n setConversations,\n setDefaultAllow,\n setDefaultAllowReplacement,\n title = DEFAULT_ASSISTANT_TITLE,\n toasts,\n}", + "label": "{\n actionTypeRegistry,\n alertsIndexPattern,\n assistantAvailability,\n assistantStreamingEnabled = false,\n assistantTelemetry,\n augmentMessageCodeBlocks,\n baseAllow,\n baseAllowReplacement,\n defaultAllow,\n defaultAllowReplacement,\n docLinks,\n basePath,\n basePromptContexts = [],\n baseQuickPrompts = [],\n baseSystemPrompts = BASE_SYSTEM_PROMPTS,\n children,\n getComments,\n http,\n getInitialConversations,\n modelEvaluatorEnabled = false,\n nameSpace = DEFAULT_ASSISTANT_NAMESPACE,\n setConversations,\n setDefaultAllow,\n setDefaultAllowReplacement,\n title = DEFAULT_ASSISTANT_TITLE,\n toasts,\n}", "description": [], "signature": [ "React.PropsWithChildren<", @@ -534,7 +534,7 @@ "label": "reportAssistantMessageSent", "description": [], "signature": [ - "(params: { conversationId: string; role: string; }) => void" + "(params: { conversationId: string; role: string; isEnabledKnowledgeBase: boolean; isEnabledRAGAlerts: boolean; }) => void" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", "deprecated": false, @@ -572,6 +572,28 @@ "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantMessageSent.$1.isEnabledKnowledgeBase", + "type": "boolean", + "tags": [], + "label": "isEnabledKnowledgeBase", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantMessageSent.$1.isEnabledRAGAlerts", + "type": "boolean", + "tags": [], + "label": "isEnabledRAGAlerts", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false } ] } @@ -629,6 +651,64 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantSettingToggled", + "type": "Function", + "tags": [], + "label": "reportAssistantSettingToggled", + "description": [], + "signature": [ + "(params: { isEnabledKnowledgeBase?: boolean | undefined; isEnabledRAGAlerts?: boolean | undefined; }) => void" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantSettingToggled.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantSettingToggled.$1.isEnabledKnowledgeBase", + "type": "CompoundType", + "tags": [], + "label": "isEnabledKnowledgeBase", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.AssistantTelemetry.reportAssistantSettingToggled.$1.isEnabledRAGAlerts", + "type": "CompoundType", + "tags": [], + "label": "isEnabledRAGAlerts", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index ece431c0f2d58..2f4fc945428b0 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 98 | 0 | 78 | 6 | +| 104 | 0 | 84 | 6 | ## Client diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index a95c465a0d760..9c944f0bf5b28 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 78bc34211c648..df177dc44a94c 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-12-20 +date: 2024-01-03 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 da64a933321d3..426fbe2e3f71a 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-12-20 +date: 2024-01-03 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 1052a1a5c7e4e..4b4d5ee0d43b9 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-12-20 +date: 2024-01-03 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 7a560bdee7863..04ef6c7b6d3f0 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-12-20 +date: 2024-01-03 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 442cd2ca9b297..b970c49d3c813 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-12-20 +date: 2024-01-03 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 a6fcc77473dca..8f725923411af 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index d25b7bef1befa..e4c0f7b5a4437 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: 2023-12-20 +date: 2024-01-03 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 7a32fcc4327fd..ff1517ae1b59d 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: 2023-12-20 +date: 2024-01-03 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 42a76bc1e64e7..9c140e044bba4 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: 2023-12-20 +date: 2024-01-03 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 de2220fb4f755..22c559f70a6f0 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-12-20 +date: 2024-01-03 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 433dd6f2d93d2..02c6f4bd66adf 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: 2023-12-20 +date: 2024-01-03 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 accdfc8e7091f..de6b1fdee5f49 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index b14b6e2ff39d2..1410ce0b1edbc 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-12-20 +date: 2024-01-03 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 b1dda159d9555..c0447d91a8980 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: 2023-12-20 +date: 2024-01-03 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 ef0c710ee8423..a7d1a12c44a9c 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-12-20 +date: 2024-01-03 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 b1336050fd6b5..bf03bd157f8f9 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: 2023-12-20 +date: 2024-01-03 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 19bc6d526e10f..7236b8c2a2055 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 2730ec77cb851..87e92255ec291 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-12-20 +date: 2024-01-03 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 582082df34a82..ece5567608b1b 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-12-20 +date: 2024-01-03 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 e7d10d6055870..17bb23390b867 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 ef80f3ee46dc5..2e58c2b0c74c4 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-12-20 +date: 2024-01-03 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 3c12656bb148a..1dfc83f6a280b 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-12-20 +date: 2024-01-03 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 c0ac5fba635db..7374f07335517 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-12-20 +date: 2024-01-03 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 658352b079658..5c87c1bd9a073 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-12-20 +date: 2024-01-03 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 8e6eb9761b126..2f9dfe84b2fa6 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-12-20 +date: 2024-01-03 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 2f50f11de3f44..9c5ae7112f347 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 80d0a8339770b..9a28f3cc28a04 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: 2023-12-20 +date: 2024-01-03 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 8a2fd89d07a8a..04232da34b033 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index c500d50f9970e..95303c94ee32f 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index f3ed34ef974f1..bc27368ebfe3f 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-12-20 +date: 2024-01-03 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 8ca3b4cc686b1..1a3289e17468a 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-12-20 +date: 2024-01-03 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 14175629d0de0..1be271e7fb49a 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 3de7135caca51..883ec22a62a8b 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-12-20 +date: 2024-01-03 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 e293460031004..ec6def5b60bd8 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-12-20 +date: 2024-01-03 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 c328a9523f7fe..e02c88f3ee05d 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: 2023-12-20 +date: 2024-01-03 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.devdocs.json b/api_docs/kbn_lens_formula_docs.devdocs.json new file mode 100644 index 0000000000000..ffc386fb21ff5 --- /dev/null +++ b/api_docs/kbn_lens_formula_docs.devdocs.json @@ -0,0 +1,2298 @@ +{ + "id": "@kbn/lens-formula-docs", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.getTypeI18n", + "type": "Function", + "tags": [], + "label": "getTypeI18n", + "description": [], + "signature": [ + "(type: string) => string" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.getTypeI18n.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.AVG_ID", + "type": "string", + "tags": [], + "label": "AVG_ID", + "description": [], + "signature": [ + "\"average\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.AVG_NAME", + "type": "string", + "tags": [], + "label": "AVG_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.CARDINALITY_ID", + "type": "string", + "tags": [], + "label": "CARDINALITY_ID", + "description": [], + "signature": [ + "\"unique_count\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/cardinality.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.CARDINALITY_NAME", + "type": "string", + "tags": [], + "label": "CARDINALITY_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/cardinality.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.COUNT_ID", + "type": "string", + "tags": [], + "label": "COUNT_ID", + "description": [], + "signature": [ + "\"count\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/count.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.COUNT_NAME", + "type": "string", + "tags": [], + "label": "COUNT_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/count.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.COUNTER_RATE_ID", + "type": "string", + "tags": [], + "label": "COUNTER_RATE_ID", + "description": [], + "signature": [ + "\"counter_rate\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/counter_rate.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.COUNTER_RATE_NAME", + "type": "string", + "tags": [], + "label": "COUNTER_RATE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/counter_rate.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.CUMULATIVE_SUM_ID", + "type": "string", + "tags": [], + "label": "CUMULATIVE_SUM_ID", + "description": [], + "signature": [ + "\"cumulative_sum\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/cumulative_sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.CUMULATIVE_SUM_NAME", + "type": "string", + "tags": [], + "label": "CUMULATIVE_SUM_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/cumulative_sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.DIFFERENCES_ID", + "type": "string", + "tags": [], + "label": "DIFFERENCES_ID", + "description": [], + "signature": [ + "\"differences\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/differences.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.DIFFERENCES_NAME", + "type": "string", + "tags": [], + "label": "DIFFERENCES_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/differences.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.INTERVAL_ID", + "type": "string", + "tags": [], + "label": "INTERVAL_ID", + "description": [], + "signature": [ + "\"interval\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/interval.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.INTERVAL_NAME", + "type": "string", + "tags": [], + "label": "INTERVAL_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/interval.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.LAST_VALUE_ID", + "type": "string", + "tags": [], + "label": "LAST_VALUE_ID", + "description": [], + "signature": [ + "\"last_value\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/last_value.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.LAST_VALUE_NAME", + "type": "string", + "tags": [], + "label": "LAST_VALUE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/last_value.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MAX_ID", + "type": "string", + "tags": [], + "label": "MAX_ID", + "description": [], + "signature": [ + "\"max\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/max.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MAX_NAME", + "type": "string", + "tags": [], + "label": "MAX_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/max.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MEDIAN_ID", + "type": "string", + "tags": [], + "label": "MEDIAN_ID", + "description": [], + "signature": [ + "\"median\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/median.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MEDIAN_NAME", + "type": "string", + "tags": [], + "label": "MEDIAN_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/median.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MIN_ID", + "type": "string", + "tags": [], + "label": "MIN_ID", + "description": [], + "signature": [ + "\"min\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/min.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MIN_NAME", + "type": "string", + "tags": [], + "label": "MIN_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/min.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MOVING_AVERAGE_ID", + "type": "string", + "tags": [], + "label": "MOVING_AVERAGE_ID", + "description": [], + "signature": [ + "\"moving_average\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/moving_average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MOVING_AVERAGE_NAME", + "type": "string", + "tags": [], + "label": "MOVING_AVERAGE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/moving_average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.MOVING_AVERAGE_WINDOW_DEFAULT_VALUE", + "type": "number", + "tags": [], + "label": "MOVING_AVERAGE_WINDOW_DEFAULT_VALUE", + "description": [], + "signature": [ + "5" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/moving_average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.NORMALIZE_BY_UNIT_ID", + "type": "string", + "tags": [], + "label": "NORMALIZE_BY_UNIT_ID", + "description": [], + "signature": [ + "\"normalize_by_unit\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/normalize_by_unit.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.NORMALIZE_BY_UNIT_NAME", + "type": "string", + "tags": [], + "label": "NORMALIZE_BY_UNIT_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/normalize_by_unit.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.NOW_ID", + "type": "string", + "tags": [], + "label": "NOW_ID", + "description": [], + "signature": [ + "\"now\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/now.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.NOW_NAME", + "type": "string", + "tags": [], + "label": "NOW_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/now.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_AVERAGE_ID", + "type": "string", + "tags": [], + "label": "OVERALL_AVERAGE_ID", + "description": [], + "signature": [ + "\"overall_average\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_AVERAGE_NAME", + "type": "string", + "tags": [], + "label": "OVERALL_AVERAGE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_average.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_MAX_ID", + "type": "string", + "tags": [], + "label": "OVERALL_MAX_ID", + "description": [], + "signature": [ + "\"overall_max\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_max.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_MAX_NAME", + "type": "string", + "tags": [], + "label": "OVERALL_MAX_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_max.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_MIN_ID", + "type": "string", + "tags": [], + "label": "OVERALL_MIN_ID", + "description": [], + "signature": [ + "\"overall_min\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_min.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_MIN_NAME", + "type": "string", + "tags": [], + "label": "OVERALL_MIN_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_min.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_SUM_ID", + "type": "string", + "tags": [], + "label": "OVERALL_SUM_ID", + "description": [], + "signature": [ + "\"overall_sum\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.OVERALL_SUM_NAME", + "type": "string", + "tags": [], + "label": "OVERALL_SUM_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/overall_sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.PERCENTILE_ID", + "type": "string", + "tags": [], + "label": "PERCENTILE_ID", + "description": [], + "signature": [ + "\"percentile\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/percentile.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.PERCENTILE_NAME", + "type": "string", + "tags": [], + "label": "PERCENTILE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/percentile.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.PERCENTILE_RANK_ID", + "type": "string", + "tags": [], + "label": "PERCENTILE_RANK_ID", + "description": [], + "signature": [ + "\"percentile_rank\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/percentile_ranks.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.PERCENTILE_RANK_NAME", + "type": "string", + "tags": [], + "label": "PERCENTILE_RANK_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/percentile_ranks.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.STD_DEVIATION_ID", + "type": "string", + "tags": [], + "label": "STD_DEVIATION_ID", + "description": [], + "signature": [ + "\"standard_deviation\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/std_deviation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.STD_DEVIATION_NAME", + "type": "string", + "tags": [], + "label": "STD_DEVIATION_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/std_deviation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.SUM_ID", + "type": "string", + "tags": [], + "label": "SUM_ID", + "description": [], + "signature": [ + "\"sum\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.SUM_NAME", + "type": "string", + "tags": [], + "label": "SUM_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/sum.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.TIME_RANGE_ID", + "type": "string", + "tags": [], + "label": "TIME_RANGE_ID", + "description": [], + "signature": [ + "\"time_range\"" + ], + "path": "packages/kbn-lens-formula-docs/src/operations/time_range.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.TIME_RANGE_NAME", + "type": "string", + "tags": [], + "label": "TIME_RANGE_NAME", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/operations/time_range.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.documentationMap", + "type": "Object", + "tags": [], + "label": "documentationMap", + "description": [], + "signature": [ + "{ [x: string]: ", + "OperationDocumentationType", + "; }" + ], + "path": "packages/kbn-lens-formula-docs/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections", + "type": "Object", + "tags": [], + "label": "sections", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.howTo", + "type": "string", + "tags": [], + "label": "howTo", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.elasticsearch", + "type": "Object", + "tags": [], + "label": "elasticsearch", + "description": [], + "signature": [ + "{ label: string; description: string; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.common", + "type": "Object", + "tags": [], + "label": "common", + "description": [], + "signature": [ + "{ label: string; description: string; items: { label: string; description: string; }[]; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.comparison", + "type": "Object", + "tags": [], + "label": "comparison", + "description": [], + "signature": [ + "{ label: string; description: string; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.math", + "type": "Object", + "tags": [], + "label": "math", + "description": [], + "signature": [ + "{ label: string; description: string; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.calculations", + "type": "Object", + "tags": [], + "label": "calculations", + "description": [], + "signature": [ + "{ label: string; description: string; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.sections.context", + "type": "Object", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "{ label: string; description: string; }" + ], + "path": "packages/kbn-lens-formula-docs/src/sections/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions", + "type": "Object", + "tags": [], + "label": "tinymathFunctions", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.add", + "type": "Object", + "tags": [], + "label": "add", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.add.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.add.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.add.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.subtract", + "type": "Object", + "tags": [], + "label": "subtract", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.subtract.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.subtract.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.subtract.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.multiply", + "type": "Object", + "tags": [], + "label": "multiply", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.multiply.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.multiply.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.multiply.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.divide", + "type": "Object", + "tags": [], + "label": "divide", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.divide.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.divide.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.divide.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.abs", + "type": "Object", + "tags": [], + "label": "abs", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.abs.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.abs.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.abs.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cbrt", + "type": "Object", + "tags": [], + "label": "cbrt", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cbrt.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cbrt.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cbrt.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ceil", + "type": "Object", + "tags": [], + "label": "ceil", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ceil.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ceil.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ceil.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.clamp", + "type": "Object", + "tags": [], + "label": "clamp", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.clamp.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.clamp.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "({ name: string; type: string; } | { name: string; type: string; alternativeWhenMissing: string; })[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.clamp.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cube", + "type": "Object", + "tags": [], + "label": "cube", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cube.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cube.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.cube.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.exp", + "type": "Object", + "tags": [], + "label": "exp", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.exp.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.exp.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.exp.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.fix", + "type": "Object", + "tags": [], + "label": "fix", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.fix.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.fix.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.fix.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.floor", + "type": "Object", + "tags": [], + "label": "floor", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.floor.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.floor.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.floor.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.log", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.log.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.log.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "({ name: string; type: string; } | { name: string; optional: true; defaultValue: string; type: string; })[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.log.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.mod", + "type": "Object", + "tags": [], + "label": "mod", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.mod.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.mod.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.mod.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pow", + "type": "Object", + "tags": [], + "label": "pow", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pow.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pow.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pow.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.round", + "type": "Object", + "tags": [], + "label": "round", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.round.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.round.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "({ name: string; type: string; } | { name: string; optional: true; defaultValue: number; type: string; })[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.round.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.sqrt", + "type": "Object", + "tags": [], + "label": "sqrt", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.sqrt.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.sqrt.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.sqrt.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.square", + "type": "Object", + "tags": [], + "label": "square", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.square.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.square.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.square.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_max", + "type": "Object", + "tags": [], + "label": "pick_max", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_max.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_max.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_max.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_min", + "type": "Object", + "tags": [], + "label": "pick_min", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_min.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_min.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.pick_min.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.defaults", + "type": "Object", + "tags": [], + "label": "defaults", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.defaults.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"math\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.defaults.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.defaults.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lt", + "type": "Object", + "tags": [], + "label": "lt", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lt.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lt.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lt.outputType", + "type": "string", + "tags": [], + "label": "outputType", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lt.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gt", + "type": "Object", + "tags": [], + "label": "gt", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gt.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gt.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gt.outputType", + "type": "string", + "tags": [], + "label": "outputType", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gt.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.eq", + "type": "Object", + "tags": [], + "label": "eq", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.eq.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.eq.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.eq.outputType", + "type": "string", + "tags": [], + "label": "outputType", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.eq.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lte", + "type": "Object", + "tags": [], + "label": "lte", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lte.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lte.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lte.outputType", + "type": "string", + "tags": [], + "label": "outputType", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.lte.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gte", + "type": "Object", + "tags": [], + "label": "gte", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gte.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gte.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gte.outputType", + "type": "string", + "tags": [], + "label": "outputType", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.gte.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ifelse", + "type": "Object", + "tags": [], + "label": "ifelse", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ifelse.section", + "type": "string", + "tags": [], + "label": "section", + "description": [], + "signature": [ + "\"comparison\"" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ifelse.positionalArguments", + "type": "Array", + "tags": [], + "label": "positionalArguments", + "description": [], + "signature": [ + "{ name: string; type: string; }[]" + ], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/lens-formula-docs", + "id": "def-common.tinymathFunctions.ifelse.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "packages/kbn-lens-formula-docs/src/math/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx new file mode 100644 index 0000000000000..5d63a5d0cce64 --- /dev/null +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -0,0 +1,36 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnLensFormulaDocsPluginApi +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-01-03 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] +--- +import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; + + + +Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 172 | 0 | 172 | 1 | + +## Common + +### Objects + + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index d67369e99fb75..0aad7f0b31b60 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-12-20 +date: 2024-01-03 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 2deb751440b94..608f5e661b253 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index db808a83e1293..0e76dcfee8184 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-12-20 +date: 2024-01-03 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 cf8d4712ab857..3b7c3219f961c 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: 2023-12-20 +date: 2024-01-03 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 025e2e2ac4ace..89e1034ca738b 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: 2023-12-20 +date: 2024-01-03 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 9d66ef487abdf..74809bc030a97 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: 2023-12-20 +date: 2024-01-03 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 e27fb8fde6adc..bd4a5ce1f8c46 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: 2023-12-20 +date: 2024-01-03 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 2587916d3eca3..6a2b8f7df7556 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: 2023-12-20 +date: 2024-01-03 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 e2e351e44a7aa..7ef6f131a7201 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: 2023-12-20 +date: 2024-01-03 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 03888667463b6..4868c02e24d88 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: 2023-12-20 +date: 2024-01-03 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 84a9ff0460b60..db3f309da4413 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: 2023-12-20 +date: 2024-01-03 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 7de2c8af8f74a..14daebc7a1ef0 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: 2023-12-20 +date: 2024-01-03 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 581101683f9d9..46fe06d3202fa 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: 2023-12-20 +date: 2024-01-03 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 6f45cd582b1da..d83cd2ed75991 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: 2023-12-20 +date: 2024-01-03 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 c0a82642b3e97..12aed4a625022 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: 2023-12-20 +date: 2024-01-03 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 b87a7f92012cb..13562d6da3e93 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-12-20 +date: 2024-01-03 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 7e6eeabac5041..6afb6f2796da8 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: 2023-12-20 +date: 2024-01-03 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 eca8ce4c0ed5e..bce484f2a3ba9 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 e52b8338d5355..f555b04985d4c 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: 2023-12-20 +date: 2024-01-03 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_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 96a8c10ce1221..7844c32ad787c 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: 2023-12-20 +date: 2024-01-03 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 4d8fe635e1206..32843c50baf6d 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: 2023-12-20 +date: 2024-01-03 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.devdocs.json b/api_docs/kbn_ml_data_frame_analytics_utils.devdocs.json index 2a24271056761..1fe956fcc8c78 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.devdocs.json +++ b/api_docs/kbn_ml_data_frame_analytics_utils.devdocs.json @@ -1416,10 +1416,10 @@ "\nOptional error" ], "signature": [ - "Boom", - " | ", "ErrorResponseBase", - " | undefined" + " | ", + "Boom", + " | undefined" ], "path": "x-pack/packages/ml/data_frame_analytics_utils/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 1ac479cc9ad0c..2a237add5bb32 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: 2023-12-20 +date: 2024-01-03 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 eb54b16550b28..7050f7dccb806 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: 2023-12-20 +date: 2024-01-03 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 4b38a91390f3e..b49a49b6197d2 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-12-20 +date: 2024-01-03 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 c4e3ad459a8b6..c590ad4216cc2 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: 2023-12-20 +date: 2024-01-03 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.devdocs.json b/api_docs/kbn_ml_error_utils.devdocs.json index 9ca82346fab10..20a36ccb1a796 100644 --- a/api_docs/kbn_ml_error_utils.devdocs.json +++ b/api_docs/kbn_ml_error_utils.devdocs.json @@ -702,8 +702,6 @@ ], "signature": [ "string | ", - "ErrorResponseBase", - " | ", { "pluginId": "@kbn/ml-error-utils", "scope": "common", @@ -712,6 +710,8 @@ "text": "MLHttpFetchError" }, " | ", + "ErrorResponseBase", + " | ", "Boom", " | undefined" ], diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 8c5ab1329e5c1..d8ca772173fca 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: 2023-12-20 +date: 2024-01-03 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 33548ea5b09bf..aa56ebf03fd15 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: 2023-12-20 +date: 2024-01-03 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 07e67b30d3ece..a21fc6b630fc1 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-12-20 +date: 2024-01-03 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 0b743eae485bd..ca8f6f8dabee1 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-12-20 +date: 2024-01-03 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 9939154aa79fa..55e6b1a595d3a 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: 2023-12-20 +date: 2024-01-03 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 87746d0d4e800..c81a827f09ba7 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-12-20 +date: 2024-01-03 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 554649dde0947..5fcbbce949ab2 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-12-20 +date: 2024-01-03 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 da82e1a0bb315..549b31f6914df 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: 2023-12-20 +date: 2024-01-03 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 6f150ba5c262f..7b6d8e7ba6737 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 cf0c6b27a830a..79bccf79b8e18 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: 2023-12-20 +date: 2024-01-03 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 1ef538818c106..5a686d30db186 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: 2023-12-20 +date: 2024-01-03 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 37f6d28a5e542..30ad12e967919 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: 2023-12-20 +date: 2024-01-03 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 ce095c3cb18be..34f8d460992c3 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-12-20 +date: 2024-01-03 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_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index 6a08397fd948d..65b97833c4397 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -436,7 +436,7 @@ "label": "TrainedModelType", "description": [], "signature": [ - "\"pytorch\" | \"tree_ensemble\" | \"lang_ident\"" + "\"tree_ensemble\" | \"lang_ident\" | \"pytorch\"" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 7945bcea8513a..02e93e5198380 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: 2023-12-20 +date: 2024-01-03 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 abf54b6acfab8..be58f24546153 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: 2023-12-20 +date: 2024-01-03 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 d4cbe6dde603e..49ff37164b4cd 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index d5878e4c69cde..81cc6961a3dfd 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-12-20 +date: 2024-01-03 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 fb0d42a4954e3..cb1ef42476df8 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index f86fdb41710a9..54645dda86e93 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index fe5a6ce52bee5..529085337a743 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: 2023-12-20 +date: 2024-01-03 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 c468bf71c06a1..9bddb8fc65312 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: 2023-12-20 +date: 2024-01-03 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 0b9989f5e6ee0..2e474066f282f 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: 2023-12-20 +date: 2024-01-03 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 f4063c9da35db..92dc147c6dfe3 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: 2023-12-20 +date: 2024-01-03 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 f8493369a76d7..2fe16fd4e8bbc 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-12-20 +date: 2024-01-03 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 c5200492fde1b..95da111246b73 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-12-20 +date: 2024-01-03 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 fe239e48b1bb9..428b1988c5266 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-12-20 +date: 2024-01-03 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 4f69417afdb49..c1be463949bc5 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: 2023-12-20 +date: 2024-01-03 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 684b35cc79146..43b7ecb46c378 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 780791e8fb99a..2de8e21c2b5dd 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-12-20 +date: 2024-01-03 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 a738b8145a3d1..daa193082d6fa 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index cfeceaa90b0f4..18436bcedaea1 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: 2023-12-20 +date: 2024-01-03 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 1f04d43211196..420fa81ed4057 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: 2023-12-20 +date: 2024-01-03 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 463cefa369ca4..ef1d5e1575d16 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 31f7c73d6d9ff..09218d858f4a4 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: 2023-12-20 +date: 2024-01-03 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 5f62263cf9abc..315a71dd74f08 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: 2023-12-20 +date: 2024-01-03 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 e730837d06143..74e588dcd6974 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: 2023-12-20 +date: 2024-01-03 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 94f4da60f0299..7ce89ba190aa5 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: 2023-12-20 +date: 2024-01-03 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 219366b71df2e..05e5c7aecedc6 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: 2023-12-20 +date: 2024-01-03 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 53845e86f97a0..fb18a053e3ffa 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index c40beda979a85..415c2cea3cf7c 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-12-20 +date: 2024-01-03 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 5155ff2962395..7282467a965ce 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-12-20 +date: 2024-01-03 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 ce1dc3c649607..f148614157a0b 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-12-20 +date: 2024-01-03 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 cdd494995f0d3..4bc6616c3081b 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-12-20 +date: 2024-01-03 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 6dc4b9176db77..da5c09a6d0c8f 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 2afa6b59c815a..f5e18c1615ac7 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: 2023-12-20 +date: 2024-01-03 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 dad1984688386..e8481d356dabb 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: 2023-12-20 +date: 2024-01-03 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 bc95c41a58d0b..42ff98e422988 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: 2023-12-20 +date: 2024-01-03 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 719d55649c8bf..2252fb1d7977b 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: 2023-12-20 +date: 2024-01-03 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 06b238b11b93f..8176c546a0fe0 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: 2023-12-20 +date: 2024-01-03 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 6e4772df950b0..f39d7e111bc91 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: 2023-12-20 +date: 2024-01-03 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 57ed195534fed..0061529c8c618 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: 2023-12-20 +date: 2024-01-03 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 c6089a997ac4e..a052bd3626774 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: 2023-12-20 +date: 2024-01-03 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 084a03b76449a..8bfe06034f44e 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: 2023-12-20 +date: 2024-01-03 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 ab6066ff08142..64399026f1acc 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 65e8bd6973fa0..97cf0ad255b20 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 2bbf09bde925f..1d208bc86fcb0 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: 2023-12-20 +date: 2024-01-03 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 7cec1b9b998bd..e32b7867319ec 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: 2023-12-20 +date: 2024-01-03 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 2dee374f7c572..e4de662c8e2a8 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1631,6 +1631,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.ML_ANOMALY_DETECTION_RULE_TYPE_ID", + "type": "string", + "tags": [], + "label": "ML_ANOMALY_DETECTION_RULE_TYPE_ID", + "description": [], + "signature": [ + "\"xpack.ml.anomaly_detection_alert\"" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.OBSERVABILITY_THRESHOLD_RULE_TYPE_ID", @@ -1654,7 +1669,7 @@ "label": "RuleCreationValidConsumer", "description": [], "signature": [ - "\"observability\" | \"stackAlerts\" | \"logs\" | \"infrastructure\"" + "\"observability\" | \"stackAlerts\" | \"alerts\" | \"logs\" | \"infrastructure\"" ], "path": "packages/kbn-rule-data-utils/src/rule_types/index.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 2b1e0683f309d..6af048a8e4864 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 | |-------------------|-----------|------------------------|-----------------| -| 119 | 0 | 116 | 0 | +| 120 | 0 | 117 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 26de1a1841cbb..b99395bfe0711 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 732f1c5da93a0..b728a36f9c936 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index f3377ab693b7f..ae96cdef85b9d 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -35392,6 +35392,206 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security", + "type": "Object", + "tags": [], + "label": "use_document_level_security", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.servicenow.configuration.use_document_level_security.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ] }, diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index b5de70f4790ae..a9f69c48340be 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2649 | 0 | 2649 | 0 | +| 2663 | 0 | 2663 | 0 | ## Common diff --git a/api_docs/kbn_search_errors.devdocs.json b/api_docs/kbn_search_errors.devdocs.json index ef729a98515f1..897b63cf2bbcc 100644 --- a/api_docs/kbn_search_errors.devdocs.json +++ b/api_docs/kbn_search_errors.devdocs.json @@ -91,6 +91,21 @@ { "parentPluginId": "@kbn/search-errors", "id": "def-common.EsError.Unnamed.$2", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-search-errors/src/es_error.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/search-errors", + "id": "def-common.EsError.Unnamed.$3", "type": "Function", "tags": [], "label": "openInInspector", @@ -114,7 +129,7 @@ "label": "getErrorMessage", "description": [], "signature": [ - "() => JSX.Element | null" + "() => JSX.Element" ], "path": "packages/kbn-search-errors/src/es_error.tsx", "deprecated": false, @@ -130,63 +145,46 @@ "label": "getActions", "description": [], "signature": [ - "(application: ", - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - }, - ") => JSX.Element[]" + "() => JSX.Element[]" ], "path": "packages/kbn-search-errors/src/es_error.tsx", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.EsError.getActions.$1", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/es_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], + "children": [], "returnComment": [] } ], "initialIsOpen": false - }, + } + ], + "functions": [ { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError", - "type": "Class", + "id": "def-common.createEsError", + "type": "Function", "tags": [], - "label": "PainlessError", + "label": "createEsError", "description": [], "signature": [ + "(err: ", { "pluginId": "@kbn/search-errors", "scope": "common", "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.PainlessError", - "text": "PainlessError" + "section": "def-common.IEsError", + "text": "IEsError" + }, + ", openInInspector: () => void, services: ", + "Services", + ", dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" }, - " extends ", + " | undefined) => ", { "pluginId": "@kbn/search-errors", "scope": "common", @@ -195,187 +193,87 @@ "text": "EsError" } ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.painlessStack", - "type": "string", - "tags": [], - "label": "painlessStack", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.indexPattern", + "id": "def-common.createEsError.$1", "type": "Object", "tags": [], - "label": "indexPattern", + "label": "err", "description": [], "signature": [ { - "pluginId": "dataViews", + "pluginId": "@kbn/search-errors", "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - " | undefined" + "docId": "kibKbnSearchErrorsPluginApi", + "section": "def-common.IEsError", + "text": "IEsError" + } ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed", + "id": "def-common.createEsError.$2", "type": "Function", "tags": [], - "label": "Constructor", + "label": "openInInspector", "description": [], "signature": [ - "any" + "() => void" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "err", - "description": [], - "signature": [ - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$2", - "type": "Function", - "tags": [], - "label": "openInInspector", - "description": [], - "signature": [ - "() => void" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "indexPattern", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - " | undefined" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getErrorMessage", - "type": "Function", + "id": "def-common.createEsError.$3", + "type": "Object", "tags": [], - "label": "getErrorMessage", + "label": "services", "description": [], "signature": [ - "() => JSX.Element" + "Services" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [], - "returnComment": [] + "isRequired": true }, { "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getActions", - "type": "Function", + "id": "def-common.createEsError.$4", + "type": "Object", "tags": [], - "label": "getActions", + "label": "dataView", "description": [], "signature": [ - "(application: ", { - "pluginId": "@kbn/core-application-browser", + "pluginId": "dataViews", "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" }, - ") => JSX.Element[]" + " | undefined" ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", + "path": "packages/kbn-search-errors/src/create_es_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.PainlessError.getActions.$1", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "isRequired": false } ], + "returnComment": [], "initialIsOpen": false - } - ], - "functions": [ + }, { "parentPluginId": "@kbn/search-errors", "id": "def-common.isEsError", @@ -411,54 +309,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.isPainlessError", - "type": "Function", - "tags": [], - "label": "isPainlessError", - "description": [], - "signature": [ - "(err: Error | ", - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - }, - ") => boolean" - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.isPainlessError.$1", - "type": "CompoundType", - "tags": [], - "label": "err", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/search-errors", - "scope": "common", - "docId": "kibKbnSearchErrorsPluginApi", - "section": "def-common.IEsError", - "text": "IEsError" - } - ], - "path": "packages/kbn-search-errors/src/painless_error.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/search-errors", "id": "def-common.renderSearchError", @@ -467,15 +317,7 @@ "label": "renderSearchError", "description": [], "signature": [ - "({\n error,\n application,\n}: { error: Error; application: ", - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - }, - "; }) => { title: string; body: React.ReactNode; actions?: React.ReactNode[] | undefined; } | undefined" + "(error: Error) => { title: string; body: React.ReactNode; actions?: React.ReactNode[] | undefined; } | undefined" ], "path": "packages/kbn-search-errors/src/render_search_error.ts", "deprecated": false, @@ -486,47 +328,15 @@ "id": "def-common.renderSearchError.$1", "type": "Object", "tags": [], - "label": "{\n error,\n application,\n}", + "label": "error", "description": [], + "signature": [ + "Error" + ], "path": "packages/kbn-search-errors/src/render_search_error.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.renderSearchError.$1.error", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/kbn-search-errors/src/render_search_error.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/search-errors", - "id": "def-common.renderSearchError.$1.application", - "type": "Object", - "tags": [], - "label": "application", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-application-browser", - "scope": "common", - "docId": "kibKbnCoreApplicationBrowserPluginApi", - "section": "def-common.ApplicationStart", - "text": "ApplicationStart" - } - ], - "path": "packages/kbn-search-errors/src/render_search_error.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "isRequired": true } ], "returnComment": [], diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 28044c354967a..d4942841b3e92 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 27 | 1 | 26 | 0 | +| 18 | 1 | 17 | 1 | ## Common diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 4e80f1e09ae49..bf8f93490d97a 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: 2023-12-20 +date: 2024-01-03 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 872d1241f4c79..524bbb2ba17d5 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 7df39a20835e1..da636b1c1eb17 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: 2023-12-20 +date: 2024-01-03 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 0311d655af61b..adc89d81337bc 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: 2023-12-20 +date: 2024-01-03 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 07bf3b3b1d053..00c15e7cccb6c 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 2bb23757570cf..cadcb170ebc94 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: 2023-12-20 +date: 2024-01-03 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 f276821476701..566e682d55ee9 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: 2023-12-20 +date: 2024-01-03 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 f7419335104ce..6b2e00f57c6ea 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: 2023-12-20 +date: 2024-01-03 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 daae2d1b00eec..834885381eda9 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index e919e16c4fb9a..e10ab24287a01 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-12-20 +date: 2024-01-03 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 c10215d400df3..2f6b6b2851d8c 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: 2023-12-20 +date: 2024-01-03 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 a1619d9228776..bd1e25d126795 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-12-20 +date: 2024-01-03 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 2e9e3fda3bd73..a9d6f110a244b 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 2504bf49c085d..f437cefd7525b 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index c8566604b272e..7ad7facc591d5 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index d55216dc82dc6..efeb0e6fe16a1 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 aa9796b5717ac..520f50d1154c7 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-12-20 +date: 2024-01-03 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 b3ef203a1a3c0..83b2bc0d036f5 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-12-20 +date: 2024-01-03 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 60abe223e006d..d8a27520e0ec8 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-12-20 +date: 2024-01-03 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 9b45eb5442f01..57966232ac0ed 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 9a894c867b646..ca14c731fa9ec 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-12-20 +date: 2024-01-03 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 696893d05623a..9abe4ac959005 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-12-20 +date: 2024-01-03 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 3861554241486..28e949d75ba67 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-12-20 +date: 2024-01-03 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 67d118226936e..5ce57dbadb96f 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 e2c786980f7b8..3ae83f273eec8 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-12-20 +date: 2024-01-03 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 731f71bba1261..373d807dc9d11 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-12-20 +date: 2024-01-03 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 80a6ecd781096..6d17995911366 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-12-20 +date: 2024-01-03 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 f56737b1185de..455ddc5f82b63 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-12-20 +date: 2024-01-03 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 92366c91ca283..d29cce7f05c69 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index fba7e624924c9..e9433cf3b698d 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: 2023-12-20 +date: 2024-01-03 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 bb81917229091..a1660b4bd7e88 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: 2023-12-20 +date: 2024-01-03 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 d19c30dda087f..93523f759f581 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: 2023-12-20 +date: 2024-01-03 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 d269700c68f44..cc0f78b5a522e 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: 2023-12-20 +date: 2024-01-03 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 69fdcced5a23d..67423f625ef46 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: 2023-12-20 +date: 2024-01-03 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 d10b95719787b..c8925d6bf6fb7 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: 2023-12-20 +date: 2024-01-03 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 0ac8433ce61cb..7c922d1e2b589 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-12-20 +date: 2024-01-03 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 49f1e02ff5c1e..796bcda6e0e9b 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-12-20 +date: 2024-01-03 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 f65e8e2cbf415..de736c1d7f90f 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 39fc250553136..58a5ab4b38f8f 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-12-20 +date: 2024-01-03 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 e71e76571b820..90d1f72419326 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-12-20 +date: 2024-01-03 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 ffaa19fe356c1..fd3e522119dbe 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 171e417021a5c..224a41536790b 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: 2023-12-20 +date: 2024-01-03 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 c50aae83d82f5..248fd2e12c3b4 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: 2023-12-20 +date: 2024-01-03 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 172e010a4c1dc..f6f66007e3ab5 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-12-20 +date: 2024-01-03 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 0900aa85d5405..61eae0e2d5d6e 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-12-20 +date: 2024-01-03 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 ef67141bccf4b..1ae453e2c3a63 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 6b43a7bfaa4f0..bef9e26fb6764 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 b43071a29b928..3650f4ac8270d 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-12-20 +date: 2024-01-03 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 4cd8dafad7582..e6a8523cba6b7 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: 2023-12-20 +date: 2024-01-03 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 46eb79de5c2ed..9912cf8d22e9c 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-12-20 +date: 2024-01-03 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 e4edf827ef2cd..494f4af5b8330 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-12-20 +date: 2024-01-03 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 983664d389a81..132b156c677ba 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-12-20 +date: 2024-01-03 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 d62e92b1a1e04..4f0a1d6d682a2 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 5ae9195fabe12..564a99f44d3af 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-12-20 +date: 2024-01-03 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 48375e038a4af..14043b1af7ccd 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 796aeae4062e1..76ecc24e5c503 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-12-20 +date: 2024-01-03 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 6d352e3966d99..5952a742ad198 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 beb7f0bcab789..a19f29ae4197d 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-12-20 +date: 2024-01-03 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 a82ba43928832..6edab56b60236 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 51be93e9e9f2e..6846a3f39744a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-12-20 +date: 2024-01-03 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 c61ba39a57398..2a1d929f82bc2 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 720dba137db81..8f7d5e9972bed 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-12-20 +date: 2024-01-03 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 537dff4ff66e1..ccca99c9c473f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-12-20 +date: 2024-01-03 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 2288c1079c75b..aa615696e5bca 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 6c0ebc1013fa6..803059f6fa37b 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 725618eba9325..0c13af1740585 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-12-20 +date: 2024-01-03 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 d72ca3b1a5406..cc38c174485a1 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-12-20 +date: 2024-01-03 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 b1361b01291ee..2673bb590a21b 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 4c3e1c497c694..68513b4bdc5bd 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-12-20 +date: 2024-01-03 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 e2c9d2f9413cc..a1921cc39f3ce 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-12-20 +date: 2024-01-03 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 ee8b10c4ce756..8d3c93253e39a 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-12-20 +date: 2024-01-03 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 9db659968e67e..5b90814ed5685 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-12-20 +date: 2024-01-03 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 c089cd897f9ba..d69ac1205fe9d 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 74b36dd06f458..4cb6047f567a5 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-12-20 +date: 2024-01-03 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 2230d89183b5f..89dbd5e19d512 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-12-20 +date: 2024-01-03 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 d3f8fb78d0d67..dd6d1cd901524 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 768a8cd40f2e9..2c8d82b3d13ce 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-12-20 +date: 2024-01-03 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 b93e199289958..4dab60cc6a5b0 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-12-20 +date: 2024-01-03 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 bec40b1c04f32..915c6a4406be4 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 0ac88141ae1ed..c88538f066da9 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-12-20 +date: 2024-01-03 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 b31ff349267de..8a458402df9d3 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 06f466e44a820..80aa7c0b186fc 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-12-20 +date: 2024-01-03 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 1181ce81c9fe0..3d129388e8d9b 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-12-20 +date: 2024-01-03 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 7f126ebb94d9d..03bf2b4697f27 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 0965a33c7bdd0..653a918f3428c 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-12-20 +date: 2024-01-03 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 09935c9dec33d..4f57c9886f97c 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: 2023-12-20 +date: 2024-01-03 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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 6f51d5f3a7c4d..4ba0d12a8120d 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-12-20 +date: 2024-01-03 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 df3bf00edb00f..e71fb6b97df1b 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-12-20 +date: 2024-01-03 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 1311abc8cb33b..a8c13d1fb6c78 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-12-20 +date: 2024-01-03 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 9623a6b3c92fb..04c5a4630b4e1 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-12-20 +date: 2024-01-03 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 4fbced2ccff16..05444f50727f5 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 869008aef7bb3..27c0944ded0b7 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: 2023-12-20 +date: 2024-01-03 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 02c1582cafe73..2cd19b347d1ee 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: 2023-12-20 +date: 2024-01-03 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 f70078f4c1cb9..941aa79576c78 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: 2023-12-20 +date: 2024-01-03 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 49242071d22cf..54cf31b1cfa91 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 375f32cca1a6b..92172339b303d 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 0e3f645e97aff..f1a231f2edd3b 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: 2023-12-20 +date: 2024-01-03 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 eb981a467633f..61c7ded7ee365 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-12-20 +date: 2024-01-03 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 70a7d2a2a36fb..3c1c971dc9643 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-12-20 +date: 2024-01-03 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 e865b4aa1aca3..fe8b3fa0b2eae 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-12-20 +date: 2024-01-03 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 6cb0c354c7e42..870a70ccc59a0 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.devdocs.json b/api_docs/kbn_visualization_ui_components.devdocs.json index 7390e6b1b8d42..fef2bfc2693e2 100644 --- a/api_docs/kbn_visualization_ui_components.devdocs.json +++ b/api_docs/kbn_visualization_ui_components.devdocs.json @@ -1945,39 +1945,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/visualization-ui-components", - "id": "def-public.TooltipWrapper", - "type": "Function", - "tags": [], - "label": "TooltipWrapper", - "description": [], - "signature": [ - "({ children, condition, tooltipContent, ...tooltipProps }: React.PropsWithChildren) => JSX.Element" - ], - "path": "packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/visualization-ui-components", - "id": "def-public.TooltipWrapper.$1", - "type": "CompoundType", - "tags": [], - "label": "{\n children,\n condition,\n tooltipContent,\n ...tooltipProps\n}", - "description": [], - "signature": [ - "React.PropsWithChildren" - ], - "path": "packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/visualization-ui-components", "id": "def-public.useDebouncedValue", diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index d5892e8d25007..4457643c9d519 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 154 | 0 | 151 | 3 | +| 152 | 0 | 149 | 3 | ## Client diff --git a/api_docs/kbn_visualization_utils.devdocs.json b/api_docs/kbn_visualization_utils.devdocs.json index d76530afc1e28..649bfd18f772a 100644 --- a/api_docs/kbn_visualization_utils.devdocs.json +++ b/api_docs/kbn_visualization_utils.devdocs.json @@ -67,6 +67,39 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/visualization-utils", + "id": "def-common.TooltipWrapper", + "type": "Function", + "tags": [], + "label": "TooltipWrapper", + "description": [], + "signature": [ + "({ children, condition, tooltipContent, ...tooltipProps }: React.PropsWithChildren) => JSX.Element" + ], + "path": "packages/kbn-visualization-utils/src/tooltip_wrapper.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/visualization-utils", + "id": "def-common.TooltipWrapper.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n children,\n condition,\n tooltipContent,\n ...tooltipProps\n}", + "description": [], + "signature": [ + "React.PropsWithChildren" + ], + "path": "packages/kbn-visualization-utils/src/tooltip_wrapper.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index db9bce5caa52f..83120f04b39b1 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 1 | 0 | +| 4 | 0 | 3 | 0 | ## Common diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 0322596c1aa40..068712904f1f3 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: 2023-12-20 +date: 2024-01-03 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 c937220df66e1..5bc2ac9d9b274 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index bf8661b5e7b4d..30d93558b2aab 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: 2023-12-20 +date: 2024-01-03 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 515a302398cec..900c0050bccc1 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 8d7cb865d9f39..e970238d6160b 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1163,54 +1163,6 @@ "plugin": "advancedSettings", "path": "src/plugins/advanced_settings/public/management_app/components/form/form.tsx" }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" - }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" - }, - { - "plugin": "exploratoryView", - "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" - }, { "plugin": "licenseManagement", "path": "x-pack/plugins/license_management/public/shared_imports.ts" @@ -1347,6 +1299,54 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/integrations/app.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" + }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" + }, + { + "plugin": "metricsDataAccess", + "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" + }, + { + "plugin": "metricsDataAccess", + "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" + }, + { + "plugin": "metricsDataAccess", + "path": "x-pack/plugins/metrics_data_access/public/apps/common_providers.tsx" + }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/public/shared_components/osquery_results/osquery_result_wrapper.tsx" @@ -1535,18 +1535,6 @@ "plugin": "crossClusterReplication", "path": "x-pack/plugins/cross_cluster_replication/public/app/index.tsx" }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, - { - "plugin": "globalSearchBar", - "path": "x-pack/plugins/global_search_bar/public/plugin.tsx" - }, { "plugin": "graph", "path": "x-pack/plugins/graph/public/application.tsx" @@ -2758,11 +2746,11 @@ }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts" + "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts" + "path": "x-pack/plugins/lens/public/trigger_actions/open_lens_config/edit_action_helpers.ts" }, { "plugin": "security", @@ -2888,6 +2876,22 @@ "plugin": "advancedSettings", "path": "src/plugins/advanced_settings/public/management_app/components/form/form.tsx" }, + { + "plugin": "telemetry", + "path": "src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx" + }, + { + "plugin": "telemetry", + "path": "src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/render_app.tsx" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/render_app.tsx" + }, { "plugin": "exploratoryView", "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/header/add_to_case_action.tsx" @@ -2984,22 +2988,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/integrations/components/header/header_portal.tsx" }, - { - "plugin": "telemetry", - "path": "src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx" - }, - { - "plugin": "telemetry", - "path": "src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx" - }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/render_app.tsx" - }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/render_app.tsx" - }, { "plugin": "timelines", "path": "x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx" @@ -3194,35 +3182,35 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/ingest_pipelines.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/stored_scripts.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/saved_objects.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/saved_objects.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/saved_objects.ts" + "path": "x-pack/plugins/security_solution/public/entity_analytics/deprecated_risk_engine/api/saved_objects.ts" }, { "plugin": "securitySolution", @@ -3503,6 +3491,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.useDarkMode", + "type": "Function", + "tags": [], + "label": "useDarkMode", + "description": [], + "signature": [ + "(defaultValue?: boolean | undefined) => boolean" + ], + "path": "src/plugins/kibana_react/public/dark_mode/use_dark_mode.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "kibanaReact", + "id": "def-public.useDarkMode.$1", + "type": "CompoundType", + "tags": [], + "label": "defaultValue", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/kibana_react/public/dark_mode/use_dark_mode.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "kibanaReact", "id": "def-public.useExecutionContext", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 0b959dc7f193c..f062f7a1978ef 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 161 | 0 | 127 | 3 | +| 163 | 0 | 129 | 3 | ## Client diff --git a/api_docs/kibana_utils.devdocs.json b/api_docs/kibana_utils.devdocs.json index 936391892cf5b..5e1c4d861f7cf 100644 --- a/api_docs/kibana_utils.devdocs.json +++ b/api_docs/kibana_utils.devdocs.json @@ -6941,57 +6941,6 @@ "initialIsOpen": false } ], - "setup": { - "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsPublicSetup", - "type": "Interface", - "tags": [], - "label": "KibanaUtilsPublicSetup", - "description": [], - "path": "src/plugins/kibana_utils/public/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsPublicSetup.setVersion", - "type": "Function", - "tags": [], - "label": "setVersion", - "description": [], - "signature": [ - "(history: Pick<", - "History", - ", \"replace\" | \"location\">) => void" - ], - "path": "src/plugins/kibana_utils/public/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsPublicSetup.setVersion.$1", - "type": "Object", - "tags": [], - "label": "history", - "description": [], - "signature": [ - "Pick<", - "History", - ", \"replace\" | \"location\">" - ], - "path": "src/plugins/kibana_utils/public/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "lifecycle": "setup", - "initialIsOpen": true - }, "start": { "parentPluginId": "kibanaUtils", "id": "def-public.KibanaUtilsPublicStart", diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index c5f2f8fc2ee45..51a97b2547ba7 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; @@ -21,13 +21,10 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 611 | 3 | 418 | 9 | +| 609 | 3 | 416 | 9 | ## Client -### Setup - - ### Start diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 3288494857432..ddd27527049c5 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 48dc406105739..77331951572fc 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -502,7 +502,7 @@ "signature": [ "(startDependencies: ", "LensPluginStartDependencies", - ") => Promise" + ", isNewPanel?: boolean | undefined, deletePanel?: (() => void) | undefined) => Promise" ], "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", "deprecated": false, @@ -522,6 +522,36 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "lens", + "id": "def-public.Embeddable.openConfingPanel.$2", + "type": "CompoundType", + "tags": [], + "label": "isNewPanel", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "lens", + "id": "def-public.Embeddable.openConfingPanel.$3", + "type": "Function", + "tags": [], + "label": "deletePanel", + "description": [], + "signature": [ + "(() => void) | undefined" + ], + "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index dee02d6eee013..77b173434d849 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 642 | 0 | 543 | 60 | +| 644 | 0 | 545 | 60 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 65406175b3779..dd62dc6469ab8 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-12-20 +date: 2024-01-03 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 028dc38a5a860..22ba90cd24a27 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-12-20 +date: 2024-01-03 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 c63f1231b414d..cc0934bb97f61 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-12-20 +date: 2024-01-03 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 5a61455b54f89..cd5906c590ddc 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: 2023-12-20 +date: 2024-01-03 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 9d0c651ee081d..459851d88d76a 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 5ec0351c769a4..0f86843637c18 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index abc6f480bf76b..8b6055b3dc3f0 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: 2023-12-20 +date: 2024-01-03 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 ce0aac83f4b29..21d1f4112a115 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-12-20 +date: 2024-01-03 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 c90b38e41ad5b..b38008b55d907 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-12-20 +date: 2024-01-03 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 3be1cb138f694..11ea4193bf725 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-12-20 +date: 2024-01-03 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 b447b5fee0d23..0c4cfa7f55142 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: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 46c0e7d8ec219..b911654079efc 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1053,6 +1053,34 @@ "initialIsOpen": false } ], + "setup": { + "parentPluginId": "ml", + "id": "def-public.MlPluginSetup", + "type": "Type", + "tags": [], + "label": "MlPluginSetup", + "description": [], + "signature": [ + "{ locator?: ", + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorPublic", + "text": "LocatorPublic" + }, + "<", + "MlLocatorParams", + "> | undefined; elasticModels?: ", + "ElasticModels", + " | undefined; }" + ], + "path": "x-pack/plugins/ml/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "setup", + "initialIsOpen": true + }, "start": { "parentPluginId": "ml", "id": "def-public.MlPluginStart", @@ -1073,7 +1101,461 @@ "MlLocatorParams", "> | undefined; elasticModels?: ", "ElasticModels", - " | undefined; }" + " | undefined; mlApi?: { getJobs(obj?: { jobId?: string | undefined; } | undefined): Promise<{ jobs: ", + "MlJob", + "[]; count: number; }>; getJobs$(obj?: { jobId?: string | undefined; } | undefined): ", + "Observable", + "<{ count: number; jobs: ", + "MlJob", + "[]; }>; getJobStats(obj: { jobId?: string | undefined; }): Promise<{ jobs: ", + "MlJobStats", + "[]; count: number; }>; addJob({ jobId, job }: { jobId: string; job: ", + "MlJob", + "; }): Promise<", + "MlPutJobResponse", + ">; openJob({ jobId }: { jobId: string; }): Promise; closeJob({ jobId }: { jobId: string; }): Promise; forceCloseJob({ jobId }: { jobId: string; }): Promise; deleteJob({ jobId }: { jobId: string; }): Promise<", + "AcknowledgedResponseBase", + ">; forceDeleteJob({ jobId }: { jobId: string; }): Promise<", + "AcknowledgedResponseBase", + ">; updateJob({ jobId, job }: { jobId: string; job: ", + "MlJob", + "; }): Promise; estimateBucketSpan(obj: ", + "BucketSpanEstimatorData", + "): Promise<", + "BucketSpanEstimatorResponse", + ">; validateJob(payload: { job: ", + "CombinedJob", + "; duration: { start?: number | undefined; end?: number | undefined; }; fields?: any[] | undefined; }): Promise; validateDatafeedPreview(payload: { job: ", + "CombinedJob", + "; start?: number | undefined; end?: number | undefined; }): Promise<", + "DatafeedValidationResponse", + ">; validateCardinality$(job: ", + "CombinedJob", + "): ", + "Observable", + "<", + "CardinalityValidationResults", + ">; getDatafeeds(obj: { datafeedId: string; }): Promise; getDatafeedStats(obj: { datafeedId: string; }): Promise; addDatafeed({ datafeedId, datafeedConfig }: { datafeedId: string; datafeedConfig: ", + "MlDatafeed", + "; }): Promise<", + "MlPutDatafeedResponse", + ">; updateDatafeed({ datafeedId, datafeedConfig, }: { datafeedId: string; datafeedConfig: Partial<", + "MlDatafeed", + ">; }): Promise; deleteDatafeed({ datafeedId }: { datafeedId: string; }): Promise; forceDeleteDatafeed({ datafeedId }: { datafeedId: string; }): Promise; startDatafeed({ datafeedId, start, end, }: { datafeedId: string; start?: number | undefined; end?: number | undefined; }): Promise; stopDatafeed({ datafeedId }: { datafeedId: string; }): Promise; forceStopDatafeed({ datafeedId }: { datafeedId: string; }): Promise; datafeedPreview({ datafeedId }: { datafeedId: string; }): Promise; validateDetector({ detector }: { detector: ", + "MlDetector", + "; }): Promise; forecast({ jobId, duration }: { jobId: string; duration?: string | undefined; }): Promise; overallBuckets({ jobId, topN, bucketSpan, start, end, overallScore, }: { jobId: string; topN: string; bucketSpan: string; start: number; end: number; overallScore?: number | undefined; }): Promise; hasPrivileges(obj: any): Promise<", + "MlHasPrivilegesResponse", + ">; checkMlCapabilities(): Promise<", + "MlCapabilitiesResponse", + ">; checkIndicesExists({ indices }: { indices: string[]; }): Promise>; getFieldCaps({ index, fields }: { index: string; fields: string[]; }): Promise; recognizeIndex({ indexPatternTitle, filter, }: { indexPatternTitle: string; filter?: string[] | undefined; }): Promise<", + "RecognizeResult", + "[]>; listDataRecognizerModules(filter?: string[] | undefined): Promise; getDataRecognizerModule({ moduleId, filter }: { moduleId: string; filter?: string[] | undefined; }): Promise<", + "Module", + ">; dataRecognizerModuleJobsExist({ moduleId }: { moduleId: string; }): Promise; setupDataRecognizerConfig({ moduleId, prefix, groups, indexPatternName, query, useDedicatedIndex, startDatafeed, start, end, jobOverrides, estimateModelMemory, }: { moduleId: string; prefix?: string | undefined; groups?: string[] | undefined; indexPatternName?: string | undefined; query?: any; useDedicatedIndex?: boolean | undefined; startDatafeed?: boolean | undefined; start?: number | undefined; end?: number | undefined; jobOverrides?: Partial<", + "MlJob", + ">[] | undefined; estimateModelMemory?: boolean | undefined; }): Promise<", + "DataRecognizerConfigResponse", + ">; getVisualizerFieldHistograms({ indexPattern, query, fields, samplerShardSize, runtimeMappings, }: { indexPattern: string; query: any; fields: ", + "FieldHistogramRequestConfig", + "[]; samplerShardSize?: number | undefined; runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined; }): Promise; calendars(obj?: { calendarId?: string | undefined; calendarIds?: string[] | undefined; } | undefined): Promise<", + "Calendar", + "[]>; addCalendar(obj: ", + "Calendar", + "): Promise; updateCalendar(obj: ", + "UpdateCalendar", + "): Promise; deleteCalendar({ calendarId }: { calendarId?: string | undefined; }): Promise; mlNodeCount(): Promise<", + "MlNodeCount", + ">; mlInfo(): Promise<", + "MlInfoResponse", + ">; calculateModelMemoryLimit$({ datafeedConfig, analysisConfig, indexPattern, query, timeFieldName, earliestMs, latestMs, }: { datafeedConfig?: ", + "MlDatafeed", + " | undefined; analysisConfig: ", + "MlAnalysisConfig", + "; indexPattern: string; query: any; timeFieldName: string; earliestMs: number; latestMs: number; }): ", + "Observable", + "<{ modelMemoryLimit: string; }>; getCardinalityOfFields({ index, fieldNames, query, timeFieldName, earliestMs, latestMs, }: { index: string; fieldNames: string[]; query: any; timeFieldName: string; earliestMs: number; latestMs: number; }): Promise; getTimeFieldRange({ index, timeFieldName, query, runtimeMappings, indicesOptions, allowFutureTime, }: { index: string; timeFieldName?: string | undefined; query: any; runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined; indicesOptions?: ", + "IndicesOptions", + " | undefined; allowFutureTime?: boolean | undefined; }): Promise<", + "GetTimeFieldRangeResponse", + ">; esSearch(obj: any): Promise; esSearch$(obj: any): ", + "Observable", + "; getIndices(): Promise<{ name: string; }[]>; getModelSnapshots(jobId: string, snapshotId?: string | undefined): Promise<", + "GetModelSnapshotsResponse", + ">; updateModelSnapshot(jobId: string, snapshotId: string, body: { description?: string | undefined; retain?: boolean | undefined; }): Promise; deleteModelSnapshot(jobId: string, snapshotId: string): Promise; reindexWithPipeline(pipelineName: string, sourceIndex: string, destinationIndex: string): Promise<", + "ReindexResponse", + ">; annotations: { getAnnotations$(obj: { jobIds: string[]; earliestMs: number; latestMs: number; maxAnnotations: number; detectorIndex?: number | undefined; entities?: any[] | undefined; }): ", + "Observable", + "<", + "GetAnnotationsResponse", + ">; getAnnotations(obj: { jobIds: string[]; earliestMs: number | null; latestMs: number | null; maxAnnotations: number; detectorIndex?: number | undefined; entities?: any[] | undefined; }): Promise<", + "GetAnnotationsResponse", + ">; indexAnnotation(obj: ", + "Annotation", + "): Promise; deleteAnnotation(id: string): Promise; }; dataFrameAnalytics: { getDataFrameAnalytics(analyticsId?: string | undefined, excludeGenerated?: boolean | undefined, size?: number | undefined): Promise<", + "GetDataFrameAnalyticsResponse", + ">; getDataFrameAnalyticsStats(analyticsId?: string | undefined): Promise<", + "GetDataFrameAnalyticsStatsResponse", + ">; createDataFrameAnalytics(analyticsId: string, analyticsConfig: ", + "DeepPartial", + "<", + { + "pluginId": "@kbn/ml-data-frame-analytics-utils", + "scope": "common", + "docId": "kibKbnMlDataFrameAnalyticsUtilsPluginApi", + "section": "def-common.DataFrameAnalyticsConfig", + "text": "DataFrameAnalyticsConfig" + }, + ">, createDataView?: boolean, timeFieldName?: string | undefined): Promise; updateDataFrameAnalytics(analyticsId: string, updateConfig: ", + { + "pluginId": "@kbn/ml-data-frame-analytics-utils", + "scope": "common", + "docId": "kibKbnMlDataFrameAnalyticsUtilsPluginApi", + "section": "def-common.UpdateDataFrameAnalyticsConfig", + "text": "UpdateDataFrameAnalyticsConfig" + }, + "): Promise; getDataFrameAnalyticsMap(id: string, treatAsRoot: boolean, type?: string | undefined): Promise<", + { + "pluginId": "@kbn/ml-data-frame-analytics-utils", + "scope": "common", + "docId": "kibKbnMlDataFrameAnalyticsUtilsPluginApi", + "section": "def-common.AnalyticsMapReturnType", + "text": "AnalyticsMapReturnType" + }, + ">; jobsExist(analyticsIds: string[], allSpaces?: boolean): Promise<", + "JobsExistsResponse", + ">; evaluateDataFrameAnalytics(evaluateConfig: any): Promise; explainDataFrameAnalytics(jobConfig: ", + "DeepPartial", + "<", + { + "pluginId": "@kbn/ml-data-frame-analytics-utils", + "scope": "common", + "docId": "kibKbnMlDataFrameAnalyticsUtilsPluginApi", + "section": "def-common.DataFrameAnalyticsConfig", + "text": "DataFrameAnalyticsConfig" + }, + ">): Promise; deleteDataFrameAnalytics(analyticsId: string): Promise; deleteDataFrameAnalyticsAndDestIndex(analyticsId: string, deleteDestIndex: boolean, deleteDestDataView: boolean): Promise<", + "DeleteDataFrameAnalyticsWithIndexResponse", + ">; startDataFrameAnalytics(analyticsId: string): Promise; stopDataFrameAnalytics(analyticsId: string, force?: boolean): Promise; getAnalyticsAuditMessages(analyticsId: string): Promise<", + "JobMessage", + "[]>; validateDataFrameAnalytics(analyticsConfig: ", + "DeepPartial", + "<", + { + "pluginId": "@kbn/ml-data-frame-analytics-utils", + "scope": "common", + "docId": "kibKbnMlDataFrameAnalyticsUtilsPluginApi", + "section": "def-common.DataFrameAnalyticsConfig", + "text": "DataFrameAnalyticsConfig" + }, + ">): Promise<", + "ValidateAnalyticsJobResponse", + ">; newJobCapsAnalytics(indexPatternTitle: string, isRollup?: boolean): Promise<", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.NewJobCapsResponse", + "text": "NewJobCapsResponse" + }, + ">; }; filters: { filters(obj?: { filterId?: string | undefined; } | undefined): Promise<", + "Filter", + "[]>; filtersStats(): Promise<", + "FilterStats", + "[]>; addFilter(filterId: string, description: string, items: string[]): Promise<", + "Filter", + ">; updateFilter(filterId: string, description: string, addItems: string[], removeItems: string[]): Promise<", + "Filter", + ">; deleteFilter(filterId: string): Promise<{ acknowledged: boolean; }>; }; results: { getAnomaliesTableData(jobIds: string[], criteriaFields: string[], influencers: ", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.MlEntityField", + "text": "MlEntityField" + }, + "[], aggregationInterval: string, threshold: number, earliestMs: number, latestMs: number, dateFormatTz: string, maxRecords: number, maxExamples?: number | undefined, influencersFilterQuery?: any, functionDescription?: string | undefined): ", + "Observable", + "; getMaxAnomalyScore(jobIds: string[], earliestMs: number, latestMs: number): Promise; getCategoryDefinition(jobId: string, categoryId: string): Promise<", + "CategoryDefinition", + ">; getCategoryExamples(jobId: string, categoryIds: string[], maxExamples: number): Promise; fetchPartitionFieldsValues(jobId: string, searchTerm: Record, criteriaFields: { fieldName: string; fieldValue: any; }[], earliestMs: number, latestMs: number, fieldsConfig?: ", + "PartitionFieldsConfig", + "): ", + "Observable", + "<", + "PartitionFieldsDefinition", + ">; anomalySearch(query: ", + "SearchRequest", + ", jobIds: string[]): Promise<", + { + "pluginId": "@kbn/es-types", + "scope": "common", + "docId": "kibKbnEsTypesPluginApi", + "section": "def-common.ESSearchResponse", + "text": "ESSearchResponse" + }, + "<", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.MlAnomalyRecordDoc", + "text": "MlAnomalyRecordDoc" + }, + ", ", + "SearchRequest", + ", { restTotalHitsAsInt: false; }>>; anomalySearch$(query: ", + "SearchRequest", + ", jobIds: string[]): ", + "Observable", + "<", + { + "pluginId": "@kbn/es-types", + "scope": "common", + "docId": "kibKbnEsTypesPluginApi", + "section": "def-common.ESSearchResponse", + "text": "ESSearchResponse" + }, + "<", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.MlAnomalyRecordDoc", + "text": "MlAnomalyRecordDoc" + }, + ", ", + "SearchRequest", + ", { restTotalHitsAsInt: false; }>>; getCategoryStoppedPartitions(jobIds: string[], fieldToBucket?: \"job_id\" | \"partition_field_value\" | undefined): Promise<", + "GetStoppedPartitionResult", + ">; getDatafeedResultChartData(jobId: string, start: number, end: number): Promise<", + "GetDatafeedResultsChartDataResult", + ">; getAnomalyCharts$(jobIds: string[], influencers: ", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.MlEntityField", + "text": "MlEntityField" + }, + "[], threshold: number, earliestMs: number, latestMs: number, timeBounds: { min?: number | undefined; max?: number | undefined; }, maxResults: number, numberOfPoints: number, influencersFilterQuery?: ", + "QueryDslQueryContainer", + " | undefined): ", + "Observable", + "<", + "ExplorerChartsData", + ">; getAnomalyRecords$(jobIds: string[], criteriaFields: ", + "CriteriaField", + "[], severity: number, earliestMs: number | null, latestMs: number | null, interval: string, functionDescription?: string | undefined): ", + "Observable", + "<{ success: boolean; records: ", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.MlAnomalyRecordDoc", + "text": "MlAnomalyRecordDoc" + }, + "[]; }>; }; jobs: { jobsSummary(jobIds: string[]): Promise<", + "MlSummaryJobs", + ">; jobIdsWithGeo(): Promise; jobsWithTimerange(dateFormatTz: string): Promise<{ jobs: ", + "MlJobWithTimeRange", + "[]; jobsMap: ", + "Dictionary", + "<", + "MlJobWithTimeRange", + ">; }>; jobForCloning(jobId: string, retainCreatedBy?: boolean): Promise<{ job?: ", + "MlJob", + " | undefined; datafeed?: ", + "MlDatafeed", + " | undefined; } | undefined>; jobs(jobIds: string[]): Promise<", + "CombinedJobWithStats", + "[]>; groups(): Promise<", + "Group", + "[]>; updateGroups(updatedJobs: { jobId: string; groups: string[]; }[]): Promise; forceStartDatafeeds(datafeedIds: string[], start: string, end: string): Promise; stopDatafeeds(datafeedIds: string[]): Promise; deleteJobs(jobIds: string[], deleteUserAnnotations?: boolean | undefined): Promise; closeJobs(jobIds: string[]): Promise; resetJobs(jobIds: string[], deleteUserAnnotations?: boolean | undefined): Promise<", + "ResetJobsResponse", + ">; forceStopAndCloseJob(jobId: string): Promise<{ success: boolean; }>; jobAuditMessages({ jobId, from, start, end, }: { jobId: string; from?: number | undefined; start?: string | undefined; end?: string | undefined; }): Promise<{ messages: ", + "JobMessage", + "[]; notificationIndices: string[]; }>; clearJobAuditMessages(jobId: string, notificationIndices: string[]): Promise<{ success: boolean; latest_cleared: number; }>; blockingJobTasks(): Promise>; jobsExist(jobIds: string[], allSpaces?: boolean): Promise<", + "JobsExistResponse", + ">; jobsExist$(jobIds: string[], allSpaces?: boolean): ", + "Observable", + "<", + "JobsExistResponse", + ">; newJobCaps(indexPatternTitle: string, isRollup?: boolean): Promise; newJobLineChart(indexPatternTitle: string, timeField: string, start: number, end: number, intervalMs: number, query: any, aggFieldNamePairs: ", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.AggFieldNamePair", + "text": "AggFieldNamePair" + }, + "[], splitFieldName: string | null, splitFieldValue: string | null, runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined, indicesOptions?: ", + "IndicesOptions", + " | undefined): Promise; newJobPopulationsChart(indexPatternTitle: string, timeField: string, start: number, end: number, intervalMs: number, query: any, aggFieldNamePairs: ", + { + "pluginId": "@kbn/ml-anomaly-utils", + "scope": "common", + "docId": "kibKbnMlAnomalyUtilsPluginApi", + "section": "def-common.AggFieldNamePair", + "text": "AggFieldNamePair" + }, + "[], splitFieldName: string, runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined, indicesOptions?: ", + "IndicesOptions", + " | undefined): Promise; getAllJobAndGroupIds(): Promise<", + "ExistingJobsAndGroups", + ">; getLookBackProgress(jobId: string, start: number, end: number): Promise<{ progress: number; isRunning: boolean; isJobClosed: boolean; }>; categorizationFieldExamples(indexPatternTitle: string, query: any, size: number, field: string, timeField: string, start: number, end: number, analyzer: ", + { + "pluginId": "@kbn/ml-category-validator", + "scope": "common", + "docId": "kibKbnMlCategoryValidatorPluginApi", + "section": "def-common.CategorizationAnalyzer", + "text": "CategorizationAnalyzer" + }, + ", runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined, indicesOptions?: ", + "IndicesOptions", + " | undefined, includeExamples?: boolean | undefined): Promise<", + { + "pluginId": "@kbn/ml-category-validator", + "scope": "common", + "docId": "kibKbnMlCategoryValidatorPluginApi", + "section": "def-common.FieldValidationResults", + "text": "FieldValidationResults" + }, + ">; topCategories(jobId: string, count: number): Promise<{ total: number; categories: { count?: number | undefined; category: ", + "Category", + "; }[]; }>; revertModelSnapshot(jobId: string, snapshotId: string, replay: boolean, end?: number | undefined, calendarEvents?: { start: number; end: number; description: string; }[] | undefined): Promise<{ success: boolean; }>; datafeedPreview(datafeedId?: string | undefined, job?: ", + "MlJob", + " | undefined, datafeed?: ", + "MlDatafeed", + " | undefined): Promise; bulkCreateJobs(jobs: { job: ", + "MlJob", + "; datafeed: ", + "MlDatafeed", + "; } | { job: ", + "MlJob", + "; datafeed: ", + "MlDatafeed", + "; }[]): Promise<", + "BulkCreateResults", + ">; }; savedObjects: { jobsSpaces(): Promise<", + "JobsSpacesResponse", + ">; updateJobsSpaces(jobType: ", + "JobType", + ", jobIds: string[], spacesToAdd: string[], spacesToRemove: string[]): Promise<", + "SavedObjectResult", + ">; removeItemFromCurrentSpace(mlSavedObjectType: ", + "MlSavedObjectType", + ", ids: string[]): Promise<", + "SavedObjectResult", + ">; syncSavedObjects(simulate?: boolean): Promise<", + "SyncSavedObjectResponse", + ">; initSavedObjects(simulate?: boolean): Promise<", + "InitializeSavedObjectResponse", + ">; syncCheck(mlSavedObjectType?: ", + "MlSavedObjectType", + " | undefined): Promise<", + "SyncCheckResponse", + ">; canDeleteMLSpaceAwareItems(mlSavedObjectType: ", + "MlSavedObjectType", + ", ids: string[]): Promise<", + "CanDeleteMLSpaceAwareItemsResponse", + ">; trainedModelsSpaces(): Promise<", + "TrainedModelsSpacesResponse", + ">; updateModelsSpaces(modelIds: string[], spacesToAdd: string[], spacesToRemove: string[]): Promise<", + "SavedObjectResult", + ">; }; trainedModels: { getTrainedModelDownloads(): Promise<", + { + "pluginId": "@kbn/ml-trained-models-utils", + "scope": "common", + "docId": "kibKbnMlTrainedModelsUtilsPluginApi", + "section": "def-common.ModelDefinitionResponse", + "text": "ModelDefinitionResponse" + }, + "[]>; getElserConfig(options?: ", + { + "pluginId": "@kbn/ml-trained-models-utils", + "scope": "common", + "docId": "kibKbnMlTrainedModelsUtilsPluginApi", + "section": "def-common.GetModelDownloadConfigOptions", + "text": "GetModelDownloadConfigOptions" + }, + " | undefined): Promise<", + { + "pluginId": "@kbn/ml-trained-models-utils", + "scope": "common", + "docId": "kibKbnMlTrainedModelsUtilsPluginApi", + "section": "def-common.ModelDefinitionResponse", + "text": "ModelDefinitionResponse" + }, + ">; getTrainedModels(modelId?: string | string[] | undefined, params?: ", + "InferenceQueryParams", + " | undefined): Promise<", + "TrainedModelConfigResponse", + "[]>; getTrainedModelStats(modelId?: string | string[] | undefined, params?: ", + "InferenceStatsQueryParams", + " | undefined): Promise<", + "InferenceStatsResponse", + ">; getTrainedModelPipelines(modelId: string | string[]): Promise<", + "ModelPipelines", + "[]>; getAllIngestPipelines(): Promise<", + "NodesOverviewResponse", + ">; createInferencePipeline(pipelineName: string, pipeline: ", + "IngestPipeline", + "): Promise<", + "IngestSimulateResponse", + ">; deleteTrainedModel(modelId: string, options?: { with_pipelines?: boolean | undefined; force?: boolean | undefined; }): Promise<{ acknowledge: boolean; }>; getTrainedModelsNodesOverview(): Promise<", + "NodesOverviewResponse", + ">; startModelAllocation(modelId: string, queryParams?: { number_of_allocations: number; threads_per_allocation: number; priority: \"normal\" | \"low\"; deployment_id?: string | undefined; } | undefined): Promise<{ acknowledge: boolean; }>; stopModelAllocation(modelId: string, deploymentsIds: string[], options?: { force: boolean; }): Promise>; updateModelDeployment(modelId: string, deploymentId: string, params: { number_of_allocations: number; }): Promise<{ acknowledge: boolean; }>; inferTrainedModel(modelId: string, deploymentsId: string, payload: { docs: Record[]; inference_config?: ", + "MlInferenceConfigUpdateContainer", + " | undefined; } | undefined, timeout?: string | undefined): Promise<", + "MlInferTrainedModelResponse", + ">; trainedModelPipelineSimulate(pipeline: ", + "IngestPipeline", + ", docs: ", + "IngestSimulateDocument", + "[]): Promise<", + "IngestSimulateResponse", + ">; memoryUsage(type?: ", + "MlSavedObjectType", + " | undefined, node?: string | undefined, showClosedJobs?: boolean): Promise<", + "MemoryUsageInfo", + "[]>; putTrainedModelConfig(modelId: string, config: object): Promise<", + "MlTrainedModelConfig", + ">; installElasticTrainedModelConfig(modelId: string): Promise<", + "MlTrainedModelConfig", + ">; }; notifications: { findMessages(params: ", + "NotificationsQueryParams", + "): Promise<", + "NotificationsSearchResponse", + ">; countMessages$(params: ", + "NotificationsCountQueryParams", + "): ", + "Observable", + "<", + "NotificationsCountResponse", + ">; }; jsonSchema: { getSchemaDefinition(params: ", + "GetSchemaDefinitionParams", + "): Promise; }; } | undefined; }" ], "path": "x-pack/plugins/ml/public/plugin.ts", "deprecated": false, @@ -1942,6 +2424,8 @@ "section": "def-common.ModelDefinitionResponse", "text": "ModelDefinitionResponse" }, + ">; installElasticModel(modelId: string): Promise<", + "MlTrainedModelConfig", ">; }" ], "path": "x-pack/plugins/ml/server/shared.ts", @@ -2572,6 +3056,22 @@ "initialIsOpen": false } ], - "objects": [] + "objects": [ + { + "parentPluginId": "ml", + "id": "def-common.ML_ALERT_TYPES", + "type": "Object", + "tags": [], + "label": "ML_ALERT_TYPES", + "description": [], + "signature": [ + "{ readonly ANOMALY_DETECTION: \"xpack.ml.anomaly_detection_alert\"; readonly AD_JOBS_HEALTH: \"xpack.ml.anomaly_detection_jobs_health\"; }" + ], + "path": "x-pack/plugins/ml/common/constants/alerts.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 62bd3e5f384eb..bbb4846ee65ec 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 150 | 3 | 64 | 33 | +| 151 | 3 | 65 | 95 | ## Client +### Setup + + ### Start @@ -62,6 +65,9 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi ## Common +### Objects + + ### Functions diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index e1fe1f71f6d7f..80aac90bc6263 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: 2023-12-20 +date: 2024-01-03 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 f3f50e0bce9df..0b77040cf831e 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-12-20 +date: 2024-01-03 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 b6f63e843feb0..4e375924fb996 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-12-20 +date: 2024-01-03 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 3dd539ffa14ba..53f14005f29da 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-12-20 +date: 2024-01-03 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 80236314935b7..1a184b5a94b66 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-12-20 +date: 2024-01-03 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 eb47ec2711c68..08b58bf9ae33f 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: 2023-12-20 +date: 2024-01-03 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 adcdf65421338..502d1e6ac2292 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-12-20 +date: 2024-01-03 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 deb64ecc9534e..423280f403ac4 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -14435,79 +14435,6 @@ } ] }, - { - "parentPluginId": "observability", - "id": "def-server.uiSettings.profilingUseLegacyCo2Calculation", - "type": "Object", - "tags": [], - "label": "[profilingUseLegacyCo2Calculation]", - "description": [], - "path": "x-pack/plugins/observability/server/ui_settings.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observability", - "id": "def-server.uiSettings.profilingUseLegacyCo2Calculation.category", - "type": "Array", - "tags": [], - "label": "category", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/observability/server/ui_settings.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-server.uiSettings.profilingUseLegacyCo2Calculation.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "x-pack/plugins/observability/server/ui_settings.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-server.uiSettings.profilingUseLegacyCo2Calculation.value", - "type": "boolean", - "tags": [], - "label": "value", - "description": [], - "signature": [ - "false" - ], - "path": "x-pack/plugins/observability/server/ui_settings.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observability", - "id": "def-server.uiSettings.profilingUseLegacyCo2Calculation.schema", - "type": "Object", - "tags": [], - "label": "schema", - "description": [], - "signature": [ - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.Type", - "text": "Type" - }, - "" - ], - "path": "x-pack/plugins/observability/server/ui_settings.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, { "parentPluginId": "observability", "id": "def-server.uiSettings.profilingAWSCostDiscountRate", @@ -16196,21 +16123,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "observability", - "id": "def-common.profilingUseLegacyCo2Calculation", - "type": "string", - "tags": [], - "label": "profilingUseLegacyCo2Calculation", - "description": [], - "signature": [ - "\"observability:profilingUseLegacyCo2Calculation\"" - ], - "path": "x-pack/plugins/observability/common/ui_settings_keys.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "observability", "id": "def-common.ruleDetailsLocatorID", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index f27da99a8627f..d468bbe94eafc 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 609 | 2 | 600 | 17 | +| 603 | 2 | 594 | 17 | ## Client diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index 9d3e36465047c..9f6c3916d3271 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -799,7 +799,7 @@ "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", @@ -865,7 +865,7 @@ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }, TEndpoint> & Omit & { signal: AbortSignal | null; }>) => Promise<", @@ -1305,7 +1305,7 @@ "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", @@ -1371,7 +1371,7 @@ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }, TEndpoint>>" @@ -2051,7 +2051,7 @@ "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", @@ -2117,7 +2117,7 @@ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", @@ -2566,7 +2566,7 @@ "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", @@ -2632,7 +2632,7 @@ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT | undefined; handler: ({}: any) => Promise; } & ", @@ -3217,7 +3217,7 @@ "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", @@ -3283,7 +3283,7 @@ "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", "Readable", " | ", - "CreateChatCompletionResponse", + "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }" diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index c32c8a3b28b8d..d7ce131b6a005 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 9f33390c3e3fd..9c960bc052bf9 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index aba1582e714bb..0e5003d939247 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 1cb30444ed915..4f59ae57937f2 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 7c844e7c20890..609775afeb479 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index f402851a03758..a5e6430fdf179 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 17f08e2dbc889..81175579f00cd 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,31 +15,31 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 738 | 628 | 41 | +| 739 | 629 | 41 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 77948 | 234 | 66667 | 1632 | +| 78142 | 234 | 66861 | 1696 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 269 | 0 | 263 | 31 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 276 | 0 | 270 | 31 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 17 | 1 | 15 | 2 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 70 | 1 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 823 | 1 | 792 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 825 | 1 | 794 | 51 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 125 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 83 | 1 | 73 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 114 | 0 | 94 | 27 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 115 | 0 | 95 | 27 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 268 | 2 | 253 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 72 | 0 | 16 | 0 | | cloudChat | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 0 | 0 | 0 | 0 | @@ -116,11 +116,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 123 | 2 | 96 | 4 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 161 | 0 | 127 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 163 | 0 | 129 | 3 | | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 611 | 3 | 418 | 9 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 609 | 3 | 416 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 642 | 0 | 543 | 60 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 644 | 0 | 545 | 60 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -133,7 +133,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 260 | 0 | 259 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 7 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 150 | 3 | 64 | 33 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 151 | 3 | 65 | 95 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 25 | 0 | 19 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 15 | 3 | 13 | 1 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 9 | 0 | 9 | 0 | @@ -141,7 +141,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 609 | 2 | 600 | 17 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 603 | 2 | 594 | 17 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 75 | 0 | 73 | 13 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 18 | 0 | 18 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | @@ -189,7 +189,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 240 | 1 | 196 | 17 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 592 | 1 | 566 | 58 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 595 | 1 | 569 | 58 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 135 | 0 | 93 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 11 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 10 | 0 | 7 | 2 | @@ -454,7 +454,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 35125 | 0 | 34718 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 98 | 0 | 78 | 6 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 104 | 0 | 84 | 6 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 30 | 0 | 30 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 48 | 0 | 33 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 1 | @@ -491,6 +491,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 108 | 0 | 107 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 7 | 0 | 5 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 181 | 0 | 178 | 0 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 172 | 0 | 172 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 1 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 1 | 1 | @@ -573,11 +574,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 0 | | | [@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) | - | 119 | 0 | 116 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 120 | 0 | 117 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 75 | 0 | 75 | 0 | -| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2649 | 0 | 2649 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 27 | 1 | 26 | 0 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 2663 | 0 | 2663 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 25 | 0 | 25 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 82 | 0 | 35 | 0 | @@ -679,8 +680,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 0 | 16 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 24 | 0 | 14 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 154 | 0 | 151 | 3 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 2 | 0 | 1 | 0 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 152 | 0 | 149 | 3 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 4 | 0 | 3 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 13 | 0 | 13 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 2 | 0 | | | [@elastic/security-detection-rule-management](https://github.com/orgs/elastic/teams/security-detection-rule-management) | - | 18 | 0 | 9 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 82c72d0602be1..e56d71cb98bcc 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-12-20 +date: 2024-01-03 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 d86926dbc6124..f39051a371ff7 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-12-20 +date: 2024-01-03 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 a4dfcf9221f7a..d7f8672329881 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: 2023-12-20 +date: 2024-01-03 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 0e3fc6069c67e..b109b3446cecf 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-12-20 +date: 2024-01-03 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 f777f625117c2..31a3da2b5ab6d 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-12-20 +date: 2024-01-03 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 02240413d6193..cea802f9971f4 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 20f9ca21e639c..b870959636a99 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 79e5feb5fdcfe..69eb6b0b86f3e 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 23c28ea734930..6bb60e236065f 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index a0b3d295f0609..e4f06dedc68c9 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index ac7ac641a56a8..240f5379146d0 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 10b8f4ef1b30c..5f0850edfd8ba 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 2d2c31c35d6d4..b8fd6f76fcc4a 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 080da486d6653..60ed1196eb3fc 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 78133a696a999..ab659d230c860 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index dc5de4e95bdc1..cfd2c82a6d31a 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index d89c9efeeed03..4bf743a49f344 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index a709f1d217625..c50901f256cad 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -114,7 +114,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantRagOnAlerts: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly alertSuppressionForThresholdRuleEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/plugin.tsx", "deprecated": false, @@ -473,7 +473,7 @@ "label": "data", "description": [], "signature": [ - "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; description: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; query: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, @@ -568,7 +568,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"assistantStreamingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"assistantRagOnAlerts\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"alertSuppressionForThresholdRuleEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | undefined" + "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"assistantStreamingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -648,7 +648,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"assistantStreamingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"assistantRagOnAlerts\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"alertSuppressionForThresholdRuleEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | undefined" + "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"assistantStreamingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"entityAnalyticsAssetCriticalityEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1913,7 +1913,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantRagOnAlerts: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly alertSuppressionForThresholdRuleEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3018,7 +3018,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantRagOnAlerts: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly alertSuppressionForThresholdRuleEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3194,7 +3194,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantRagOnAlerts: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly alertSuppressionForThresholdRuleEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3243,7 +3243,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantRagOnAlerts: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly alertSuppressionForThresholdRuleEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly chartEmbeddablesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly alertsPreviewChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly assistantStreamingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly entityAnalyticsAssetCriticalityEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 0671100376372..5d631622d3c55 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index dc8561d3b52e3..496db05fd9caa 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 5a65ce9ac7880..29c98b16a0679 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 79c8072a32a1c..59b23a3c31a25 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 7968fb6705e85..b351d1f0b1287 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 000e66ee1ef3b..65a73bf283578 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 7c69e1e152581..9957256613981 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 42447b167842d..8df6e5a837baa 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 95286a9e82190..8a9b27fb11cbb 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 01cd1d29fd4e6..e59ab271b2634 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index c1c347c643dfc..af43ca66522ed 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index ebbce17be89c1..ae06061a2d8cb 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index 2bc531bde5295..23398830c4a27 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -387,9 +387,9 @@ "(error: Error, errorSource: ", { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" }, ") => ", @@ -430,9 +430,9 @@ "signature": [ { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" } ], @@ -633,15 +633,7 @@ "label": "throwUnrecoverableError", "description": [], "signature": [ - "(error: Error, errorSource: ", - { - "pluginId": "taskManager", - "scope": "server", - "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", - "text": "TaskErrorSource" - }, - ") => void" + "(error: Error) => void" ], "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", "deprecated": false, @@ -661,27 +653,6 @@ "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "taskManager", - "id": "def-server.throwUnrecoverableError.$2", - "type": "Enum", - "tags": [], - "label": "errorSource", - "description": [], - "signature": [ - { - "pluginId": "taskManager", - "scope": "server", - "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", - "text": "TaskErrorSource" - } - ], - "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true } ], "returnComment": [], @@ -1021,9 +992,9 @@ "signature": [ { "pluginId": "taskManager", - "scope": "server", + "scope": "common", "docId": "kibTaskManagerPluginApi", - "section": "def-server.TaskErrorSource", + "section": "def-common.TaskErrorSource", "text": "TaskErrorSource" }, " | undefined" @@ -1637,7 +1608,7 @@ "tags": [], "label": "TaskErrorSource", "description": [], - "path": "x-pack/plugins/task_manager/server/task_running/errors.ts", + "path": "x-pack/plugins/task_manager/common/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2001,7 +1972,20 @@ "classes": [], "functions": [], "interfaces": [], - "enums": [], + "enums": [ + { + "parentPluginId": "taskManager", + "id": "def-common.TaskErrorSource", + "type": "Enum", + "tags": [], + "label": "TaskErrorSource", + "description": [], + "path": "x-pack/plugins/task_manager/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "misc": [], "objects": [] } diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index f5720acb909f0..500e303d69b67 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; @@ -49,3 +49,8 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o ### Consts, variables and types +## Common + +### Enums + + diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 2c7e34966b678..0264fb525ecbd 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index b3ece3658ff6c..9575f4a0718ff 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index a249b1bc0d577..88a0e0ef99f32 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 93af855b77f7f..82c661cf3473b 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 1b843089f1361..927887f108372 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 63e264031d361..fa99d8b38f8c6 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 8bda84c44e806..05668cbb7ddd4 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 964343655f031..c04d00490bd4b 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index e33cbc84596e9..9aea768e7525e 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1026,7 +1026,7 @@ "label": "JsonEditorWithMessageVariables", "description": [], "signature": [ - "({ buttonTitle, messageVariables, paramsProperty, inputTargetValue, label, errors, areaLabel, onDocumentsChange, helpText, onBlur, showButtonTitle, euiCodeEditorProps, }: React.PropsWithChildren) => JSX.Element" + "({ buttonTitle, messageVariables, paramsProperty, inputTargetValue, label, errors, ariaLabel, onDocumentsChange, helpText, onBlur, showButtonTitle, dataTestSubj, euiCodeEditorProps, }: React.PropsWithChildren) => JSX.Element" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/components/json_editor_with_message_variables.tsx", "deprecated": false, @@ -1037,7 +1037,7 @@ "id": "def-public.JsonEditorWithMessageVariables.$1", "type": "CompoundType", "tags": [], - "label": "{\n buttonTitle,\n messageVariables,\n paramsProperty,\n inputTargetValue,\n label,\n errors,\n areaLabel,\n onDocumentsChange,\n helpText,\n onBlur,\n showButtonTitle,\n euiCodeEditorProps = {},\n}", + "label": "{\n buttonTitle,\n messageVariables,\n paramsProperty,\n inputTargetValue,\n label,\n errors,\n ariaLabel,\n onDocumentsChange,\n helpText,\n onBlur,\n showButtonTitle,\n dataTestSubj,\n euiCodeEditorProps = {},\n}", "description": [], "signature": [ "React.PropsWithChildren" @@ -5760,7 +5760,7 @@ "AlertsTableConfigurationRegistryWithActions", ")[]; register: (objectType: ", "AlertsTableConfigurationRegistry", - ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; }" + ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/app.tsx", "deprecated": false, @@ -6218,7 +6218,7 @@ "AlertsTableConfigurationRegistryWithActions", ")[]; register: (objectType: ", "AlertsTableConfigurationRegistry", - ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; }" + ") => void; has: (id: string) => boolean; getActions: (id: string) => { toggleColumn: (columnId: string) => void; }; getAlertConfigIdPerRuleTypes: (ruleTypeIds: string[]) => string; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false, @@ -6474,7 +6474,7 @@ "label": "RuleCreationValidConsumer", "description": [], "signature": [ - "\"observability\" | \"stackAlerts\" | \"logs\" | \"infrastructure\"" + "\"observability\" | \"stackAlerts\" | \"alerts\" | \"logs\" | \"infrastructure\"" ], "path": "packages/kbn-rule-data-utils/src/rule_types/index.ts", "deprecated": false, @@ -9108,7 +9108,7 @@ "label": "buildAggregation", "description": [], "signature": [ - "({ timeSeries, aggType, aggField, termField, termSize, condition, topHitsSize, }: ", + "({ timeSeries, aggType, aggField, termField, termSize, sourceFieldsParams, condition, topHitsSize, }: ", { "pluginId": "triggersActionsUi", "scope": "common", @@ -9129,7 +9129,7 @@ "id": "def-common.buildAggregation.$1", "type": "Object", "tags": [], - "label": "{\n timeSeries,\n aggType,\n aggField,\n termField,\n termSize,\n condition,\n topHitsSize,\n}", + "label": "{\n timeSeries,\n aggType,\n aggField,\n termField,\n termSize,\n sourceFieldsParams,\n condition,\n topHitsSize,\n}", "description": [], "signature": [ { @@ -9392,7 +9392,7 @@ "label": "parseAggregationResults", "description": [], "signature": [ - "({ isCountAgg, isGroupAgg, esResult, resultLimit, }: ParseAggregationResultsOpts) => ", + "({ isCountAgg, isGroupAgg, esResult, resultLimit, sourceFieldsParams, generateSourceFieldsFromHits, }: ParseAggregationResultsOpts) => ", { "pluginId": "triggersActionsUi", "scope": "common", @@ -9410,7 +9410,7 @@ "id": "def-common.parseAggregationResults.$1", "type": "Object", "tags": [], - "label": "{\n isCountAgg,\n isGroupAgg,\n esResult,\n resultLimit,\n}", + "label": "{\n isCountAgg,\n isGroupAgg,\n esResult,\n resultLimit,\n sourceFieldsParams = [],\n generateSourceFieldsFromHits = false,\n}", "description": [], "signature": [ "ParseAggregationResultsOpts" @@ -9574,6 +9574,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-common.BuildAggregationOpts.sourceFieldsParams", + "type": "Array", + "tags": [], + "label": "sourceFieldsParams", + "description": [], + "signature": [ + "{ label: string; searchPath: string; }[] | undefined" + ], + "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-common.BuildAggregationOpts.topHitsSize", @@ -9813,6 +9827,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-common.ParsedAggregationGroup.sourceFields", + "type": "Array", + "tags": [], + "label": "sourceFields", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/parse_aggregation_results.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-common.ParsedAggregationGroup.value", @@ -10070,6 +10098,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-common.MAX_SOURCE_FIELDS_TO_COPY", + "type": "number", + "tags": [], + "label": "MAX_SOURCE_FIELDS_TO_COPY", + "description": [], + "signature": [ + "10" + ], + "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-common.MetricResult", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 0050e9ce95a4e..351e8d3a65a35 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 592 | 1 | 566 | 58 | +| 595 | 1 | 569 | 58 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 6214a4ddeaefa..7d24106350bb3 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 45c4c1d21ffed..2897f21dfafb7 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 2e786d70f2f71..70d55981c9fdb 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index b7dfd2a6c836b..b841711c08667 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 39c3794055604..890f5712ce2f7 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 19d4782ec7d6b..6014e6f7cb259 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 4c3129b133478..5089071b68843 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 5fcc62642813a..857b1c234e058 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index f71b562a62218..898b58dc778f0 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 8a6ba03021b09..4242c83addcbd 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index f24bee0440e98..f32d6d222012f 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 4c67dd85451ac..8240fbbe9d4da 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 74cfe13aba587..ea235c34b46b8 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 750aaaf624e5b..f9b3982af9cc7 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 93db8c2d945cb..cf87397eb440d 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 56292f6063c33..d88e8087f2288 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 7902ca8103143..9208339d2cec7 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 5b0bd3b1753af..de9e191a9a6ee 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 333d3ec33541b..9277efa317640 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 12a82eb484d4c..123ecf53cf5e3 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index e10f383193377..180108f0dc59c 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-12-20 +date: 2024-01-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/contributing/code_walkthrough.mdx b/dev_docs/contributing/code_walkthrough.mdx index 139ac4df93070..b3144bf0f5e7a 100644 --- a/dev_docs/contributing/code_walkthrough.mdx +++ b/dev_docs/contributing/code_walkthrough.mdx @@ -15,9 +15,6 @@ Tip: Look for a `README.md` in a folder to learn about its contents. Managed by the operations team to set up a new buildkite ci system. Can be ignored by folks outside the Operations team. -## [.ci](https://github.com/elastic/kibana/tree/main/.ci) - -Managed by the operations team to contain Jenkins settings. Can be ignored by folks outside the Operations team. ## [.github](https://github.com/elastic/kibana/tree/main/.github) diff --git a/docs/developer/contributing/development-functional-tests.asciidoc b/docs/developer/contributing/development-functional-tests.asciidoc index d149372f0f572..9dcb9785cf045 100644 --- a/docs/developer/contributing/development-functional-tests.asciidoc +++ b/docs/developer/contributing/development-functional-tests.asciidoc @@ -81,11 +81,12 @@ export TEST_BROWSER_HEADLESS=1 export TEST_THROTTLE_NETWORK=1 ---------- -** When running against a Cloud deployment, some tests are not applicable. To skip tests that do not apply, use --exclude-tag. An example shell file can be found at: {kibana-blob}test/scripts/jenkins_cloud.sh[test/scripts/jenkins_cloud.sh] +** When running against a Cloud deployment, some tests are not applicable. To skip tests that do not apply, use --exclude-tag. + ["source", "shell"] ---------- node scripts/functional_test_runner --exclude-tag skipCloud +node scripts/functional_test_runner --exclude-tag skipMKI ---------- [discrete] diff --git a/docs/developer/contributing/pr-review.asciidoc b/docs/developer/contributing/pr-review.asciidoc index 95f012d569c3a..7f47af51ef51a 100644 --- a/docs/developer/contributing/pr-review.asciidoc +++ b/docs/developer/contributing/pr-review.asciidoc @@ -118,7 +118,7 @@ Inflammatory feedback such as "this is crap" isn't feedback at all. It's both me Establishing a comprehensive checklist for all of the things that should happen in all possible pull requests is impractical, but that doesn't mean we lack a concrete set of minimum requirements that we can enumerate. The following items should be double checked for any pull request: * CLA check passes -* Jenkins job runs and passes +* CI job runs and passes * Adheres to the spirit of our various styleguides * Has thorough unit test coverage * Automated tests provide high confidence the change continues to work without manual verification diff --git a/docs/management/connectors/action-types/resilient.asciidoc b/docs/management/connectors/action-types/resilient.asciidoc index 04531a71dee62..ad8ebffcf0bb9 100644 --- a/docs/management/connectors/action-types/resilient.asciidoc +++ b/docs/management/connectors/action-types/resilient.asciidoc @@ -8,7 +8,7 @@ :frontmatter-tags-content-type: [how-to] :frontmatter-tags-user-goals: [configure] -The IBM Resilient connector uses the https://developer.ibm.com/security/resilient/rest/[RESILIENT REST v2] to create IBM Resilient incidents. +The {ibm-r} connector uses the https://developer.ibm.com/security/resilient/rest/[RESILIENT REST v2] to create {ibm-r} incidents. [float] [[define-resilient-ui]] @@ -18,47 +18,51 @@ You can create connectors in *{stack-manage-app} > {connectors-ui}* or as needed when you're creating a rule. For example: [role="screenshot"] -image::management/connectors/images/resilient-connector.png[IBM Resilient connector] +image::management/connectors/images/resilient-connector.png[{ibm-r} connector] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] [[resilient-connector-configuration]] ==== Connector configuration -IBM Resilient connectors have the following configuration properties: +{ibm-r} connectors have the following configuration properties: -Name:: The name of the connector. -URL:: IBM Resilient instance URL. -Organization ID:: IBM Resilient organization ID. -API key ID:: The authentication key ID for HTTP Basic authentication. -API key secret:: The authentication key secret for HTTP Basic authentication. +API key ID:: +The authentication key ID for HTTP Basic authentication. +API key secret:: +The authentication key secret for HTTP Basic authentication. +Organization ID:: +The {ibm-r} organization ID. +URL:: +The {ibm-r} instance URL. [float] [[resilient-action-configuration]] === Test connectors -You can test connectors with the <> or -as you're creating or editing the connector in {kib}. For example: +You can test connectors as you're creating or editing the connector in {kib}. +For example: [role="screenshot"] -image::management/connectors/images/resilient-params-test.png[IBM Resilient params test] - - -IBM Resilient actions have the following configuration properties. - -Incident types:: The type of the incident. -Severity code:: The severity of the incident. -Name:: A name for the issue, used for searching the contents of the knowledge base. -Description:: The details about the incident. -Additional comments:: Additional information for the client, such as how to troubleshoot the issue. +image::management/connectors/images/resilient-params-test.png[IBM Resilient connector test options] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. + +{ibm-r} actions have the following configuration properties. + +Additional comments:: +Extra information for the client, such as how to troubleshoot the issue. +Description:: +The details about the incident. +Incident type:: +The type of the incident. +Name:: +A name for the issue, used for searching the contents of the knowledge base. +Severity:: +The severity of the incident. [float] [[resilient-connector-networking-configuration]] === Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. - -[float] -[[configuring-resilient]] -=== Configure IBM Resilient - -IBM Resilient offers https://www.ibm.com/security/intelligent-orchestration/resilient[Instances], which you can use to test incidents. +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. +You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. diff --git a/docs/management/connectors/images/resilient-connector.png b/docs/management/connectors/images/resilient-connector.png index b7d216d150f8c..b5d08ed5987b2 100644 Binary files a/docs/management/connectors/images/resilient-connector.png and b/docs/management/connectors/images/resilient-connector.png differ diff --git a/docs/management/connectors/images/resilient-params-test.png b/docs/management/connectors/images/resilient-params-test.png index 865d5b517aea2..a8d3b6133922d 100644 Binary files a/docs/management/connectors/images/resilient-params-test.png and b/docs/management/connectors/images/resilient-params-test.png differ diff --git a/docs/user/security/tutorials/how-to-secure-access-to-kibana.asciidoc b/docs/user/security/tutorials/how-to-secure-access-to-kibana.asciidoc index 9e457ee409f4b..d62ccebb05657 100644 --- a/docs/user/security/tutorials/how-to-secure-access-to-kibana.asciidoc +++ b/docs/user/security/tutorials/how-to-secure-access-to-kibana.asciidoc @@ -11,7 +11,7 @@ This guide introduces you to three of {kib}'s security features: spaces, roles, [float] === Spaces -Do you have multiple teams or tenants using {kib}? Do you want a ā€œplaygroundā€ to experiment with new visualizations or rules? If so, then <> can help. +Do you have multiple teams using {kib}? Do you want a ā€œplaygroundā€ to experiment with new visualizations or rules? If so, then <> can help. Think of a space as another instance of {kib}. A space allows you to organize your <>, <>, <>, and much more into their own categories. For example, you might have a Marketing space for your marketeers to track the results of their campaigns, and an Engineering space for your developers to {apm-guide-ref}/apm-overview.html[monitor application performance]. diff --git a/fleet_packages.json b/fleet_packages.json index 9d3a9d77b68c6..0a9a4546e8750 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -24,21 +24,21 @@ [ { "name": "apm", - "version": "8.12.0-preview-1696560930", + "version": "8.13.0-preview-1701948405", "forceAlignStackVersion": true, "allowSyncToPrerelease": true }, { "name": "elastic_agent", - "version": "1.15.0" + "version": "1.18.0" }, { "name": "endpoint", - "version": "8.11.0" + "version": "8.11.1" }, { "name": "fleet_server", - "version": "1.4.0" + "version": "1.5.0" }, { "name": "profiler_symbolizer", @@ -52,10 +52,10 @@ }, { "name": "synthetics", - "version": "1.1.0" + "version": "1.1.1" }, { "name": "security_detection_engine", - "version": "8.11.2" + "version": "8.12.1" } ] \ No newline at end of file diff --git a/kbn_pm/src/lib/bazel.mjs b/kbn_pm/src/lib/bazel.mjs index 2ec27b359f153..022447ded129c 100644 --- a/kbn_pm/src/lib/bazel.mjs +++ b/kbn_pm/src/lib/bazel.mjs @@ -150,8 +150,6 @@ export async function installYarnDeps(log, opts = undefined) { offline: opts?.offline, quiet: opts?.quiet, env: { - SASS_BINARY_SITE: - 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass', RE2_DOWNLOAD_MIRROR: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2', }, diff --git a/package.json b/package.json index f2446fc5c27a0..68122ca59fc5b 100644 --- a/package.json +++ b/package.json @@ -74,12 +74,12 @@ "url": "https://github.com/elastic/kibana.git" }, "engines": { - "node": "18.18.2", + "node": "20.10.0", "yarn": "^1.22.19" }, "resolutions": { "**/@hello-pangea/dnd": "16.2.0", - "**/@types/node": "18.18.5", + "**/@types/node": "20.10.5", "**/@typescript-eslint/utils": "5.62.0", "**/chokidar": "^3.5.3", "**/globule/minimatch": "^3.1.2", @@ -91,14 +91,14 @@ }, "dependencies": { "@appland/sql-parser": "^1.5.1", - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.23.6", "@cfworker/json-schema": "^1.12.7", "@dnd-kit/core": "^3.1.1", "@dnd-kit/sortable": "^4.0.0", "@dnd-kit/utilities": "^2.0.0", "@elastic/apm-rum": "^5.15.0", "@elastic/apm-rum-react": "^2.0.1", - "@elastic/charts": "61.0.3", + "@elastic/charts": "61.2.0", "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.5.1", @@ -508,6 +508,7 @@ "@kbn/kubernetes-security-plugin": "link:x-pack/plugins/kubernetes_security", "@kbn/language-documentation-popover": "link:packages/kbn-language-documentation-popover", "@kbn/lens-embeddable-utils": "link:packages/kbn-lens-embeddable-utils", + "@kbn/lens-formula-docs": "link:packages/kbn-lens-formula-docs", "@kbn/lens-plugin": "link:x-pack/plugins/lens", "@kbn/license-api-guard-plugin": "link:x-pack/plugins/license_api_guard", "@kbn/license-management-plugin": "link:x-pack/plugins/license_management", @@ -864,7 +865,7 @@ "@opentelemetry/sdk-metrics-base": "^0.31.0", "@opentelemetry/semantic-conventions": "^1.4.0", "@reduxjs/toolkit": "1.7.2", - "@slack/webhook": "^5.0.4", + "@slack/webhook": "^7.0.1", "@smithy/eventstream-codec": "^2.0.12", "@smithy/util-utf8": "^2.0.0", "@tanstack/react-query": "^4.29.12", @@ -888,7 +889,7 @@ "archiver": "^5.3.1", "async": "^3.2.3", "aws4": "^1.12.0", - "axios": "^1.6.0", + "axios": "^1.6.3", "base64-js": "^1.3.1", "bitmap-sdf": "^1.0.3", "blurhash": "^2.0.1", @@ -940,7 +941,7 @@ "file-saver": "^1.3.8", "fnv-plus": "^1.3.1", "font-awesome": "4.7.0", - "formik": "^2.2.9", + "formik": "^2.4.5", "fp-ts": "^2.3.1", "geojson-vt": "^3.2.1", "get-port": "^5.0.0", @@ -1009,7 +1010,7 @@ "normalize-path": "^3.0.0", "object-hash": "^1.3.1", "object-path-immutable": "^3.1.1", - "openai": "^3.3.0", + "openai": "^4.24.1", "openpgp": "5.10.1", "opn": "^5.5.0", "ora": "^4.0.4", @@ -1080,7 +1081,7 @@ "rxjs": "^7.5.5", "safe-squel": "^5.12.5", "seedrandom": "^3.0.5", - "semver": "^7.5.3", + "semver": "^7.5.4", "set-value": "^4.1.0", "source-map-support": "^0.5.19", "stats-lite": "^2.2.0", @@ -1120,25 +1121,25 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "^10.0.3", - "@babel/cli": "^7.21.0", - "@babel/core": "^7.21.0", - "@babel/eslint-parser": "^7.19.1", - "@babel/eslint-plugin": "^7.19.1", - "@babel/generator": "^7.21.1", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/parser": "^7.21.2", + "@babel/cli": "^7.23.4", + "@babel/core": "^7.23.6", + "@babel/eslint-parser": "^7.23.3", + "@babel/eslint-plugin": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/parser": "^7.23.6", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.21.0", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@babel/register": "^7.21.0", - "@babel/traverse": "^7.23.2", + "@babel/plugin-transform-runtime": "^7.23.6", + "@babel/preset-env": "^7.23.6", + "@babel/preset-react": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@babel/register": "^7.22.15", + "@babel/traverse": "^7.23.6", "@babel/types": "^7.21.2", "@bazel/ibazel": "^0.16.2", "@bazel/typescript": "4.6.2", @@ -1332,7 +1333,7 @@ "@types/archiver": "^5.3.1", "@types/async": "^3.2.3", "@types/aws4": "^1.5.0", - "@types/babel__core": "^7.20.0", + "@types/babel__core": "^7.20.5", "@types/babel__generator": "^7.6.4", "@types/babel__helper-plugin-utils": "^7.10.0", "@types/base64-js": "^1.2.5", @@ -1412,9 +1413,9 @@ "@types/multistream": "^4.1.0", "@types/mustache": "^0.8.31", "@types/nock": "^10.0.3", - "@types/node": "18.18.5", + "@types/node": "20.10.5", "@types/node-fetch": "2.6.4", - "@types/node-forge": "^1.3.1", + "@types/node-forge": "^1.3.10", "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", "@types/object-hash": "^1.3.0", @@ -1463,7 +1464,7 @@ "@types/testing-library__jest-dom": "^5.14.7", "@types/textarea-caret": "^3.0.1", "@types/tinycolor2": "^1.4.1", - "@types/tough-cookie": "^4.0.2", + "@types/tough-cookie": "^4.0.5", "@types/type-detect": "^4.0.1", "@types/uuid": "^9.0.0", "@types/vinyl": "^2.0.4", @@ -1473,7 +1474,6 @@ "@types/webpack-env": "^1.15.3", "@types/webpack-merge": "^4.1.5", "@types/webpack-sources": "^0.1.4", - "@types/xml-crypto": "^1.4.2", "@types/xml2js": "^0.4.11", "@types/yargs": "^15.0.0", "@types/yauzl": "^2.9.1", @@ -1487,7 +1487,7 @@ "abab": "^2.0.4", "aggregate-error": "^3.1.0", "antlr4ts-cli": "^0.5.0-alpha.3", - "apidoc-markdown": "^7.2.4", + "apidoc-markdown": "^7.3.0", "argsplit": "^1.0.5", "autoprefixer": "^10.4.7", "axe-core": "^4.8.2", @@ -1496,7 +1496,7 @@ "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^6.1.1", "babel-plugin-require-context-hook": "^1.0.0", - "babel-plugin-styled-components": "^2.0.7", + "babel-plugin-styled-components": "^2.1.4", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "backport": "^8.9.8", "blob-polyfill": "^7.0.20220408", @@ -1598,7 +1598,6 @@ "mutation-observer": "^1.0.3", "native-hdr-histogram": "^1.0.0", "nock": "12.0.3", - "node-sass": "^8.0.0", "null-loader": "^3.0.0", "nyc": "^15.1.0", "oboe": "^2.1.4", @@ -1626,7 +1625,8 @@ "regenerate": "^1.4.0", "resolve": "^1.22.0", "rxjs-marbles": "^7.0.1", - "sass-loader": "^10.4.1", + "sass-embedded": "^1.69.5", + "sass-loader": "^10.5.1", "selenium-webdriver": "^4.16.0", "simple-git": "^3.16.0", "sinon": "^7.4.2", @@ -1646,7 +1646,7 @@ "tempy": "^0.3.0", "terser": "^5.26.0", "terser-webpack-plugin": "^4.2.3", - "tough-cookie": "^4.1.2", + "tough-cookie": "^4.1.3", "tree-kill": "^1.2.2", "ts-morph": "^13.0.2", "tsd": "^0.20.0", @@ -1662,7 +1662,7 @@ "webpack-dev-server": "^4.9.3", "webpack-merge": "^4.2.2", "webpack-sources": "^1.4.1", - "xml-crypto": "^3.0.1", + "xml-crypto": "^5.0.0", "xmlbuilder": "13.0.2", "yargs": "^15.4.1", "yarn-deduplicate": "^6.0.2" diff --git a/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.test.ts b/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.test.ts index 197d3757f1386..4d61172b7d156 100644 --- a/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.test.ts +++ b/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.test.ts @@ -22,6 +22,29 @@ const formattedRollingTime = (date: string, duration: string, modulate: boolean) ).format(format); describe('getNextRollingTime', () => { + describe('DST', () => { + it('returns the correct date when entering DST', () => { + expect(formattedRollingTime('2023-03-11 23:59:59:999', '24h', true)).toEqual( + '2023-03-12 00:00:00:000' + ); + }); + it('returns the correct date within DST', () => { + expect(formattedRollingTime('2023-06-15 23:59:59:999', '24h', true)).toEqual( + '2023-06-16 00:00:00:000' + ); + }); + it('returns the correct date when exiting DST', () => { + expect(formattedRollingTime('2023-11-05 23:59:59:999', '24h', true)).toEqual( + '2023-11-06 00:00:00:000' + ); + }); + it('returns the correct date outside of DST', () => { + expect(formattedRollingTime('2023-01-07 23:59:59:999', '24h', true)).toEqual( + '2023-01-08 00:00:00:000' + ); + }); + }); + describe('when `modulate` is false', () => { it('increments the current time by the interval', () => { expect(formattedRollingTime('2010-10-20 04:27:12:000', '15m', false)).toEqual( diff --git a/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts b/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts index 343bd97cb8dff..a31a01e881188 100644 --- a/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts +++ b/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/policies/time_interval/get_next_rolling_time.ts @@ -23,8 +23,10 @@ export const getNextRollingTime = ( const increment = interval.get(incrementedUnit) - (currentMoment.get(incrementedUnit) % interval.get(incrementedUnit)); - const incrementInMs = moment.duration(increment, incrementedUnit).asMilliseconds(); - return currentMoment.startOf(incrementedUnit).toDate().getTime() + incrementInMs; + const nextRollingMoment = currentMoment + .startOf(incrementedUnit) + .add(increment, incrementedUnit); + return nextRollingMoment.toDate().getTime(); } else { return currentTime + interval.asMilliseconds(); } diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts index f940e49805cd5..202cef2ca09d4 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts @@ -59,7 +59,7 @@ test('return error when manifest content is not a valid JSON', async () => { }); await expect(parseManifest(pluginPath, packageInfo)).rejects.toMatchObject({ - message: `Unexpected token o in JSON at position 1 (invalid-manifest, ${pluginManifestPath})`, + message: `Unexpected token 'o', "not-json" is not valid JSON (invalid-manifest, ${pluginManifestPath})`, type: PluginDiscoveryErrorType.InvalidManifest, path: pluginManifestPath, }); diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts index 9ab50d8786cca..93657a1f2533e 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts @@ -278,7 +278,7 @@ describe('plugins discovery system', () => { .toPromise(); expect(errors).toContain( - `Error: Unexpected token o in JSON at position 1 (invalid-manifest, ${manifestPath( + `Error: Unexpected token 'o', "not-json" is not valid JSON (invalid-manifest, ${manifestPath( 'plugin_a' )})` ); diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts index 42f560588197d..2185bfe13fb19 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts @@ -462,40 +462,10 @@ describe('PluginsService', () => { expect(loggingSystemMock.collect(logger).info).toMatchInlineSnapshot(` Array [ Array [ - "Plugin \\"explicitly-disabled-plugin-preboot\\" is disabled.", + "The following plugins are disabled: \\"explicitly-disabled-plugin-preboot,explicitly-disabled-plugin-standard,another-explicitly-disabled-plugin-preboot,another-explicitly-disabled-plugin-standard\\".", ], Array [ - "Plugin \\"explicitly-disabled-plugin-standard\\" is disabled.", - ], - Array [ - "Plugin \\"plugin-with-missing-required-deps-preboot\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [missing-plugin-preboot]", - ], - Array [ - "Plugin \\"plugin-with-missing-required-deps-standard\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [missing-plugin-standard]", - ], - Array [ - "Plugin \\"plugin-with-disabled-transitive-dep-preboot\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [another-explicitly-disabled-plugin-preboot]", - ], - Array [ - "Plugin \\"plugin-with-disabled-transitive-dep-standard\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [another-explicitly-disabled-plugin-standard]", - ], - Array [ - "Plugin \\"another-explicitly-disabled-plugin-preboot\\" is disabled.", - ], - Array [ - "Plugin \\"another-explicitly-disabled-plugin-standard\\" is disabled.", - ], - Array [ - "Plugin \\"plugin-with-disabled-nested-transitive-dep-preboot\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [plugin-with-disabled-transitive-dep-preboot]", - ], - Array [ - "Plugin \\"plugin-with-disabled-nested-transitive-dep-standard\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [plugin-with-disabled-transitive-dep-standard]", - ], - Array [ - "Plugin \\"plugin-with-missing-nested-dep-preboot\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [plugin-with-missing-required-deps-preboot]", - ], - Array [ - "Plugin \\"plugin-with-missing-nested-dep-standard\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [plugin-with-missing-required-deps-standard]", + "Plugins \\"plugin-with-missing-required-deps-preboot,plugin-with-missing-required-deps-standard,plugin-with-disabled-transitive-dep-preboot,plugin-with-disabled-transitive-dep-standard,plugin-with-disabled-nested-transitive-dep-preboot,plugin-with-disabled-nested-transitive-dep-standard,plugin-with-missing-nested-dep-preboot,plugin-with-missing-nested-dep-standard\\" have been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [missing-plugin-preboot,missing-plugin-standard,another-explicitly-disabled-plugin-preboot,another-explicitly-disabled-plugin-standard,plugin-with-disabled-transitive-dep-preboot,plugin-with-disabled-transitive-dep-standard,plugin-with-missing-required-deps-preboot,plugin-with-missing-required-deps-standard].", ], ] `); @@ -538,12 +508,12 @@ describe('PluginsService', () => { await pluginsService.preboot(prebootDeps); expect(loggingSystemMock.collect(logger).info).toMatchInlineSnapshot(` - Array [ Array [ - "Plugin \\"plugin-with-missing-required-deps-preboot\\" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [missing-plugin-preboot]", - ], - ] - `); + Array [ + "Plugins \\"plugin-with-missing-required-deps-preboot\\" have been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [missing-plugin-preboot].", + ], + ] + `); }); }); diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts index 03327b1d7be52..a5f7bfaef7d73 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts @@ -327,6 +327,10 @@ export class PluginsService } // Add the plugins to the Plugin System if enabled and its dependencies are met + const disabledPlugins = []; + const disabledDependants = []; + const disabledDependantsCauses = new Set(); + for (const [pluginName, { plugin, isEnabled }] of pluginEnableStatuses) { this.validatePluginDependencies(plugin, pluginEnableStatuses); @@ -339,17 +343,26 @@ export class PluginsService this.standardPluginsSystem.addPlugin(plugin); } } else if (isEnabled) { - this.log.info( - `Plugin "${pluginName}" has been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [${pluginEnablement.missingOrIncompatibleDependencies.join( - ', ' - )}]` + disabledDependants.push(pluginName); + pluginEnablement.missingOrIncompatibleDependencies.forEach((dependency) => + disabledDependantsCauses.add(dependency) ); } else { - this.log.info(`Plugin "${pluginName}" is disabled.`); + disabledPlugins.push(pluginName); } } this.log.debug(`Discovered ${pluginEnableStatuses.size} plugins.`); + if (disabledPlugins.length) { + this.log.info(`The following plugins are disabled: "${disabledPlugins}".`); + } + if (disabledDependants.length) { + this.log.info( + `Plugins "${disabledDependants}" have been disabled since the following direct or transitive dependencies are missing, disabled, or have incompatible types: [${Array.from( + disabledDependantsCauses + )}].` + ); + } } /** Throws an error if the plugin's dependencies are invalid. */ 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 5b79568cb485b..1d141def7f511 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 @@ -131,6 +131,7 @@ const SecurityAlertOptional = rt.partial({ 'kibana.alert.flapping_history': schemaBooleanArray, 'kibana.alert.group.id': schemaString, 'kibana.alert.group.index': schemaNumber, + 'kibana.alert.host.criticality_level': schemaString, 'kibana.alert.last_detected': schemaDate, 'kibana.alert.maintenance_window_ids': schemaStringArray, 'kibana.alert.new_terms': schemaStringArray, @@ -193,6 +194,7 @@ const SecurityAlertOptional = rt.partial({ ), 'kibana.alert.time_range': schemaDateRange, 'kibana.alert.url': schemaString, + 'kibana.alert.user.criticality_level': schemaString, 'kibana.alert.workflow_assignee_ids': schemaStringArray, 'kibana.alert.workflow_reason': schemaString, 'kibana.alert.workflow_status': schemaString, diff --git a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx index e7cdba71008f9..fa9d09d7a6af0 100644 --- a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx +++ b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_extra_actions.tsx @@ -8,11 +8,11 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import React, { useCallback, Dispatch, useContext } from 'react'; import { EuiFlexGroup, EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; import { DistributeEquallyIcon } from '../assets/distribute_equally'; -import { TooltipWrapper } from '../tooltip_wrapper'; import type { ColorRangesActions } from './types'; import { ColorRangesContext } from './color_ranges_context'; diff --git a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx index 5cd9bb50bafb1..658d93aebdde3 100644 --- a/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx +++ b/packages/kbn-coloring/src/shared_components/coloring/color_ranges/color_ranges_item_buttons.tsx @@ -10,11 +10,11 @@ import React, { Dispatch, useCallback, useContext } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonIcon, EuiIconProps } from '@elastic/eui'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { PaletteContinuity, CustomPaletteParams } from '../../../palettes'; import { isLastItem } from './utils'; -import { TooltipWrapper } from '../tooltip_wrapper'; import type { ColorRangesActions, ColorRange, ColorRangeAccessor } from './types'; import { ColorRangesContext } from './color_ranges_context'; diff --git a/packages/kbn-coloring/tsconfig.json b/packages/kbn-coloring/tsconfig.json index 315e59225601c..3a97faa1b9d3a 100644 --- a/packages/kbn-coloring/tsconfig.json +++ b/packages/kbn-coloring/tsconfig.json @@ -22,6 +22,7 @@ "@kbn/test-jest-helpers", "@kbn/data-plugin", "@kbn/ui-theme", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index a259d76c6affb..8016b5aaee223 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -877,7 +877,9 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D integrations: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-your-data`, integrationsLogstash: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-logstash`, integrationsBeats: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-beats`, - integrationsConnectorClient: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-your-data`, + integrationsConnectorClient: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-connector-client`, + integrationsConnectorClientRunFromSource: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-connector-client#run-from-source`, + integrationsConnectorClientRunWithDocker: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-connector-client#run-with-docker`, gettingStartedExplore: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, gettingStartedIngest: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, gettingStartedSearch: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 910c0c218dcc5..e48f7327984b9 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -623,6 +623,8 @@ export interface DocLinks { readonly integrations: string; readonly integrationsBeats: string; readonly integrationsConnectorClient: string; + readonly integrationsConnectorClientRunFromSource: string; + readonly integrationsConnectorClientRunWithDocker: string; readonly integrationsLogstash: string; }; readonly serverlessSecurity: { diff --git a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss b/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss index c26bb6c49b6cf..c68ae0c0d6f1e 100644 --- a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss +++ b/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss @@ -99,7 +99,7 @@ $reorderItemMargin: $euiSizeS; position: absolute; width: 100%; top: 0; - height: calc(100% + #{$reorderItemMargin / 2}); + height: calc(100% + #{calc($reorderItemMargin / 2)}); } .domDragDrop-translatableDrop { diff --git a/packages/kbn-es-archiver/src/lib/archives/parse.test.ts b/packages/kbn-es-archiver/src/lib/archives/parse.test.ts index b87e6f71400e0..9e0d5c02238b8 100644 --- a/packages/kbn-es-archiver/src/lib/archives/parse.test.ts +++ b/packages/kbn-es-archiver/src/lib/archives/parse.test.ts @@ -98,7 +98,7 @@ describe('esArchiver createParseArchiveStreams', () => { ] as [Readable, ...Writable[]]); throw new Error('should have failed'); } catch (err) { - expect(err.message).toEqual(expect.stringContaining('Unexpected number')); + expect(err.message).toEqual(`Expected property name or '}' in JSON at position 1`); } }); }); diff --git a/packages/kbn-es/src/integration_tests/__fixtures__/es_bin.js b/packages/kbn-es/src/integration_tests/__fixtures__/es_bin.js index 5ef6145698811..0d44b8a775b25 100644 --- a/packages/kbn-es/src/integration_tests/__fixtures__/es_bin.js +++ b/packages/kbn-es/src/integration_tests/__fixtures__/es_bin.js @@ -87,11 +87,11 @@ const { ES_KEY_PATH, ES_CERT_PATH } = require('@kbn/dev-utils'); } ); - // setup server auto close after 1 second of silence + // setup server auto close after 5 second of silence let serverCloseTimer; const delayServerClose = () => { clearTimeout(serverCloseTimer); - serverCloseTimer = setTimeout(() => server.close(), 1000); + serverCloseTimer = setTimeout(() => server.close(), 5000); }; server.on('request', delayServerClose); server.on('listening', delayServerClose); diff --git a/packages/kbn-es/src/utils/docker.test.ts b/packages/kbn-es/src/utils/docker.test.ts index d877e5bdf8261..122914c3fa667 100644 --- a/packages/kbn-es/src/utils/docker.test.ts +++ b/packages/kbn-es/src/utils/docker.test.ts @@ -7,8 +7,7 @@ */ import mockFs from 'mock-fs'; -import { existsSync } from 'fs'; -import { stat } from 'fs/promises'; +import Fsp from 'fs/promises'; import { basename } from 'path'; import { @@ -115,7 +114,7 @@ const volumeCmdTest = async (volumeCmd: string[]) => { // extract only permission from mode // eslint-disable-next-line no-bitwise - expect((await stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o777); + expect((await Fsp.stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o777); }; describe('resolveDockerImage()', () => { @@ -508,7 +507,7 @@ describe('setupServerlessVolumes()', () => { const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath }); volumeCmdTest(volumeCmd); - expect(existsSync(serverlessObjectStorePath)).toBe(true); + await expect(Fsp.access(serverlessObjectStorePath)).resolves.not.toThrow(); }); test('should use an existing object store', async () => { @@ -517,7 +516,9 @@ describe('setupServerlessVolumes()', () => { const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath }); volumeCmdTest(volumeCmd); - expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(true); + await expect( + Fsp.access(`${serverlessObjectStorePath}/cluster_state/lease`) + ).resolves.not.toThrow(); }); test('should remove an existing object store when clean is passed', async () => { @@ -526,7 +527,9 @@ describe('setupServerlessVolumes()', () => { const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath, clean: true }); volumeCmdTest(volumeCmd); - expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(false); + await expect( + Fsp.access(`${serverlessObjectStorePath}/cluster_state/lease`) + ).rejects.toThrowError(); }); test('should add SSL and IDP metadata volumes when ssl and kibanaUrl are passed', async () => { diff --git a/packages/kbn-es/src/utils/docker.ts b/packages/kbn-es/src/utils/docker.ts index 31c00beb7a71f..8273d0267b319 100644 --- a/packages/kbn-es/src/utils/docker.ts +++ b/packages/kbn-es/src/utils/docker.ts @@ -542,12 +542,19 @@ export async function setupServerlessVolumes(log: ToolingLog, options: Serverles log.info(chalk.bold(`Checking for local serverless ES object store at ${objectStorePath}`)); log.indent(4); - if (clean && fs.existsSync(objectStorePath)) { + let exists = null; + try { + await Fsp.access(objectStorePath); + exists = true; + } catch (e) { + exists = false; + } + if (clean && exists) { log.info('Cleaning existing object store.'); await Fsp.rm(objectStorePath, { recursive: true, force: true }); } - if (clean || !fs.existsSync(objectStorePath)) { + if (clean || !exists) { await Fsp.mkdir(objectStorePath, { recursive: true }).then(() => log.info('Created new object store.') ); diff --git a/packages/kbn-eslint-plugin-imports/README.mdx b/packages/kbn-eslint-plugin-imports/README.mdx index 1d6971d30e97f..b8eb60e98c3ed 100644 --- a/packages/kbn-eslint-plugin-imports/README.mdx +++ b/packages/kbn-eslint-plugin-imports/README.mdx @@ -39,6 +39,10 @@ This rule validates that every import request in the repsitory follows a standar This rule is not configurable, should never be skipped, and is auto-fixable. +## `@kbn/imports/require_import` + +This rule validates that specific imports are present in a file. This allows you to e.g. require Mocha globals in test files automatically. Currently the only supported import type is a TypeScript reference type. This rule is auto-fixable. + ## `@kbn/imports/exports_moved_packages` This rule assists package authors who are doing the good work of breaking up large packages. The goal is to define exports which used to be part of one package as having moved to another package. The configuration maintains this mapping and is designed to be extended in the future is additional needs arrise like targetting specific package types. diff --git a/packages/kbn-eslint-plugin-imports/index.ts b/packages/kbn-eslint-plugin-imports/index.ts index 2db05a0d59baa..5ff083ce4a1e0 100644 --- a/packages/kbn-eslint-plugin-imports/index.ts +++ b/packages/kbn-eslint-plugin-imports/index.ts @@ -12,6 +12,7 @@ import { UniformImportsRule } from './src/rules/uniform_imports'; import { ExportsMovedPackagesRule } from './src/rules/exports_moved_packages'; import { NoUnusedImportsRule } from './src/rules/no_unused_imports'; import { NoBoundaryCrossingRule } from './src/rules/no_boundary_crossing'; +import { RequireImportRule } from './src/rules/require_import'; /** * Custom ESLint rules, add `'@kbn/eslint-plugin-imports'` to your eslint config to use them @@ -23,4 +24,5 @@ export const rules = { exports_moved_packages: ExportsMovedPackagesRule, no_unused_imports: NoUnusedImportsRule, no_boundary_crossing: NoBoundaryCrossingRule, + require_import: RequireImportRule, }; diff --git a/packages/kbn-eslint-plugin-imports/src/rules/require_import.test.ts b/packages/kbn-eslint-plugin-imports/src/rules/require_import.test.ts new file mode 100644 index 0000000000000..ad2ca020f3d28 --- /dev/null +++ b/packages/kbn-eslint-plugin-imports/src/rules/require_import.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { RuleTester } from 'eslint'; +import { RequireImportRule } from './require_import'; +import dedent from 'dedent'; + +const fmt = (str: TemplateStringsArray) => dedent(str) + '\n'; + +const tsTester = [ + '@typescript-eslint/parser', + new RuleTester({ + parser: require.resolve('@typescript-eslint/parser'), + parserOptions: { + sourceType: 'module', + ecmaVersion: 2018, + ecmaFeatures: { + jsx: true, + }, + }, + }), +] as const; + +const babelTester = [ + '@babel/eslint-parser', + new RuleTester({ + parser: require.resolve('@babel/eslint-parser'), + parserOptions: { + sourceType: 'module', + ecmaVersion: 2018, + requireConfigFile: false, + babelOptions: { + presets: ['@kbn/babel-preset/node_preset'], + }, + }, + }), +] as const; + +for (const [name, tester] of [tsTester, babelTester]) { + describe(name, () => { + tester.run('@kbn/imports/require_import', RequireImportRule, { + valid: [ + { + options: ['mocha'], + filename: 'foo.ts', + code: fmt` + import 'mocha'; + + /// + + describe(( ) => { + before(( ) => { + }); + }); + `, + }, + ], + invalid: [ + { + options: ['mocha'], + filename: 'foo.ts', + code: fmt` + describe(( ) => { + before(( ) => { + }); + }); + `, + output: fmt`/// + + describe(( ) => { + before(( ) => { + }); + });`, + errors: [ + { + line: 1, + message: `Required module 'mocha' is not imported as a type reference`, + }, + ], + }, + ], + }); + }); +} diff --git a/packages/kbn-eslint-plugin-imports/src/rules/require_import.ts b/packages/kbn-eslint-plugin-imports/src/rules/require_import.ts new file mode 100644 index 0000000000000..f766735ab7e66 --- /dev/null +++ b/packages/kbn-eslint-plugin-imports/src/rules/require_import.ts @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { Rule } from 'eslint'; +import { load } from 'cheerio'; + +type StringModuleConfig = string; + +interface ObjectModuleConfig { + module: string; + as: ReferenceModuleAs; +} + +type ModuleConfig = StringModuleConfig | ObjectModuleConfig; + +enum ReferenceModuleAs { + typeReference = 'typeReference', +} + +export const RequireImportRule: Rule.RuleModule = { + meta: { + type: 'problem', + fixable: 'code', + docs: { + url: 'https://github.com/elastic/kibana/blob/main/packages/kbn-eslint-plugin-imports/README.mdx#kbnimportsrequire_import', + }, + schema: { + type: 'array', + items: { + oneOf: [ + { + type: 'string', + }, + { + type: 'object', + additionalProperties: false, + additionalItems: false, + properties: { + module: { + type: 'string', + }, + as: { + type: 'string', + }, + }, + required: ['module', 'type'], + }, + ], + }, + }, + }, + + create(context) { + const requiredImports: ModuleConfig[] = context.options; + + const mappedOptions: ObjectModuleConfig[] = requiredImports.map((config) => { + if (typeof config === 'string') { + return { + module: config, + as: ReferenceModuleAs.typeReference, + }; + } + return config; + }); + + return { + 'Program:exit': (node) => { + mappedOptions.forEach((option) => { + switch (option.as) { + case ReferenceModuleAs.typeReference: + const hasImport = node.comments?.some((comment) => { + const nodeText = comment.value.match(/\/\s*(<.*>)/)?.[1]; + if (nodeText) { + const parsedNode = load(nodeText, { xml: true })()._root?.children()[0]; + return ( + parsedNode && + parsedNode.name === 'reference' && + parsedNode.attribs.types === option.module + ); + } + }); + + if (!hasImport) { + context.report({ + node, + message: `Required module '${option.module}' is not imported as a type reference`, + fix(fixer) { + return fixer.insertTextBefore( + node.body[0], + `/// \n\n` + ); + }, + }); + } + } + }); + }, + }; + }, +}; diff --git a/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts index 8b131db4c05e5..088f6fedc85f7 100644 --- a/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts +++ b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts @@ -52,12 +52,16 @@ export async function retryForSuccess(log: ToolingLog, options: Options) { const start = Date.now(); const retryDelay = 502; + const criticalWebDriverErrors = ['NoSuchSessionError', 'NoSuchWindowError']; let lastError; while (true) { if (Date.now() - start > timeout) { await onFailure(lastError); throw new Error('expected onFailure() option to throw an error'); + } else if (lastError && criticalWebDriverErrors.includes(lastError.name)) { + // Aborting retry since WebDriver session is invalid or browser window is closed + throw new Error('WebDriver session is invalid, retry was aborted'); } else if (lastError && onFailureBlock) { const before = await runAttempt(onFailureBlock); if ('error' in before) { diff --git a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_filters.tsx b/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_filters.tsx index 28314f7f08bf2..c5132cc1fd146 100644 --- a/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_filters.tsx +++ b/packages/kbn-guided-onboarding/src/components/landing_page/guide/guide_filters.tsx @@ -69,6 +69,7 @@ export const GuideFilters = ({ @@ -82,6 +83,7 @@ export const GuideFilters = ({ @@ -95,6 +97,7 @@ export const GuideFilters = ({ diff --git a/packages/kbn-i18n/GUIDELINE.md b/packages/kbn-i18n/GUIDELINE.md index 98f6f176d0be8..983515a16c737 100644 --- a/packages/kbn-i18n/GUIDELINE.md +++ b/packages/kbn-i18n/GUIDELINE.md @@ -128,7 +128,7 @@ Here's a rule of id naming: 'kbn.management.createIndexPattern.includeSystemIndicesToggleSwitch' 'kbn.management.editIndexPattern.wrongTypeErrorMessage' 'kbn.management.editIndexPattern.scripted.table.nameDescription' - 'xpack.lens.formulaDocumentation.filterRatioDescription.markdown' + 'lensFormulaDocs.documentation.filterRatioDescription.markdown' ``` - For complex messages, which are divided into several parts, use the following approach: @@ -183,7 +183,7 @@ Each message id should end with a type of the message. | tooltip | `kbn.management.editIndexPattern.removeTooltip` | | error message | `kbn.management.createIndexPattern.step.invalidCharactersErrorMessage` | | toggleSwitch | `kbn.management.createIndexPattern.includeSystemIndicesToggleSwitch` | -| markdown | `xpack.lens.formulaDocumentation.filterRatioDescription.markdown` | +| markdown | `lensFormulaDocs.documentation.filterRatioDescription.markdown` | For example: @@ -278,7 +278,7 @@ For example: = [ + average, + count, + cardinality, + counterRate, + cumulativeSum, + differences, + interval, + lastValue, + max, + median, + min, + movingAverage, + normalizeByUnit, + now, + overallAverge, + overallMax, + overallMin, + overallSum, + percentileRank, + percentile, + stdDeviation, + sum, + timeRange, +].reduce((memo: Record, op: OperationDocumentationType) => { + memo[op.id] = op; + return memo; +}, {}); + +export { tinymathFunctions, getTypeI18n } from './src/math'; +export { sections } from './src/sections'; diff --git a/packages/kbn-lens-formula-docs/jest.config.js b/packages/kbn-lens-formula-docs/jest.config.js new file mode 100644 index 0000000000000..65a09b087a8e7 --- /dev/null +++ b/packages/kbn-lens-formula-docs/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-lens-formula-docs'], +}; diff --git a/packages/kbn-lens-formula-docs/kibana.jsonc b/packages/kbn-lens-formula-docs/kibana.jsonc new file mode 100644 index 0000000000000..11135fcff7d7e --- /dev/null +++ b/packages/kbn-lens-formula-docs/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/lens-formula-docs", + "owner": ["@elastic/kibana-visualizations"] +} diff --git a/packages/kbn-lens-formula-docs/package.json b/packages/kbn-lens-formula-docs/package.json new file mode 100644 index 0000000000000..c9494c6248a90 --- /dev/null +++ b/packages/kbn-lens-formula-docs/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/lens-formula-docs", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false + } \ No newline at end of file diff --git a/packages/kbn-lens-formula-docs/src/math/index.ts b/packages/kbn-lens-formula-docs/src/math/index.ts new file mode 100644 index 0000000000000..5ce1c12e0a5ba --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/math/index.ts @@ -0,0 +1,640 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export function getTypeI18n(type: string) { + if (type === 'number') { + return i18n.translate('lensFormulaDocs.number', { defaultMessage: 'number' }); + } + if (type === 'string') { + return i18n.translate('lensFormulaDocs.string', { defaultMessage: 'string' }); + } + if (type === 'boolean') { + return i18n.translate('lensFormulaDocs.boolean', { defaultMessage: 'boolean' }); + } + return ''; +} + +export const tinymathFunctions: Record< + string, + { + section: 'math' | 'comparison'; + positionalArguments: Array<{ + name: string; + optional?: boolean; + defaultValue?: string | number; + type?: string; + alternativeWhenMissing?: string; + }>; + // Help is in Markdown format + help: string; + // When omitted defaults to "number". + // Used for comparison functions return type + outputType?: string; + } +> = { + add: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.addFunction.markdown', { + defaultMessage: ` +Adds up two numbers. +Also works with \`+\` symbol. + +Example: Calculate the sum of two fields + +\`sum(price) + sum(tax)\` + +Example: Offset count by a static value + +\`add(count(), 5)\` + `, + }), + }, + subtract: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.subtractFunction.markdown', { + defaultMessage: ` +Subtracts the first number from the second number. +Also works with \`-\` symbol. + +Example: Calculate the range of a field +\`subtract(max(bytes), min(bytes))\` + `, + }), + }, + multiply: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.multiplyFunction.markdown', { + defaultMessage: ` +Multiplies two numbers. +Also works with \`*\` symbol. + +Example: Calculate price after current tax rate +\`sum(bytes) * last_value(tax_rate)\` + +Example: Calculate price after constant tax rate +\`multiply(sum(price), 1.2)\` + `, + }), + }, + divide: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.divideFunction.markdown', { + defaultMessage: ` +Divides the first number by the second number. +Also works with \`/\` symbol + +Example: Calculate profit margin +\`sum(profit) / sum(revenue)\` + +Example: \`divide(sum(bytes), 2)\` + `, + }), + }, + abs: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.absFunction.markdown', { + defaultMessage: ` +Calculates absolute value. A negative value is multiplied by -1, a positive value stays the same. + +Example: Calculate average distance to sea level \`abs(average(altitude))\` + `, + }), + }, + cbrt: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.cbrtFunction.markdown', { + defaultMessage: ` +Cube root of value. + +Example: Calculate side length from volume +\`cbrt(last_value(volume))\` + `, + }), + }, + ceil: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.ceilFunction.markdown', { + defaultMessage: ` +Ceiling of value, rounds up. + +Example: Round up price to the next dollar +\`ceil(sum(price))\` + `, + }), + }, + clamp: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.min', { defaultMessage: 'min' }), + type: getTypeI18n('number'), + alternativeWhenMissing: 'pick_max', + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.max', { defaultMessage: 'max' }), + type: getTypeI18n('number'), + alternativeWhenMissing: 'pick_min', + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.clampFunction.markdown', { + defaultMessage: ` +Limits the value from a minimum to maximum. + +Example: Make sure to catch outliers +\`\`\` +clamp( + average(bytes), + percentile(bytes, percentile=5), + percentile(bytes, percentile=95) +) +\`\`\` +`, + }), + }, + cube: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.cubeFunction.markdown', { + defaultMessage: ` +Calculates the cube of a number. + +Example: Calculate volume from side length +\`cube(last_value(length))\` + `, + }), + }, + exp: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.expFunction.markdown', { + defaultMessage: ` +Raises *e* to the nth power. + +Example: Calculate the natural exponential function + +\`exp(last_value(duration))\` + `, + }), + }, + fix: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.fixFunction.markdown', { + defaultMessage: ` +For positive values, takes the floor. For negative values, takes the ceiling. + +Example: Rounding towards zero +\`fix(sum(profit))\` + `, + }), + }, + floor: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.floorFunction.markdown', { + defaultMessage: ` +Round down to nearest integer value + +Example: Round down a price +\`floor(sum(price))\` + `, + }), + }, + log: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.base', { defaultMessage: 'base' }), + optional: true, + defaultValue: 'e', + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.logFunction.markdown', { + defaultMessage: ` +Logarithm with optional base. The natural base *e* is used as default. + +Example: Calculate number of bits required to store values +\`\`\` +log(sum(bytes)) +log(sum(bytes), 2) +\`\`\` + `, + }), + }, + mod: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.base', { defaultMessage: 'base' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.modFunction.markdown', { + defaultMessage: ` +Remainder after dividing the function by a number + +Example: Calculate last three digits of a value +\`mod(sum(price), 1000)\` + `, + }), + }, + pow: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.base', { defaultMessage: 'base' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.powFunction.markdown', { + defaultMessage: ` +Raises the value to a certain power. The second argument is required + +Example: Calculate volume based on side length +\`pow(last_value(length), 3)\` + `, + }), + }, + round: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.decimals', { defaultMessage: 'decimals' }), + optional: true, + defaultValue: 0, + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.roundFunction.markdown', { + defaultMessage: ` +Rounds to a specific number of decimal places, default of 0 + +Examples: Round to the cent +\`\`\` +round(sum(bytes)) +round(sum(bytes), 2) +\`\`\` + `, + }), + }, + sqrt: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.sqrtFunction.markdown', { + defaultMessage: ` +Square root of a positive value only + +Example: Calculate side length based on area +\`sqrt(last_value(area))\` + `, + }), + }, + square: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.squareFunction.markdown', { + defaultMessage: ` +Raise the value to the 2nd power + +Example: Calculate area based on side length +\`square(last_value(length))\` + `, + }), + }, + pick_max: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.maxFunction.markdown', { + defaultMessage: ` +Finds the maximum value between two numbers. + +Example: Find the maximum between two fields averages +\`pick_max(average(bytes), average(memory))\` + `, + }), + }, + pick_min: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.minFunction.markdown', { + defaultMessage: ` +Finds the minimum value between two numbers. + +Example: Find the minimum between two fields averages +\`pick_min(average(bytes), average(memory))\` + `, + }), + }, + defaults: { + section: 'math', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.value', { defaultMessage: 'value' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.defaultValue', { + defaultMessage: 'default', + }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.defaultFunction.markdown', { + defaultMessage: ` +Returns a default numeric value when value is null. + +Example: Return -1 when a field has no data +\`defaults(average(bytes), -1)\` +`, + }), + }, + lt: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + outputType: getTypeI18n('boolean'), + help: i18n.translate('lensFormulaDocs.tinymath.ltFunction.markdown', { + defaultMessage: ` +Performs a lower than comparison between two values. +To be used as condition for \`ifelse\` comparison function. +Also works with \`<\` symbol. + +Example: Returns true if the average of bytes is lower than the average amount of memory +\`average(bytes) <= average(memory)\` + +Example: \`lt(average(bytes), 1000)\` + `, + }), + }, + gt: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + outputType: getTypeI18n('boolean'), + help: i18n.translate('lensFormulaDocs.tinymath.gtFunction.markdown', { + defaultMessage: ` +Performs a greater than comparison between two values. +To be used as condition for \`ifelse\` comparison function. +Also works with \`>\` symbol. + +Example: Returns true if the average of bytes is greater than the average amount of memory +\`average(bytes) > average(memory)\` + +Example: \`gt(average(bytes), 1000)\` + `, + }), + }, + eq: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + outputType: getTypeI18n('boolean'), + help: i18n.translate('lensFormulaDocs.tinymath.eqFunction.markdown', { + defaultMessage: ` +Performs an equality comparison between two values. +To be used as condition for \`ifelse\` comparison function. +Also works with \`==\` symbol. + +Example: Returns true if the average of bytes is exactly the same amount of average memory +\`average(bytes) == average(memory)\` + +Example: \`eq(sum(bytes), 1000000)\` + `, + }), + }, + lte: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + outputType: getTypeI18n('boolean'), + help: i18n.translate('lensFormulaDocs.tinymath.lteFunction.markdown', { + defaultMessage: ` +Performs a lower than or equal comparison between two values. +To be used as condition for \`ifelse\` comparison function. +Also works with \`<=\` symbol. + +Example: Returns true if the average of bytes is lower than or equal to the average amount of memory +\`average(bytes) <= average(memory)\` + +Example: \`lte(average(bytes), 1000)\` + `, + }), + }, + gte: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + outputType: getTypeI18n('boolean'), + help: i18n.translate('lensFormulaDocs.tinymath.gteFunction.markdown', { + defaultMessage: ` +Performs a greater than comparison between two values. +To be used as condition for \`ifelse\` comparison function. +Also works with \`>=\` symbol. + +Example: Returns true if the average of bytes is greater than or equal to the average amount of memory +\`average(bytes) >= average(memory)\` + +Example: \`gte(average(bytes), 1000)\` + `, + }), + }, + ifelse: { + section: 'comparison', + positionalArguments: [ + { + name: i18n.translate('lensFormulaDocs.tinymath.condition', { defaultMessage: 'condition' }), + type: getTypeI18n('boolean'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.left', { defaultMessage: 'left' }), + type: getTypeI18n('number'), + }, + { + name: i18n.translate('lensFormulaDocs.tinymath.right', { defaultMessage: 'right' }), + type: getTypeI18n('number'), + }, + ], + help: i18n.translate('lensFormulaDocs.tinymath.ifElseFunction.markdown', { + defaultMessage: ` +Returns a value depending on whether the element of condition is true or false. + +Example: Average revenue per customer but in some cases customer id is not provided which counts as additional customer +\`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))\` + `, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/average.ts b/packages/kbn-lens-formula-docs/src/operations/average.ts new file mode 100644 index 0000000000000..84e755be52782 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/average.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const AVG_ID = 'average'; +export const AVG_NAME = i18n.translate('lensFormulaDocs.avg', { + defaultMessage: 'Average', +}); + +export const average = buildMetricDocumentationDefinition({ + id: AVG_ID, + name: AVG_NAME, +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/cardinality.ts b/packages/kbn-lens-formula-docs/src/operations/cardinality.ts new file mode 100644 index 0000000000000..6bb1ddb9e2889 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/cardinality.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const CARDINALITY_ID = 'unique_count'; +export const CARDINALITY_NAME = i18n.translate('lensFormulaDocs.cardinality', { + defaultMessage: 'Unique Count', +}); + +export const cardinality: OperationDocumentationType = { + id: CARDINALITY_ID, + name: CARDINALITY_NAME, + documentation: { + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.cardinality.signature', { + defaultMessage: 'field: string', + }), + description: i18n.translate('lensFormulaDocs.cardinality.documentation.markdown', { + defaultMessage: ` +Calculates the number of unique values of a specified field. Works for number, string, date and boolean values. + +Example: Calculate the number of different products: +\`unique_count(product.name)\` + +Example: Calculate the number of different products from the "clothes" group: +\`unique_count(product.name, kql='product.group=clothes')\` + `, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/count.ts b/packages/kbn-lens-formula-docs/src/operations/count.ts new file mode 100644 index 0000000000000..db5fdf37df5e1 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/count.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const COUNT_ID = 'count'; +export const COUNT_NAME = i18n.translate('lensFormulaDocs.count', { + defaultMessage: 'Count', +}); + +export const count: OperationDocumentationType = { + id: COUNT_ID, + name: COUNT_NAME, + documentation: { + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.count.signature', { + defaultMessage: '[field: string]', + }), + description: i18n.translate('lensFormulaDocs.count.documentation.markdown', { + defaultMessage: ` +The total number of documents. When you provide a field, the total number of field values is counted. When you use the Count function for fields that have multiple values in a single document, all values are counted. + +#### Examples + +To calculate the total number of documents, use \`count()\`. + +To calculate the number of products in all orders, use \`count(products.id)\`. + +To calculate the number of documents that match a specific filter, use \`count(kql='price > 500')\`. +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/counter_rate.ts b/packages/kbn-lens-formula-docs/src/operations/counter_rate.ts new file mode 100644 index 0000000000000..7321fb30e354b --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/counter_rate.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const COUNTER_RATE_ID = 'counter_rate'; +export const COUNTER_RATE_NAME = i18n.translate('lensFormulaDocs.counterRate', { + defaultMessage: 'Counter rate', +}); + +export const counterRate: OperationDocumentationType = { + id: COUNTER_RATE_ID, + name: COUNTER_RATE_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.counterRate.signature', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.counterRate.documentation.markdown', { + defaultMessage: ` +Calculates the rate of an ever increasing counter. This function will only yield helpful results on counter metric fields which contain a measurement of some kind monotonically growing over time. +If the value does get smaller, it will interpret this as a counter reset. To get most precise results, \`counter_rate\` should be calculated on the \`max\` of a field. + +This calculation will be done separately for separate series defined by filters or top values dimensions. +It uses the current interval when used in Formula. + +Example: Visualize the rate of bytes received over time by a memcached server: +\`counter_rate(max(memcached.stats.read.bytes))\` + `, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/cumulative_sum.ts b/packages/kbn-lens-formula-docs/src/operations/cumulative_sum.ts new file mode 100644 index 0000000000000..d25b76f3cb5b8 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/cumulative_sum.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const CUMULATIVE_SUM_ID = 'cumulative_sum'; +export const CUMULATIVE_SUM_NAME = i18n.translate('lensFormulaDocs.cumulativeSum', { + defaultMessage: 'Cumulative sum', +}); + +export const cumulativeSum: OperationDocumentationType = { + id: CUMULATIVE_SUM_ID, + name: CUMULATIVE_SUM_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.cumulative_sum.signature', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.cumulativeSum.documentation.markdown', { + defaultMessage: ` +Calculates the cumulative sum of a metric over time, adding all previous values of a series to each value. To use this function, you need to configure a date histogram dimension as well. + +This calculation will be done separately for separate series defined by filters or top values dimensions. + +Example: Visualize the received bytes accumulated over time: +\`cumulative_sum(sum(bytes))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/differences.ts b/packages/kbn-lens-formula-docs/src/operations/differences.ts new file mode 100644 index 0000000000000..ccbf4e091083a --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/differences.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const DIFFERENCES_ID = 'differences'; +export const DIFFERENCES_NAME = i18n.translate('lensFormulaDocs.derivative', { + defaultMessage: 'Differences', +}); + +export const differences: OperationDocumentationType = { + id: DIFFERENCES_ID, + name: DIFFERENCES_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.differences.signature', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.differences.documentation.markdown', { + defaultMessage: ` +Calculates the difference to the last value of a metric over time. To use this function, you need to configure a date histogram dimension as well. +Differences requires the data to be sequential. If your data is empty when using differences, try increasing the date histogram interval. + +This calculation will be done separately for separate series defined by filters or top values dimensions. + +Example: Visualize the change in bytes received over time: +\`differences(sum(bytes))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/helpers.ts b/packages/kbn-lens-formula-docs/src/operations/helpers.ts new file mode 100644 index 0000000000000..0749dcab277b4 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/helpers.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +function buildDocumentationDefinition({ + id, + name, + documentation, + signature, + section, +}: { + id: string; + name: string; + documentation: string; + signature: string; + section: 'elasticsearch' | 'calculation' | 'constants'; +}): OperationDocumentationType { + return { + id, + name, + documentation: { + section, + signature, + description: documentation, + }, + }; +} + +export function buildMetricDocumentationDefinition({ + id, + name, + documentation, +}: { + id: string; + name: string; + documentation?: string; +}): OperationDocumentationType { + return buildDocumentationDefinition({ + id, + name, + documentation: + documentation || + i18n.translate('lensFormulaDocs.metric.documentation.markdown', { + defaultMessage: ` +Returns the {metric} of a field. This function only works for number fields. + +Example: Get the {metric} of price: +\`{metric}(price)\` + +Example: Get the {metric} of price for orders from the UK: +\`{metric}(price, kql='location:UK')\` + `, + values: { + metric: id, + }, + }), + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.metric.signature', { + defaultMessage: 'field: string', + }), + }); +} + +export function buildContextVariableDocumentationDefinition({ + id, + name, + documentation, +}: { + id: string; + name: string; + documentation: string; +}): OperationDocumentationType { + return buildDocumentationDefinition({ + id, + name, + documentation, + section: 'constants', + signature: '', + }); +} diff --git a/packages/kbn-lens-formula-docs/src/operations/interval.ts b/packages/kbn-lens-formula-docs/src/operations/interval.ts new file mode 100644 index 0000000000000..b36f9a34914fc --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/interval.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildContextVariableDocumentationDefinition } from './helpers'; + +export const INTERVAL_ID = 'interval'; +export const INTERVAL_NAME = i18n.translate('lensFormulaDocs.interval', { + defaultMessage: 'Date histogram interval', +}); + +export const interval = buildContextVariableDocumentationDefinition({ + id: INTERVAL_ID, + name: INTERVAL_NAME, + documentation: i18n.translate('lensFormulaDocs.interval.help', { + defaultMessage: ` +The specified minimum interval for the date histogram, in milliseconds (ms). + +Example: Dynamically normalize the metric based on bucket interval size: +\`sum(bytes) / interval()\` +`, + }), +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/last_value.ts b/packages/kbn-lens-formula-docs/src/operations/last_value.ts new file mode 100644 index 0000000000000..5705aad8ef090 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/last_value.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const LAST_VALUE_ID = 'last_value'; +export const LAST_VALUE_NAME = i18n.translate('lensFormulaDocs.lastValue', { + defaultMessage: 'Last value', +}); + +export const lastValue: OperationDocumentationType = { + id: LAST_VALUE_ID, + name: LAST_VALUE_NAME, + documentation: { + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.lastValue.signature', { + defaultMessage: 'field: string', + }), + description: i18n.translate('lensFormulaDocs.lastValue.documentation.markdown', { + defaultMessage: ` +Returns the value of a field from the last document, ordered by the default time field of the data view. + +This function is usefull the retrieve the latest state of an entity. + +Example: Get the current status of server A: +\`last_value(server.status, kql=\'server.name="A"\')\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/max.ts b/packages/kbn-lens-formula-docs/src/operations/max.ts new file mode 100644 index 0000000000000..1068d796f1028 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/max.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const MAX_ID = 'max'; +export const MAX_NAME = i18n.translate('lensFormulaDocs.max', { + defaultMessage: 'Maximum', +}); + +export const max = buildMetricDocumentationDefinition({ + id: MAX_ID, + name: MAX_NAME, +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/median.ts b/packages/kbn-lens-formula-docs/src/operations/median.ts new file mode 100644 index 0000000000000..7dfdaefa9b86c --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/median.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const MEDIAN_ID = 'median'; +export const MEDIAN_NAME = i18n.translate('lensFormulaDocs.median', { + defaultMessage: 'Median', +}); + +export const median = buildMetricDocumentationDefinition({ + id: MEDIAN_ID, + name: MEDIAN_NAME, +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/min.ts b/packages/kbn-lens-formula-docs/src/operations/min.ts new file mode 100644 index 0000000000000..b2f8650d30081 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/min.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const MIN_ID = 'min'; +export const MIN_NAME = i18n.translate('lensFormulaDocs.min', { + defaultMessage: 'Minimum', +}); + +export const min = buildMetricDocumentationDefinition({ + id: MIN_ID, + name: MIN_NAME, +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/moving_average.ts b/packages/kbn-lens-formula-docs/src/operations/moving_average.ts new file mode 100644 index 0000000000000..4c3177db93b11 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/moving_average.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const MOVING_AVERAGE_ID = 'moving_average'; +export const MOVING_AVERAGE_NAME = i18n.translate('lensFormulaDocs.movingAverage', { + defaultMessage: 'Moving average', +}); +export const MOVING_AVERAGE_WINDOW_DEFAULT_VALUE = 5; + +export const movingAverage: OperationDocumentationType = { + id: MOVING_AVERAGE_ID, + name: MOVING_AVERAGE_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.moving_average.signature', { + defaultMessage: 'metric: number, [window]: number', + }), + description: i18n.translate('lensFormulaDocs.movingAverage.documentation.markdown', { + defaultMessage: ` +Calculates the moving average of a metric over time, averaging the last n-th values to calculate the current value. To use this function, you need to configure a date histogram dimension as well. +The default window value is {defaultValue}. + +This calculation will be done separately for separate series defined by filters or top values dimensions. + +Takes a named parameter \`window\` which specifies how many last values to include in the average calculation for the current value. + +Example: Smooth a line of measurements: +\`moving_average(sum(bytes), window=5)\` +`, + values: { + defaultValue: MOVING_AVERAGE_WINDOW_DEFAULT_VALUE, + }, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/normalize_by_unit.ts b/packages/kbn-lens-formula-docs/src/operations/normalize_by_unit.ts new file mode 100644 index 0000000000000..f66768f13a2b5 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/normalize_by_unit.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const NORMALIZE_BY_UNIT_ID = 'normalize_by_unit'; +export const NORMALIZE_BY_UNIT_NAME = i18n.translate('lensFormulaDocs.timeScale', { + defaultMessage: 'Normalize by unit', +}); + +export const normalizeByUnit: OperationDocumentationType = { + id: NORMALIZE_BY_UNIT_ID, + name: NORMALIZE_BY_UNIT_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.time_scale', { + defaultMessage: 'metric: number, unit: s|m|h|d|w|M|y', + }), + description: i18n.translate('lensFormulaDocs.time_scale.documentation.markdown', { + defaultMessage: ` +This advanced function is useful for normalizing counts and sums to a specific time interval. It allows for integration with metrics that are stored already normalized to a specific time interval. + +This function can only be used if there's a date histogram function used in the current chart. + +Example: A ratio comparing an already normalized metric to another metric that needs to be normalized. +\`normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/now.ts b/packages/kbn-lens-formula-docs/src/operations/now.ts new file mode 100644 index 0000000000000..cb5f1a6686d25 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/now.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildContextVariableDocumentationDefinition } from './helpers'; + +export const NOW_ID = 'now'; +export const NOW_NAME = i18n.translate('lensFormulaDocs.now', { + defaultMessage: 'Current now', +}); + +export const now = buildContextVariableDocumentationDefinition({ + id: NOW_ID, + name: NOW_NAME, + documentation: i18n.translate('lensFormulaDocs.now.help', { + defaultMessage: ` +The current now moment used in Kibana expressed in milliseconds (ms). + +Example: How long (in ms) has been the server running since the last restart? +\`now() - last_value(start_time)\` +`, + }), +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/overall_average.ts b/packages/kbn-lens-formula-docs/src/operations/overall_average.ts new file mode 100644 index 0000000000000..328c97fde47d6 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/overall_average.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const OVERALL_AVERAGE_ID = 'overall_average'; +export const OVERALL_AVERAGE_NAME = i18n.translate('lensFormulaDocs.overallAverage', { + defaultMessage: 'Overall average', +}); + +export const overallAverge: OperationDocumentationType = { + id: OVERALL_AVERAGE_ID, + name: OVERALL_AVERAGE_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.overall_metric', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.overall_average.documentation.markdown', { + defaultMessage: ` +Calculates the average of a metric for all data points of a series in the current chart. A series is defined by a dimension using a date histogram or interval function. +Other dimensions breaking down the data like top values or filter are treated as separate series. + +If no date histograms or interval functions are used in the current chart, \`overall_average\` is calculating the average over all dimensions no matter the used function + +Example: Divergence from the mean: +\`sum(bytes) - overall_average(sum(bytes))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/overall_max.ts b/packages/kbn-lens-formula-docs/src/operations/overall_max.ts new file mode 100644 index 0000000000000..4da02a7f1265f --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/overall_max.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const OVERALL_MAX_ID = 'overall_max'; +export const OVERALL_MAX_NAME = i18n.translate('lensFormulaDocs.overallMax', { + defaultMessage: 'Overall max', +}); + +export const overallMax: OperationDocumentationType = { + id: OVERALL_MAX_ID, + name: OVERALL_MAX_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.overall_metric', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.overall_max.documentation.markdown', { + defaultMessage: ` +Calculates the maximum of a metric for all data points of a series in the current chart. A series is defined by a dimension using a date histogram or interval function. +Other dimensions breaking down the data like top values or filter are treated as separate series. + +If no date histograms or interval functions are used in the current chart, \`overall_max\` is calculating the maximum over all dimensions no matter the used function + +Example: Percentage of range: +\`(sum(bytes) - overall_min(sum(bytes))) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/overall_min.ts b/packages/kbn-lens-formula-docs/src/operations/overall_min.ts new file mode 100644 index 0000000000000..f775f8d8448fa --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/overall_min.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const OVERALL_MIN_ID = 'overall_min'; +export const OVERALL_MIN_NAME = i18n.translate('lensFormulaDocs.overallMin', { + defaultMessage: 'Overall min', +}); + +export const overallMin: OperationDocumentationType = { + id: OVERALL_MIN_ID, + name: OVERALL_MIN_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.overall_metric', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.overall_min.documentation.markdown', { + defaultMessage: ` +Calculates the minimum of a metric for all data points of a series in the current chart. A series is defined by a dimension using a date histogram or interval function. +Other dimensions breaking down the data like top values or filter are treated as separate series. + +If no date histograms or interval functions are used in the current chart, \`overall_min\` is calculating the minimum over all dimensions no matter the used function + +Example: Percentage of range: +\`(sum(bytes) - overall_min(sum(bytes)) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/overall_sum.ts b/packages/kbn-lens-formula-docs/src/operations/overall_sum.ts new file mode 100644 index 0000000000000..b786cda98e4c8 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/overall_sum.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const OVERALL_SUM_ID = 'overall_sum'; +export const OVERALL_SUM_NAME = i18n.translate('lensFormulaDocs.overallSum', { + defaultMessage: 'Overall sum', +}); + +export const overallSum: OperationDocumentationType = { + id: OVERALL_SUM_ID, + name: OVERALL_SUM_NAME, + documentation: { + section: 'calculation', + signature: i18n.translate('lensFormulaDocs.overall_metric', { + defaultMessage: 'metric: number', + }), + description: i18n.translate('lensFormulaDocs.overall_sum.documentation.markdown', { + defaultMessage: ` +Calculates the sum of a metric of all data points of a series in the current chart. A series is defined by a dimension using a date histogram or interval function. +Other dimensions breaking down the data like top values or filter are treated as separate series. + +If no date histograms or interval functions are used in the current chart, \`overall_sum\` is calculating the sum over all dimensions no matter the used function. + +Example: Percentage of total: +\`sum(bytes) / overall_sum(sum(bytes))\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/percentile.ts b/packages/kbn-lens-formula-docs/src/operations/percentile.ts new file mode 100644 index 0000000000000..35c94a0c3d2be --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/percentile.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const PERCENTILE_ID = 'percentile'; +export const PERCENTILE_NAME = i18n.translate('lensFormulaDocs.percentile', { + defaultMessage: 'Percentile', +}); + +export const percentile: OperationDocumentationType = { + id: PERCENTILE_ID, + name: PERCENTILE_NAME, + documentation: { + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.percentile.signature', { + defaultMessage: 'field: string, [percentile]: number', + }), + description: i18n.translate('lensFormulaDocs.percentile.documentation.markdown', { + defaultMessage: ` +Returns the specified percentile of the values of a field. This is the value n percent of the values occuring in documents are smaller. + +Example: Get the number of bytes larger than 95 % of values: +\`percentile(bytes, percentile=95)\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/percentile_ranks.ts b/packages/kbn-lens-formula-docs/src/operations/percentile_ranks.ts new file mode 100644 index 0000000000000..2131131a2bf00 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/percentile_ranks.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { OperationDocumentationType } from './types'; + +export const PERCENTILE_RANK_ID = 'percentile_rank'; +export const PERCENTILE_RANK_NAME = i18n.translate('lensFormulaDocs.percentileRank', { + defaultMessage: 'Percentile rank', +}); + +export const percentileRank: OperationDocumentationType = { + id: PERCENTILE_RANK_ID, + name: PERCENTILE_RANK_NAME, + documentation: { + section: 'elasticsearch', + signature: i18n.translate('lensFormulaDocs.percentileRanks.signature', { + defaultMessage: 'field: string, [value]: number', + }), + description: i18n.translate('lensFormulaDocs.percentileRanks.documentation.markdown', { + defaultMessage: ` +Returns the percentage of values which are below a certain value. For example, if a value is greater than or equal to 95% of the observed values it is said to be at the 95th percentile rank + +Example: Get the percentage of values which are below of 100: +\`percentile_rank(bytes, value=100)\` +`, + }), + }, +}; diff --git a/packages/kbn-lens-formula-docs/src/operations/std_deviation.ts b/packages/kbn-lens-formula-docs/src/operations/std_deviation.ts new file mode 100644 index 0000000000000..6c0b0d1604b5b --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/std_deviation.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const STD_DEVIATION_ID = 'standard_deviation'; +export const STD_DEVIATION_NAME = i18n.translate('lensFormulaDocs.standardDeviation', { + defaultMessage: 'Standard deviation', +}); + +export const stdDeviation = buildMetricDocumentationDefinition({ + id: STD_DEVIATION_ID, + name: STD_DEVIATION_NAME, + documentation: i18n.translate('lensFormulaDocs.standardDeviation.documentation.markdown', { + defaultMessage: ` +Returns the amount of variation or dispersion of the field. The function works only for number fields. + +#### Examples + +To get the standard deviation of price, use \`standard_deviation(price)\`. + +To get the variance of price for orders from the UK, use \`square(standard_deviation(price, kql='location:UK'))\`. +`, + }), +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/sum.ts b/packages/kbn-lens-formula-docs/src/operations/sum.ts new file mode 100644 index 0000000000000..8c7882b213a09 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/sum.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildMetricDocumentationDefinition } from './helpers'; + +export const SUM_ID = 'sum'; +export const SUM_NAME = i18n.translate('lensFormulaDocs.sum', { + defaultMessage: 'Sum', +}); + +export const sum = buildMetricDocumentationDefinition({ + id: SUM_ID, + name: SUM_NAME, +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/time_range.ts b/packages/kbn-lens-formula-docs/src/operations/time_range.ts new file mode 100644 index 0000000000000..58107cbee1587 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/time_range.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { buildContextVariableDocumentationDefinition } from './helpers'; + +export const TIME_RANGE_ID = 'time_range'; +export const TIME_RANGE_NAME = i18n.translate('lensFormulaDocs.time_range', { + defaultMessage: 'Time range', +}); + +export const timeRange = buildContextVariableDocumentationDefinition({ + id: TIME_RANGE_ID, + name: TIME_RANGE_NAME, + documentation: i18n.translate('lensFormulaDocs.timeRange.help', { + defaultMessage: ` +The specified time range, in milliseconds (ms). + +Example: How long is the current time range? +\`time_range()\` +`, + }), +}); diff --git a/packages/kbn-lens-formula-docs/src/operations/types.ts b/packages/kbn-lens-formula-docs/src/operations/types.ts new file mode 100644 index 0000000000000..1351a9e9db28b --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/operations/types.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface OperationDocumentationType { + id: string; + name: string; + documentation: { + signature: string; + description: string; + section: 'elasticsearch' | 'calculation' | 'constants'; + }; +} diff --git a/packages/kbn-lens-formula-docs/src/sections/calculations.ts b/packages/kbn-lens-formula-docs/src/sections/calculations.ts new file mode 100644 index 0000000000000..824e171087ff3 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/calculations.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const calculationsSection = { + label: i18n.translate('lensFormulaDocs.documentation.columnCalculationSection', { + defaultMessage: 'Column calculations', + }), + description: i18n.translate('lensFormulaDocs.documentation.columnCalculationSectionDescription', { + defaultMessage: + 'These functions are executed for each row, but are provided with the whole column as context. This is also known as a window function.', + }), +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/common.ts b/packages/kbn-lens-formula-docs/src/sections/common.ts new file mode 100644 index 0000000000000..050b3edc810b9 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/common.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const commonFormulas = { + label: i18n.translate('lensFormulaDocs.frequentlyUsedHeading', { + defaultMessage: 'Common formulas', + }), + description: i18n.translate('lensFormulaDocs.CommonFormulaDocumentation', { + defaultMessage: `The most common formulas are dividing two values to produce a percent. To display accurately, set "value format" to "percent".`, + }), + items: [ + { + label: i18n.translate('lensFormulaDocs.documentation.filterRatio', { + defaultMessage: 'Filter ratio', + }), + description: i18n.translate('lensFormulaDocs.documentation.filterRatioDescription.markdown', { + defaultMessage: `### Filter ratio: + +Use \`kql=''\` to filter one set of documents and compare it to other documents within the same grouping. +For example, to see how the error rate changes over time: + +\`\`\` +count(kql='response.status_code > 400') / count() +\`\`\` + `, + + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + }), + }, + { + label: i18n.translate('lensFormulaDocs.documentation.weekOverWeek', { + defaultMessage: 'Week over week', + }), + description: i18n.translate( + 'lensFormulaDocs.documentation.weekOverWeekDescription.markdown', + { + defaultMessage: `### Week over week: + +Use \`shift='1w'\` to get the value of each grouping from +the previous week. Time shift should not be used with the *Top values* function. + +\`\`\` +percentile(system.network.in.bytes, percentile=99) / +percentile(system.network.in.bytes, percentile=99, shift='1w') +\`\`\` + `, + + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + ), + }, + { + label: i18n.translate('lensFormulaDocs.documentation.percentOfTotal', { + defaultMessage: 'Percent of total', + }), + description: i18n.translate( + 'lensFormulaDocs.documentation.percentOfTotalDescription.markdown', + { + defaultMessage: `### Percent of total + +Formulas can calculate \`overall_sum\` for all the groupings, +which lets you convert each grouping into a percent of total: + +\`\`\` +sum(products.base_price) / overall_sum(sum(products.base_price)) +\`\`\` + `, + + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + ), + }, + { + label: i18n.translate('lensFormulaDocs.documentation.recentChange', { + defaultMessage: 'Recent change', + }), + description: i18n.translate( + 'lensFormulaDocs.documentation.recentChangeDescription.markdown', + { + defaultMessage: `### Recent change + +Use \`reducedTimeRange='30m'\` to add an additional filter on the time range of a metric aligned with the end of the global time range. This can be used to calculate how much a value changed recently. + +\`\`\` +max(system.network.in.bytes, reducedTimeRange="30m") +- min(system.network.in.bytes, reducedTimeRange="30m") +\`\`\` + `, + + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + } + ), + }, + ], +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/comparison.ts b/packages/kbn-lens-formula-docs/src/sections/comparison.ts new file mode 100644 index 0000000000000..152b521301832 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/comparison.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const comparisonSection = { + label: i18n.translate('lensFormulaDocs.documentation.comparisonSection', { + defaultMessage: 'Comparison', + }), + description: i18n.translate('lensFormulaDocs.documentation.comparisonSectionDescription', { + defaultMessage: 'These functions are used to perform value comparison.', + }), +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/context.ts b/packages/kbn-lens-formula-docs/src/sections/context.ts new file mode 100644 index 0000000000000..c4bb989d6b5e7 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/context.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const contextSection = { + label: i18n.translate('lensFormulaDocs.documentation.constantsSection', { + defaultMessage: 'Kibana context', + }), + description: i18n.translate('lensFormulaDocs.documentation.constantsSectionDescription', { + defaultMessage: + 'These functions are used to retrieve Kibana context variables, which are the date histogram `interval`, the current `now` and the selected `time_range` and help you to compute date math operations.', + }), +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/elasticsearch.ts b/packages/kbn-lens-formula-docs/src/sections/elasticsearch.ts new file mode 100644 index 0000000000000..2570c96f08f70 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/elasticsearch.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const elasticsearchSection = { + label: i18n.translate('lensFormulaDocs.documentation.elasticsearchSection', { + defaultMessage: 'Elasticsearch', + }), + description: i18n.translate('lensFormulaDocs.documentation.elasticsearchSectionDescription', { + defaultMessage: + 'These functions will be executed on the raw documents for each row of the resulting table, aggregating all documents matching the break down dimensions into a single value.', + }), +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/how_to.ts b/packages/kbn-lens-formula-docs/src/sections/how_to.ts new file mode 100644 index 0000000000000..76eb91023013e --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/how_to.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const howToSection = i18n.translate('lensFormulaDocs.documentation.markdown', { + defaultMessage: `## How it works + +Lens formulas let you do math using a combination of Elasticsearch aggregations and +math functions. There are three main types of functions: + +* Elasticsearch metrics, like \`sum(bytes)\` +* Time series functions use Elasticsearch metrics as input, like \`cumulative_sum()\` +* Math functions like \`round()\` + +An example formula that uses all of these: + +\`\`\` +round(100 * moving_average( +average(cpu.load.pct), +window=10, +kql='datacenter.name: east*' +)) +\`\`\` + +Elasticsearch functions take a field name, which can be in quotes. \`sum(bytes)\` is the same +as \`sum('bytes')\`. + +Some functions take named arguments, like \`moving_average(count(), window=5)\`. + +Elasticsearch metrics can be filtered using KQL or Lucene syntax. To add a filter, use the named +parameter \`kql='field: value'\` or \`lucene=''\`. Always use single quotes when writing KQL or Lucene +queries. If your search has a single quote in it, use a backslash to escape, like: \`kql='Women's'\' + +Math functions can take positional arguments, like pow(count(), 3) is the same as count() * count() * count() + +Use the symbols +, -, /, and * to perform basic math. +`, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', +}); diff --git a/packages/kbn-lens-formula-docs/src/sections/index.ts b/packages/kbn-lens-formula-docs/src/sections/index.ts new file mode 100644 index 0000000000000..dafa94b8269f0 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { elasticsearchSection } from './elasticsearch'; +import { commonFormulas } from './common'; +import { comparisonSection } from './comparison'; +import { mathSection } from './math'; +import { calculationsSection } from './calculations'; +import { contextSection } from './context'; +import { howToSection } from './how_to'; + +export const sections = { + howTo: howToSection, + elasticsearch: elasticsearchSection, + common: commonFormulas, + comparison: comparisonSection, + math: mathSection, + calculations: calculationsSection, + context: contextSection, +}; diff --git a/packages/kbn-lens-formula-docs/src/sections/math.ts b/packages/kbn-lens-formula-docs/src/sections/math.ts new file mode 100644 index 0000000000000..d3fcaf6a15b93 --- /dev/null +++ b/packages/kbn-lens-formula-docs/src/sections/math.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +export const mathSection = { + label: i18n.translate('lensFormulaDocs.documentation.mathSection', { + defaultMessage: 'Math', + }), + description: i18n.translate('lensFormulaDocs.documentation.mathSectionDescription', { + defaultMessage: + 'These functions will be executed for reach row of the resulting table using single values from the same row calculated using other functions.', + }), +}; diff --git a/packages/kbn-lens-formula-docs/tsconfig.json b/packages/kbn-lens-formula-docs/tsconfig.json new file mode 100644 index 0000000000000..d28d082af4d18 --- /dev/null +++ b/packages/kbn-lens-formula-docs/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": ["jest", "node"] + }, + "include": ["**/*.ts"], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/i18n", + ] +} diff --git a/packages/kbn-mock-idp-plugin/common/utils.ts b/packages/kbn-mock-idp-plugin/common/utils.ts index 5d55fbc565685..f98425f08248f 100644 --- a/packages/kbn-mock-idp-plugin/common/utils.ts +++ b/packages/kbn-mock-idp-plugin/common/utils.ts @@ -149,19 +149,19 @@ export async function createSAMLResponse(options: { `; - const signature = new SignedXml(); + const signature = new SignedXml({ privateKey: await readFile(KBN_KEY_PATH) }); signature.signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; - signature.signingKey = await readFile(KBN_KEY_PATH); + signature.canonicalizationAlgorithm = 'http://www.w3.org/2001/10/xml-exc-c14n#'; // Adds a reference to a `Assertion` xml element and an array of transform algorithms to be used during signing. - signature.addReference( - `//*[local-name(.)='Assertion']`, - [ + signature.addReference({ + xpath: `//*[local-name(.)='Assertion']`, + digestAlgorithm: 'http://www.w3.org/2001/04/xmlenc#sha256', + transforms: [ 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#', ], - 'http://www.w3.org/2001/04/xmlenc#sha256' - ); + }); signature.computeSignature(samlAssertionTemplateXML, { location: { reference: `//*[local-name(.)='Issuer']`, action: 'after' }, diff --git a/packages/kbn-monaco/src/esql/lib/README.md b/packages/kbn-monaco/src/esql/lib/README.md new file mode 100644 index 0000000000000..b30082f710596 --- /dev/null +++ b/packages/kbn-monaco/src/esql/lib/README.md @@ -0,0 +1,128 @@ +# ES|QL utility library + +## Folder structure + +This library enables all the advanced features for ES|QL within Monaco, as validation, autocomplete, hover, etc... +The package is structure as follow: + +``` +|- antlr // => contains the ES|QL grammar files and various compilation assets +|- lib +| |- ast +| | | autocomplete // => the autocomplete/suggest logic +| | | definitions // => static assets to define all components behaviour of a ES|QL query: commands, functions, etc... +| | | hover // => hover logic +| | | signature // => signature service logic +| | | validation // => the validation logic +| | ast_factory.ts // => binding to the Antlr that generates the AST data structure +| | ast_errors.ts // => error translation utility from raw Antlr to something understandable (somewhat) +| | ... // => miscellaneas utilities to work with AST +| |- monaco // => some high level interfaces to work with +| | | esql_ast_provider.ts // => the API to work with validation, autocomplete, etc... +| | | ... +| antlr_facade.ts // => getParser and getLexer utilities +|- worker // => some Monaco utilities that runs in a WebWorker +language.ts // => ES|QL language definition for Monaco with API that expose all features to it +``` + +### Syntax highlight support + +In general the syntax highlight works out of the box, but in case of new tokens added it is required to add them into the `esql_theme.ts` file to color them. +There's also a special | (pipe) handling in case of multi-line with some offset applied to the token location indexes to fix some grammar problems with multi-line. In case of issues with highlight look into the `esql_token_provider.ts` file. + +### How does it work + +The general idea of this package is to provide all ES|QL features on top of a custom compact AST definition (all data structure types defined in `./ast/types.ts`) which is designed to be resilient to many grammar changes. +The pipeline is the following: + +``` +Antlr grammar files +=> Compiled grammar files (.ts assets in the antlr folder) +=> AST Factory (Antlr Parser tree => custom AST) +=> featureFn( AST, Definitions, ESQLCallbacks ) +``` + +Each feature function works with the combination of the AST and the definition files: the former describe the current statement in a easy to traverse way, while the definitions describe what's the expected behaviour of each node in the AST node (i.e. what arguments should it accept? How many arguments? etc...). +ESQLCallbacks are a set of utilities to retrieve context metadata like fields/index/policies list and policies metadata. + +While AST requires the grammar to be compiled to be updated, definitions are static files which can be dynamically updated without running the ANTLR compile task. + +#### AST + +The AST is generated by 2 files: `ast_factory.ts` and its buddy `ast_walker.ts`: +* `ast_factory.ts` is a binding to Antlr and access the Parser tree +* Parser tree is passed over to `ast_walker` to append new AST nodes + +In general Antlr is resilient to grammar errors, in the sense that it can produe a Parser tree up to the point of the error, then stops. This is useful to perform partial tasks even with broken queries and this means that a partial AST can be produced even with an invalid query. + +#### Validation + +Validation takes an AST as input and generates a list of messages to show to the user. +The validation function leverages the definition files to check if the current AST is respecting the defined behaviour. +Most of the logic rely purely on the definitions, but in some specific cases some ad-hoc conditions are defined within the code for specific commands/options. + +#### Autocomplete + +The autocomplete/suggest task takes a query as input together with the current cursor position, then produces internally an AST to work with, to generate a list of suggestions for the given query. +Note that autocomplete works most of the time with incomplete/invalid queries, so some logic to manipulate the query into something valid (see the `EDITOR_MARKER` or the `countBracketsUnclosed` functions for more). + +Once the AST is produced there's a `getAstContext` function that finds the cursor position node (and its parent command), together with some hint like the type of current context: `expression`, `function`, `newCommand`, `option`. +The most complex case is the `expression` as it can cover a moltitude of cases. The function is highly commented in order to identify the specific cases, but there's probably some obscure area still to comment/clarify. + +#### Hover + +The hover logic leverages the same `getAstContext` function as autocomplete but its logic is way simpler as it picks the right definition based on context and produces a set of strings for the tooltip. + +#### Signature + +No signature implementation has been added yet, but it will likely work as hover if/when implemented. + +### Keeping ES|QL up to date + +In general when operating on changes here use the `yarn kbn watch` in a terminal window to make sure changes are correctly compiled. + +#### How to add new functions + +When a new function is added to ES|QL, this can be of one of these types: + +* Built-in function (+, -, in, like, etc...) +* Aggregation type (`STATS` only) +* Math type (`EVAL`, `WHERE`, etc...) + +For each function type there's a specific file to update within the `definitions` folder: +* Built-in function => `builtin.ts` +* Aggregation type => `aggs.ts` +* Math type => `functions.ts` + +All function definitions are of the `FunctionDefinition` type and it's quite easy to add new ones. + +While validation tests for Aggregation and Math type will be automatically generated, for the Built-in type new tests needs to be added for both validation and autocomplete. + +#### How to add new commands/options + +When a new command/option is added to ES|QL it is done via a grammar update. +Therefore adding them requires a two step phase: +* Update the grammar with the new one + * add/fix all AST generator bindings in case of new/changed TOKENS in the `lexer` grammar file +* Update the definition files for commands/options + +To update the grammar: +1. start by copying the source grammar `lexer` and `parser` files +2. make sure to fix all the case insensitive occurrencies in `lexer` file (all non-symbol strings like `"something"` into `S O M E T H I N G`). +3. run the script into the `package.json` to compile the ES|QL grammar. +4. open the `ast_factory.ts` file and add a new `exit` method +5. write some code in the `ast_walker/ts` to translate the Antlr Parser tree into the custom AST (there are already few utilites for that, but sometimes it is required to write some more code if the `parser` introduced a new flow) + * pro tip: use the `http://lab.antlr.org/` to visualize/debug the parser tree for a given statement (copy and paste the grammar files there) +6. if a new quoted/unquoted identifier token gets added open the `ast_helpers.ts` and manually add the ids of the new tokens in the `getQuotedText` and `getUnquotedText` functions - please make sure to leave a comment on the token name + +To update the definitions: +1. open either the `commands.ts` or `option.ts` file and add a new entry +2. write new tests for validation and autocomplete + +#### Debug and fix grammar changes (tokens, etc...) + +On TOKEN renaming or with subtle `lexer` grammar changes it can happens that test breaks, this can be happen for two main issues: +* A TOKEN name changed so the `ast_walker.ts` doesn't find it any more. Go there and rename the TOKEN name. +* TOKEN order changed and tests started failing. This probably generated some TOKEN id reorder and there are two functions in `ast_helpers.ts` who rely on hardcoded ids: `getQuotedText` and `getUnquotedText`. + * to fix this just look at the commented tokens and update the ids. If a new token add it and leave a comment to point to the new token name. + * This choice was made to reduce the bundle size, as importing the `esql_parser` adds some hundreds of Kbs to the bundle otherwise. \ No newline at end of file diff --git a/packages/kbn-monaco/src/esql/lib/ast/autocomplete/autocomplete.test.ts b/packages/kbn-monaco/src/esql/lib/ast/autocomplete/autocomplete.test.ts index bfb9ecaee8d80..c6bf698319228 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/autocomplete/autocomplete.test.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/autocomplete/autocomplete.test.ts @@ -291,6 +291,7 @@ describe('autocomplete', () => { testSuggestions('from a,', suggestedIndexes); testSuggestions('from a, b ', ['[metadata $0 ]', '|', ',']); testSuggestions('from *,', suggestedIndexes); + testSuggestions('from index', suggestedIndexes, 6 /* index index in from */); }); describe('where', () => { diff --git a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts index 820ab04fea3bf..9d19305a25060 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts @@ -18,9 +18,15 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ }), signatures: [ { - params: [{ name: 'field', type: 'number' }], + params: [ + { name: 'field', type: 'number' }, + { name: 'decimals', type: 'number', optional: true }, + ], returnType: 'number', - examples: [`from index | eval round_value = round(field)`], + examples: [ + `from index | eval round_value = round(field)`, + `from index | eval round_value = round(field, 2)`, + ], }, ], }, diff --git a/packages/kbn-monaco/src/esql/lib/ast/shared/context.ts b/packages/kbn-monaco/src/esql/lib/ast/shared/context.ts index 3a51038ec4e92..d175ae1b2f3af 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/shared/context.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/shared/context.ts @@ -20,6 +20,7 @@ import { isColumnItem, getLastCharFromTrimmed, getFunctionDefinition, + isSourceItem, } from './helpers'; function findNode(nodes: ESQLAstItem[], offset: number): ESQLSingleAstItem | undefined { @@ -69,7 +70,9 @@ function findOption(nodes: ESQLAstItem[], offset: number): ESQLCommandOption | u } function isMarkerNode(node: ESQLSingleAstItem | undefined): boolean { - return Boolean(node && isColumnItem(node) && node.name === EDITOR_MARKER); + return Boolean( + node && (isColumnItem(node) || isSourceItem(node)) && node.name.endsWith(EDITOR_MARKER) + ); } function cleanMarkerNode(node: ESQLSingleAstItem | undefined): ESQLSingleAstItem | undefined { diff --git a/packages/kbn-monaco/src/esql/lib/monaco/esql_tokens_provider.ts b/packages/kbn-monaco/src/esql/lib/monaco/esql_tokens_provider.ts index aa0234c155c33..ce521d1c9dfac 100644 --- a/packages/kbn-monaco/src/esql/lib/monaco/esql_tokens_provider.ts +++ b/packages/kbn-monaco/src/esql/lib/monaco/esql_tokens_provider.ts @@ -57,7 +57,12 @@ export class ESQLTokensProvider implements monaco.languages.TokensProvider { const tokenTypeName = lexer.vocabulary.getSymbolicName(token.type); if (tokenTypeName) { - const myToken = new ESQLToken(tokenTypeName, token.startIndex, token.stopIndex); + const indexOffset = cleanedLine === line ? 0 : line.length - cleanedLine.length; + const myToken = new ESQLToken( + tokenTypeName, + token.startIndex + indexOffset, + token.stopIndex + indexOffset + ); myTokens.push(myToken); } } diff --git a/packages/kbn-optimizer/src/worker/webpack.config.ts b/packages/kbn-optimizer/src/worker/webpack.config.ts index 189ca29072afe..7b4a5b27b78c7 100644 --- a/packages/kbn-optimizer/src/worker/webpack.config.ts +++ b/packages/kbn-optimizer/src/worker/webpack.config.ts @@ -185,12 +185,12 @@ export function getWebpackConfig( ) )};\n${content}`; }, - webpackImporter: false, - implementation: require('node-sass'), + implementation: require('sass-embedded'), sassOptions: { - outputStyle: worker.dist ? 'compressed' : 'nested', + outputStyle: worker.dist ? 'compressed' : 'expanded', includePaths: [Path.resolve(worker.repoRoot, 'node_modules')], - sourceMapRoot: `/${bundle.type}:${bundle.id}`, + sourceMap: true, + quietDeps: true, }, }, }, diff --git a/packages/kbn-rule-data-utils/src/rule_types/index.ts b/packages/kbn-rule-data-utils/src/rule_types/index.ts index 6a716a5163dee..e41ef87284815 100644 --- a/packages/kbn-rule-data-utils/src/rule_types/index.ts +++ b/packages/kbn-rule-data-utils/src/rule_types/index.ts @@ -15,4 +15,5 @@ export type RuleCreationValidConsumer = | typeof AlertConsumers.LOGS | typeof AlertConsumers.INFRASTRUCTURE | typeof AlertConsumers.OBSERVABILITY - | typeof STACK_ALERTS_FEATURE_ID; + | typeof STACK_ALERTS_FEATURE_ID + | 'alerts'; diff --git a/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts b/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts index ff426a9069537..a2bf086d954a6 100644 --- a/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts +++ b/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts @@ -8,3 +8,4 @@ export const STACK_ALERTS_FEATURE_ID = 'stackAlerts'; export const ES_QUERY_ID = '.es-query'; +export const ML_ANOMALY_DETECTION_RULE_TYPE_ID = 'xpack.ml.anomaly_detection_alert'; diff --git a/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx b/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx index fb1ebce945306..b3fc911460bf7 100644 --- a/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx +++ b/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx @@ -118,6 +118,27 @@ export const ConnectorConfigurationComponent: React.FC {children && {children}} + {!uncategorizedDisplayList.length && ( + + + {i18n.translate( + 'searchConnectors.configurationConnector.config.noConfigCallout.description', + { + defaultMessage: + 'This connector has no configuration fields. Has your connector connected successfully to Elasticsearch and set its configuration?', + } + )} + + + )} {isEditing ? ( = setConfigEntry={(key, value) => { setConfigView({ ...configView, - advancedConfigurations: { ...configView.advancedConfigurations, [key]: value }, + advancedConfigurations: configView.advancedConfigurations.map((config) => + config.key === key ? { ...config, value } : config + ), }); }} /> diff --git a/packages/kbn-search-connectors/connectors.ts b/packages/kbn-search-connectors/connectors.ts index 998fc3bf2a2a7..61f1a3848ba68 100644 --- a/packages/kbn-search-connectors/connectors.ts +++ b/packages/kbn-search-connectors/connectors.ts @@ -271,7 +271,7 @@ export const CONNECTOR_DEFINITIONS: ConnectorServerSideDefinition[] = [ name: i18n.translate('searchConnectors.content.nativeConnectors.teams.name', { defaultMessage: 'Teams', }), - serviceType: 'teams', + serviceType: 'microsoft_teams', }, { iconPath: 'zoom.svg', diff --git a/packages/kbn-search-connectors/lib/update_connector_service_type.ts b/packages/kbn-search-connectors/lib/update_connector_service_type.ts index d5a2a813af7ba..3040918a75b95 100644 --- a/packages/kbn-search-connectors/lib/update_connector_service_type.ts +++ b/packages/kbn-search-connectors/lib/update_connector_service_type.ts @@ -26,7 +26,10 @@ export const updateConnectorServiceType = async ( ...connectorResult.value, configuration: {}, service_type: serviceType, - status: ConnectorStatus.NEEDS_CONFIGURATION, + status: + connectorResult.value.status === ConnectorStatus.CREATED + ? ConnectorStatus.CREATED + : ConnectorStatus.NEEDS_CONFIGURATION, }, id: connectorId, index: CONNECTORS_INDEX, diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index b4efc74ba7969..0fcac23e1038c 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -2978,6 +2978,27 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record +
+    
+      The supplied interval [2q] could not be parsed as a calendar interval.
+    
+  
+ +`; diff --git a/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap b/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap new file mode 100644 index 0000000000000..643973c636019 --- /dev/null +++ b/packages/kbn-search-errors/src/__snapshots__/painless_error.test.tsx.snap @@ -0,0 +1,29 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Painless error should render error message 1`] = ` +
+ + Error executing runtime field or scripted field on data view logs + + + + invalid +^---- HERE + + + cannot resolve symbol [invalid] + +
+`; diff --git a/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap b/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap new file mode 100644 index 0000000000000..adc0412c175b7 --- /dev/null +++ b/packages/kbn-search-errors/src/__snapshots__/tsdb_error.test.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Tsdb error should render error message 1`] = ` +
+

+ The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum]. +

+ + See more about Time series field types and [counter] supported aggregations + +
+`; diff --git a/packages/kbn-search-errors/src/create_es_error.ts b/packages/kbn-search-errors/src/create_es_error.ts new file mode 100644 index 0000000000000..ffde06eb728f7 --- /dev/null +++ b/packages/kbn-search-errors/src/create_es_error.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import type { ApplicationStart, CoreStart } from '@kbn/core/public'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { IEsError } from './types'; +import { EsError } from './es_error'; +import { PainlessError } from './painless_error'; +import { TsdbError } from './tsdb_error'; + +export interface Services { + application: ApplicationStart; + docLinks: CoreStart['docLinks']; +} + +function getNestedCauses(errorCause: estypes.ErrorCause): estypes.ErrorCause[] { + // Give shard failures priority, then try to get the error navigating nested objects + if (errorCause.failed_shards) { + return (errorCause.failed_shards as estypes.ShardFailure[]).map( + (shardFailure) => shardFailure.reason + ); + } + return errorCause.caused_by ? getNestedCauses(errorCause.caused_by) : [errorCause]; +} + +export function createEsError( + err: IEsError, + openInInspector: () => void, + services: Services, + dataView?: DataView +) { + const rootCauses = err.attributes?.error ? getNestedCauses(err.attributes?.error) : []; + + const painlessCause = rootCauses.find((errorCause) => { + return errorCause.lang && errorCause.lang === 'painless'; + }); + if (painlessCause) { + return new PainlessError(err, openInInspector, painlessCause, services.application, dataView); + } + + const tsdbCause = rootCauses.find((errorCause) => { + return ( + errorCause.type === 'illegal_argument_exception' && + errorCause.reason && + /\]\[counter\] is not supported for aggregation/.test(errorCause.reason) + ); + }); + if (tsdbCause) { + return new TsdbError(err, openInInspector, tsdbCause, services.docLinks); + } + + const causeReason = rootCauses[0]?.reason ?? err.attributes?.error?.reason; + const message = causeReason + ? causeReason + : i18n.translate('searchErrors.esError.unknownRootCause', { defaultMessage: 'unknown' }); + return new EsError(err, message, openInInspector); +} diff --git a/packages/kbn-search-errors/src/es_error.test.tsx b/packages/kbn-search-errors/src/es_error.test.tsx index 7f82faf685aba..1304b154d1090 100644 --- a/packages/kbn-search-errors/src/es_error.test.tsx +++ b/packages/kbn-search-errors/src/es_error.test.tsx @@ -6,41 +6,31 @@ * Side Public License, v 1. */ -import { EsError } from './es_error'; -import { IEsError } from './types'; +import type { ReactElement } from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import { createEsError } from './create_es_error'; +import { renderSearchError } from './render_search_error'; +import { shallow } from 'enzyme'; +import { coreMock } from '@kbn/core/public/mocks'; -describe('EsError', () => { - it('contains the same body as the wrapped error', () => { - const error = { - statusCode: 500, - message: 'nope', - attributes: { - error: { - type: 'top_level_exception_type', - reason: 'top-level reason', - }, +const services = { + application: coreMock.createStart().application, + docLinks: { + links: { + fleet: { + datastreamsTSDSMetrics: '', }, - } as IEsError; - const esError = new EsError(error, () => {}); - - expect(typeof esError.attributes).toEqual('object'); - expect(esError.attributes).toEqual(error.attributes); - }); + }, + } as CoreStart['docLinks'], +}; - it('contains some explanation of the error in the message', () => { - // error taken from Vega's issue - const error = { - message: - 'x_content_parse_exception: [x_content_parse_exception] Reason: [1:78] [date_histogram] failed to parse field [calendar_interval]', +describe('EsError', () => { + const esError = createEsError( + { statusCode: 400, + message: 'search_phase_execution_exception', attributes: { error: { - root_cause: [ - { - type: 'x_content_parse_exception', - reason: '[1:78] [date_histogram] failed to parse field [calendar_interval]', - }, - ], type: 'x_content_parse_exception', reason: '[1:78] [date_histogram] failed to parse field [calendar_interval]', caused_by: { @@ -49,10 +39,27 @@ describe('EsError', () => { }, }, }, - } as IEsError; - const esError = new EsError(error, () => {}); + }, + () => {}, + services + ); + + test('should set error.message to root "error cause" reason', () => { expect(esError.message).toEqual( - 'EsError: The supplied interval [2q] could not be parsed as a calendar interval.' + 'The supplied interval [2q] could not be parsed as a calendar interval.' ); }); + + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(esError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); + + test('should return 1 action', () => { + const searchErrorDisplay = renderSearchError(esError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(1); + }); }); diff --git a/packages/kbn-search-errors/src/es_error.tsx b/packages/kbn-search-errors/src/es_error.tsx index 8a5ab1ad3c503..cd8c842d997d8 100644 --- a/packages/kbn-search-errors/src/es_error.tsx +++ b/packages/kbn-search-errors/src/es_error.tsx @@ -7,11 +7,9 @@ */ import React from 'react'; -import { EuiButton, EuiCodeBlock, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { ApplicationStart } from '@kbn/core/public'; -import { IEsError } from './types'; -import { getRootCause } from './utils'; +import { EuiButton, EuiCodeBlock } from '@elastic/eui'; +import type { IEsError } from './types'; /** * Checks if a given errors originated from Elasticsearch. @@ -24,39 +22,25 @@ export function isEsError(e: any): e is IEsError { } export class EsError extends Error { - readonly attributes: IEsError['attributes']; + public readonly attributes: IEsError['attributes']; + private readonly openInInspector: () => void; - constructor(protected readonly err: IEsError, private readonly openInInspector: () => void) { - super( - `EsError: ${ - getRootCause(err?.attributes?.error)?.reason || - i18n.translate('searchErrors.esError.unknownRootCause', { defaultMessage: 'unknown' }) - }` - ); + constructor(err: IEsError, message: string, openInInspector: () => void) { + super(message); this.attributes = err.attributes; + this.openInInspector = openInInspector; Object.setPrototypeOf(this, new.target.prototype); } public getErrorMessage() { - if (!this.attributes?.error) { - return null; - } - - const rootCause = getRootCause(this.attributes.error)?.reason; - const topLevelCause = this.attributes.error.reason; - const cause = rootCause ?? topLevelCause; - return ( - <> - - - {cause} - - + + {this.message} + ); } - public getActions(application: ApplicationStart) { + public getActions() { return [ { - beforeEach(() => { - jest.clearAllMocks(); - }); +const dataViewMock = { + title: 'logs', + id: '1234', +} as unknown as DataView; - it('Should show reason and code', () => { - const e = new PainlessError( - { - statusCode: 400, - message: 'search_phase_execution_exception', - attributes: { - error: searchPhaseException.error, +describe('Painless error', () => { + const painlessError = createEsError( + { + statusCode: 400, + message: 'search_phase_execution_exception', + attributes: { + error: { + type: 'search_phase_execution_exception', + reason: 'all shards failed', + failed_shards: [ + { + shard: 0, + index: '.kibana_11', + node: 'b3HX8C96Q7q1zgfVLxEsPA', + reason: { + type: 'script_exception', + reason: 'compile error', + script_stack: ['invalid', '^---- HERE'], + script: 'invalid', + lang: 'painless', + position: { + offset: 0, + start: 0, + end: 7, + }, + caused_by: { + type: 'illegal_argument_exception', + reason: 'cannot resolve symbol [invalid]', + }, + }, + }, + ], }, }, - () => {} - ); - const component = mount(e.getErrorMessage()); - - const failedShards = searchPhaseException.error.failed_shards![0]; + }, + () => {}, + servicesMock, + dataViewMock + ); - const stackTraceElem = findTestSubject(component, 'painlessStackTrace').getDOMNode(); - const stackTrace = failedShards!.reason.script_stack!.splice(-2).join('\n'); - expect(stackTraceElem.textContent).toBe(stackTrace); + test('should set error.message to painless reason', () => { + expect(painlessError.message).toEqual( + 'Error executing runtime field or scripted field on data view logs' + ); + }); - const humanReadableError = findTestSubject( - component, - 'painlessHumanReadableError' - ).getDOMNode(); - expect(humanReadableError.textContent).toBe(failedShards?.reason.caused_by?.reason); + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(painlessError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); - const actions = e.getActions(startMock.application); - expect(actions.length).toBe(2); + test('should return 2 actions', () => { + const searchErrorDisplay = renderSearchError(painlessError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(2); }); }); diff --git a/packages/kbn-search-errors/src/painless_error.tsx b/packages/kbn-search-errors/src/painless_error.tsx index 08657ea134ab6..79fd737f055ab 100644 --- a/packages/kbn-search-errors/src/painless_error.tsx +++ b/packages/kbn-search-errors/src/painless_error.tsx @@ -7,43 +7,58 @@ */ import React from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import type { ApplicationStart } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty, EuiSpacer, EuiText, EuiCodeBlock } from '@elastic/eui'; -import type { ApplicationStart } from '@kbn/core/public'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { IEsError } from './types'; -import { EsError, isEsError } from './es_error'; -import { getRootCause } from './utils'; +import { EsError } from './es_error'; export class PainlessError extends EsError { - painlessStack?: string; - indexPattern?: DataView; - constructor(err: IEsError, openInInspector: () => void, indexPattern?: DataView) { - super(err, openInInspector); - this.indexPattern = indexPattern; + private readonly applicationStart: ApplicationStart; + private readonly painlessCause: estypes.ErrorCause; + private readonly dataView?: DataView; + + constructor( + err: IEsError, + openInInspector: () => void, + painlessCause: estypes.ErrorCause, + applicationStart: ApplicationStart, + dataView?: DataView + ) { + super( + err, + i18n.translate('searchErrors.painlessError.painlessScriptedFieldErrorMessage', { + defaultMessage: + 'Error executing runtime field or scripted field on data view {indexPatternName}', + values: { + indexPatternName: dataView?.title || '', + }, + }), + openInInspector + ); + this.applicationStart = applicationStart; + this.painlessCause = painlessCause; + this.dataView = dataView; } public getErrorMessage() { - const rootCause = getRootCause(this.err.attributes?.error); - const scriptFromStackTrace = rootCause?.script_stack - ? rootCause?.script_stack?.slice(-2).join('\n') + const scriptFromStackTrace = this.painlessCause?.script_stack + ? this.painlessCause?.script_stack?.slice(-2).join('\n') : undefined; // if the error has been properly processed it will highlight where it occurred. - const hasScript = rootCause?.script_stack?.slice(-1)[0]?.indexOf('HERE') || -1 >= 0; - const humanReadableError = rootCause?.caused_by?.reason; + const hasScript = this.painlessCause?.script_stack?.slice(-1)[0]?.indexOf('HERE') || -1 >= 0; + const humanReadableError = this.painlessCause?.caused_by?.reason; // fallback, show ES stacktrace - const painlessStack = rootCause?.script_stack ? rootCause?.script_stack.join('\n') : undefined; + const painlessStack = this.painlessCause?.script_stack + ? this.painlessCause?.script_stack.join('\n') + : undefined; return ( - <> +
- {i18n.translate('searchErrors.painlessError.painlessScriptedFieldErrorMessage', { - defaultMessage: - 'Error executing runtime field or scripted field on index pattern {indexPatternName}', - values: { - indexPatternName: this?.indexPattern?.title, - }, - })} + {this.message} {scriptFromStackTrace || painlessStack ? ( @@ -56,21 +71,21 @@ export class PainlessError extends EsError { {humanReadableError} ) : null} - +
); } - getActions(application: ApplicationStart) { - function onClick(indexPatternId?: string) { - application.navigateToApp('management', { - path: `/kibana/indexPatterns${indexPatternId ? `/patterns/${indexPatternId}` : ''}`, - }); - } - const actions = super.getActions(application) ?? []; + getActions() { + const actions = super.getActions() ?? []; actions.push( onClick(this?.indexPattern?.id)} + onClick={() => () => { + const dataViewId = this.dataView?.id; + this.applicationStart.navigateToApp('management', { + path: `/kibana/indexPatterns${dataViewId ? `/patterns/${dataViewId}` : ''}`, + }); + }} size="s" > {i18n.translate('searchErrors.painlessError.buttonTxt', { @@ -81,13 +96,3 @@ export class PainlessError extends EsError { return actions; } } - -export function isPainlessError(err: Error | IEsError) { - if (!isEsError(err)) return false; - - const rootCause = getRootCause((err as IEsError).attributes?.error); - if (!rootCause) return false; - - const { lang } = rootCause; - return lang === 'painless'; -} diff --git a/packages/kbn-search-errors/src/render_search_error.ts b/packages/kbn-search-errors/src/render_search_error.ts index 73dd298877cca..85dc2486d7a16 100644 --- a/packages/kbn-search-errors/src/render_search_error.ts +++ b/packages/kbn-search-errors/src/render_search_error.ts @@ -9,23 +9,18 @@ import { i18n } from '@kbn/i18n'; import { ReactNode } from 'react'; import { BfetchRequestError } from '@kbn/bfetch-error'; -import type { ApplicationStart } from '@kbn/core-application-browser'; import { EsError } from './es_error'; -export function renderSearchError({ - error, - application, -}: { - error: Error; - application: ApplicationStart; -}): { title: string; body: ReactNode; actions?: ReactNode[] } | undefined { +export function renderSearchError( + error: Error +): { title: string; body: ReactNode; actions?: ReactNode[] } | undefined { if (error instanceof EsError) { return { title: i18n.translate('searchErrors.search.esErrorTitle', { defaultMessage: 'Cannot retrieve search results', }), body: error.getErrorMessage(), - actions: error.getActions(application), + actions: error.getActions(), }; } diff --git a/packages/kbn-search-errors/src/tsdb_error.test.tsx b/packages/kbn-search-errors/src/tsdb_error.test.tsx new file mode 100644 index 0000000000000..d272938853da6 --- /dev/null +++ b/packages/kbn-search-errors/src/tsdb_error.test.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { ReactElement } from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import { createEsError } from './create_es_error'; +import { renderSearchError } from './render_search_error'; +import { shallow } from 'enzyme'; +import { coreMock } from '@kbn/core/public/mocks'; + +const servicesMock = { + application: coreMock.createStart().application, + docLinks: { + links: { + fleet: { + datastreamsTSDSMetrics: '', + }, + }, + } as CoreStart['docLinks'], +}; + +describe('Tsdb error', () => { + const tsdbError = createEsError( + { + statusCode: 400, + message: 'search_phase_execution_exception', + attributes: { + error: { + type: 'status_exception', + reason: 'error while executing search', + caused_by: { + type: 'search_phase_execution_exception', + reason: 'all shards failed', + phase: 'query', + grouped: true, + failed_shards: [ + { + shard: 0, + index: 'tsdb_index', + reason: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + }, + }, + ], + caused_by: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + caused_by: { + type: 'illegal_argument_exception', + reason: + 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', + }, + }, + }, + }, + }, + }, + () => {}, + servicesMock + ); + + test('should set error.message to tsdb reason', () => { + expect(tsdbError.message).toEqual( + 'The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum].' + ); + }); + + test('should render error message', () => { + const searchErrorDisplay = renderSearchError(tsdbError); + expect(searchErrorDisplay).not.toBeUndefined(); + const wrapper = shallow(searchErrorDisplay?.body as ReactElement); + expect(wrapper).toMatchSnapshot(); + }); + + test('should return 1 actions', () => { + const searchErrorDisplay = renderSearchError(tsdbError); + expect(searchErrorDisplay).not.toBeUndefined(); + expect(searchErrorDisplay?.actions?.length).toBe(1); + }); +}); diff --git a/packages/kbn-search-errors/src/tsdb_error.tsx b/packages/kbn-search-errors/src/tsdb_error.tsx new file mode 100644 index 0000000000000..2f51665df699e --- /dev/null +++ b/packages/kbn-search-errors/src/tsdb_error.tsx @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import type { CoreStart } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; +import { EuiLink } from '@elastic/eui'; +import type { IEsError } from './types'; +import { EsError } from './es_error'; + +export class TsdbError extends EsError { + private readonly docLinks: CoreStart['docLinks']; + + constructor( + err: IEsError, + openInInspector: () => void, + tsdbCause: estypes.ErrorCause, + docLinks: CoreStart['docLinks'] + ) { + const [fieldName, _type, _isCounter, opUsed] = tsdbCause.reason!.match(/\[(\w)*\]/g)!; + super( + err, + i18n.translate('searchErrors.tsdbError.message', { + defaultMessage: + 'The field {field} of Time series type [counter] has been used with the unsupported operation {op}.', + values: { + field: fieldName, + op: opUsed, + }, + }), + openInInspector + ); + this.docLinks = docLinks; + } + + public getErrorMessage() { + return ( +
+

{this.message}

+ + {i18n.translate('searchErrors.tsdbError.tsdbCounterDocsLabel', { + defaultMessage: + 'See more about Time series field types and [counter] supported aggregations', + })} + +
+ ); + } +} diff --git a/packages/kbn-search-errors/src/utils.ts b/packages/kbn-search-errors/src/utils.ts deleted file mode 100644 index e1e2c51f87f3c..0000000000000 --- a/packages/kbn-search-errors/src/utils.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { estypes } from '@elastic/elasticsearch'; - -function getFailedShardCause(error: estypes.ErrorCause): estypes.ErrorCause | undefined { - const failedShards = error.failed_shards || error.caused_by?.failed_shards; - return failedShards ? failedShards[0]?.reason : undefined; -} - -function getNestedCause(error: estypes.ErrorCause): estypes.ErrorCause { - return error.caused_by ? getNestedCause(error.caused_by) : error; -} - -export function getRootCause(error?: estypes.ErrorCause): estypes.ErrorCause | undefined { - return error - ? // Give shard failures priority, then try to get the error navigating nested objects - getFailedShardCause(error) || getNestedCause(error) - : undefined; -} diff --git a/packages/kbn-search-errors/tsconfig.json b/packages/kbn-search-errors/tsconfig.json index 7c50a64bd11ee..d7cb9d82c63a5 100644 --- a/packages/kbn-search-errors/tsconfig.json +++ b/packages/kbn-search-errors/tsconfig.json @@ -20,7 +20,6 @@ "@kbn/core", "@kbn/kibana-utils-plugin", "@kbn/data-views-plugin", - "@kbn/core-application-browser", "@kbn/bfetch-error", ] } diff --git a/packages/kbn-storybook/src/webpack.config.ts b/packages/kbn-storybook/src/webpack.config.ts index 35bda9718d7cb..282a41dcbd453 100644 --- a/packages/kbn-storybook/src/webpack.config.ts +++ b/packages/kbn-storybook/src/webpack.config.ts @@ -115,9 +115,10 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { resolve(REPO_ROOT, 'src/core/public/styles/core_app/_globals_v8light.scss') )};\n${content}`; }, - implementation: require('node-sass'), + implementation: require('sass-embedded'), sassOptions: { includePaths: [resolve(REPO_ROOT, 'node_modules')], + quietDeps: true, }, }, }, 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 adcff950575e3..04e79334cf219 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 @@ -22,6 +22,7 @@ import { getAggregateQueryMode, getLanguageDisplayName } from '@kbn/es-query'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { ExpressionsStart } from '@kbn/expressions-plugin/public'; import type { IndexManagementPluginSetup } from '@kbn/index-management-plugin/public'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { type LanguageDocumentationSections, LanguageDocumentationPopover, @@ -172,7 +173,6 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const [showLineNumbers, setShowLineNumbers] = useState(isCodeEditorExpanded); const [isCompactFocused, setIsCompactFocused] = useState(isCodeEditorExpanded); const [isCodeEditorExpandedFocused, setIsCodeEditorExpandedFocused] = useState(false); - const [isWordWrapped, setIsWordWrapped] = useState(false); const [editorMessages, setEditorMessages] = useState<{ errors: MonacoMessage[]; @@ -478,15 +478,14 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ } }, [calculateVisibleCode, code, isCompactFocused, queryString]); - useEffect(() => { - if (isCodeEditorExpanded && !isWordWrapped) { - const pipes = code?.split('|'); - const pipesWithNewLine = code?.split('\n|'); - if (pipes?.length === pipesWithNewLine?.length) { - setIsWordWrapped(true); - } - } - }, [code, isCodeEditorExpanded, isWordWrapped]); + const linesBreaksButtonsStatus = useMemo(() => { + const pipes = code?.split('|'); + const pipesWithNewLine = code?.split('\n|'); + return { + addLineBreaksDisabled: pipes?.length === pipesWithNewLine?.length, + removeLineBreaksDisabled: pipesWithNewLine?.length === 1, + }; + }, [code]); const onResize = ({ width }: { width: number }) => { setIsSpaceReduced(Boolean(editorIsInline && width < BREAKPOINT_WIDTH)); @@ -499,7 +498,6 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const onQueryUpdate = useCallback( (value: string) => { setCode(value); - setIsWordWrapped(false); onTextLangQueryChange({ [language]: value } as AggregateQuery); }, [language, onTextLangQueryChange] @@ -561,58 +559,72 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ responsive={false} > - + + + { + const updatedCode = getWrappedInPipesCode(code, false); + if (code !== updatedCode) { + setCode(updatedCode); + onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); + } + }} + /> + + + + + - { - editor1.current?.updateOptions({ - wordWrap: isWordWrapped ? 'off' : 'on', - }); - setIsWordWrapped(!isWordWrapped); - const updatedCode = getWrappedInPipesCode(code, isWordWrapped); - if (code !== updatedCode) { - setCode(updatedCode); - onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); - } - }} - /> - + )} + isDisabled={linesBreaksButtonsStatus.removeLineBreaksDisabled} + onClick={() => { + const updatedCode = getWrappedInPipesCode(code, true); + if (code !== updatedCode) { + setCode(updatedCode); + onTextLangQueryChange({ [language]: updatedCode } as AggregateQuery); + } + }} + /> + + +
diff --git a/packages/kbn-text-based-editor/tsconfig.json b/packages/kbn-text-based-editor/tsconfig.json index 63222d0d6026b..72240c8aa060d 100644 --- a/packages/kbn-text-based-editor/tsconfig.json +++ b/packages/kbn-text-based-editor/tsconfig.json @@ -23,7 +23,8 @@ "@kbn/data-plugin", "@kbn/expressions-plugin", "@kbn/data-views-plugin", - "@kbn/index-management-plugin" + "@kbn/index-management-plugin", + "@kbn/visualization-utils" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-ui-shared-deps-npm/webpack.config.js b/packages/kbn-ui-shared-deps-npm/webpack.config.js index 627a1747c0b2d..7576ba9e145d9 100644 --- a/packages/kbn-ui-shared-deps-npm/webpack.config.js +++ b/packages/kbn-ui-shared-deps-npm/webpack.config.js @@ -49,28 +49,13 @@ module.exports = (_, argv) => { * node scripts/find_babel_runtime_helpers_in_use.js */ '@babel/runtime/helpers/assertThisInitialized', - '@babel/runtime/helpers/asyncToGenerator', - '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/classPrivateFieldGet', '@babel/runtime/helpers/classPrivateFieldSet', - '@babel/runtime/helpers/createClass', - '@babel/runtime/helpers/createForOfIteratorHelper', - '@babel/runtime/helpers/createSuper', '@babel/runtime/helpers/defineProperty', '@babel/runtime/helpers/extends', - '@babel/runtime/helpers/inherits', '@babel/runtime/helpers/inheritsLoose', - '@babel/runtime/helpers/interopRequireDefault', - '@babel/runtime/helpers/interopRequireWildcard', - '@babel/runtime/helpers/objectSpread2', - '@babel/runtime/helpers/objectWithoutProperties', - '@babel/runtime/helpers/objectWithoutPropertiesLoose', - '@babel/runtime/helpers/slicedToArray', '@babel/runtime/helpers/taggedTemplateLiteralLoose', - '@babel/runtime/helpers/toConsumableArray', - '@babel/runtime/helpers/typeof', '@babel/runtime/helpers/wrapNativeSuper', - '@babel/runtime/regenerator', // modules from npm '@elastic/charts', diff --git a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss index 48fb44f1663e3..08402941bf74b 100644 --- a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss +++ b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss @@ -53,7 +53,7 @@ .unifiedFieldListSidebar .unifiedFieldListItemButton { &.kbnFieldButton { - margin-bottom: $euiSizeXS / 2; + margin-bottom: calc($euiSizeXS / 2); } &.domDragDrop-isDraggable { diff --git a/packages/kbn-visualization-ui-components/components/color_picker.tsx b/packages/kbn-visualization-ui-components/components/color_picker.tsx index 26a428bb17e0b..3a2613d16d665 100644 --- a/packages/kbn-visualization-ui-components/components/color_picker.tsx +++ b/packages/kbn-visualization-ui-components/components/color_picker.tsx @@ -8,6 +8,7 @@ import React, { useEffect, useRef, useState } from 'react'; import { i18n } from '@kbn/i18n'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { EuiFormRow, EuiColorPicker, @@ -17,7 +18,6 @@ import { euiPaletteColorBlind, } from '@elastic/eui'; import { getColorAlpha, makeColorWithAlpha } from '@kbn/coloring'; -import { TooltipWrapper } from './tooltip_wrapper'; const tooltipContent = { auto: i18n.translate('visualizationUiComponents.colorPicker.tooltip.auto', { diff --git a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx index d73c46064a3ca..0448e6bda33db 100644 --- a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx +++ b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/default_bucket_container.tsx @@ -16,7 +16,7 @@ import { EuiPanel, useEuiTheme, } from '@elastic/eui'; -import { TooltipWrapper } from '../tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { BucketContainerProps } from './types'; export const DefaultBucketContainer = ({ diff --git a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx index cfc5b074b6c33..89f771eef4f01 100644 --- a/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx +++ b/packages/kbn-visualization-ui-components/components/drag_drop_bucket/fields_bucket_container.tsx @@ -16,7 +16,7 @@ import { EuiPanel, useEuiTheme, } from '@elastic/eui'; -import { TooltipWrapper } from '../tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { BucketContainerProps } from './types'; export const FieldsBucketContainer = ({ diff --git a/packages/kbn-visualization-ui-components/components/index.ts b/packages/kbn-visualization-ui-components/components/index.ts index e20879f9e9990..88fecd132a868 100644 --- a/packages/kbn-visualization-ui-components/components/index.ts +++ b/packages/kbn-visualization-ui-components/components/index.ts @@ -14,8 +14,6 @@ export * from './debounced_input'; export * from './debounced_value'; -export * from './tooltip_wrapper'; - export * from './color_picker'; export * from './icon_select'; diff --git a/packages/kbn-visualization-ui-components/index.ts b/packages/kbn-visualization-ui-components/index.ts index 16c51f96a869b..34c14599d6f00 100644 --- a/packages/kbn-visualization-ui-components/index.ts +++ b/packages/kbn-visualization-ui-components/index.ts @@ -11,7 +11,6 @@ export { NameInput, DebouncedInput, useDebouncedValue, - TooltipWrapper, ColorPicker, IconSelect, IconSelectSetting, diff --git a/packages/kbn-visualization-ui-components/tsconfig.json b/packages/kbn-visualization-ui-components/tsconfig.json index a9d6627828dc7..e5dcfa9c5c858 100644 --- a/packages/kbn-visualization-ui-components/tsconfig.json +++ b/packages/kbn-visualization-ui-components/tsconfig.json @@ -31,6 +31,7 @@ "@kbn/coloring", "@kbn/field-formats-plugin", "@kbn/field-utils", - "@kbn/calculate-width-from-char-count" + "@kbn/calculate-width-from-char-count", + "@kbn/visualization-utils" ], } diff --git a/packages/kbn-visualization-utils/index.ts b/packages/kbn-visualization-utils/index.ts index 7aa0a2c5d770c..1665599e93d54 100644 --- a/packages/kbn-visualization-utils/index.ts +++ b/packages/kbn-visualization-utils/index.ts @@ -7,3 +7,4 @@ */ export { getTimeZone } from './src/get_timezone'; +export { TooltipWrapper } from './src/tooltip_wrapper'; diff --git a/packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx b/packages/kbn-visualization-utils/src/tooltip_wrapper.tsx similarity index 100% rename from packages/kbn-visualization-ui-components/components/tooltip_wrapper.tsx rename to packages/kbn-visualization-utils/src/tooltip_wrapper.tsx diff --git a/renovate.json b/renovate.json index 4a725ce80a5f5..7fb5b9020388c 100644 --- a/renovate.json +++ b/renovate.json @@ -362,7 +362,7 @@ { "groupName": "scss", "packageNames": [ - "node-sass" + "sass-embedded" ], "reviewers": [ "team:kibana-operations" @@ -673,4 +673,4 @@ "enabled": true } ] -} \ No newline at end of file +} diff --git a/src/dev/build/tasks/install_dependencies_task.ts b/src/dev/build/tasks/install_dependencies_task.ts index 59c9e38911243..0eebadec5ca79 100644 --- a/src/dev/build/tasks/install_dependencies_task.ts +++ b/src/dev/build/tasks/install_dependencies_task.ts @@ -32,8 +32,6 @@ export const InstallDependencies: Task = { { cwd: build.resolvePath(), env: { - SASS_BINARY_SITE: - 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass', RE2_DOWNLOAD_MIRROR: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2', }, diff --git a/src/dev/build/tasks/patch_native_modules_task.ts b/src/dev/build/tasks/patch_native_modules_task.ts index d36fe4eca01ee..df851036b79ed 100644 --- a/src/dev/build/tasks/patch_native_modules_task.ts +++ b/src/dev/build/tasks/patch_native_modules_task.ts @@ -47,8 +47,8 @@ const packages: Package[] = [ extractMethod: 'gunzip', archives: { 'linux-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-x64-108.gz', - sha256: '136b6cf61b54bf610071a950400518add65d44a4923f11ef658769df1a037f0b', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-x64-115.gz', + sha256: 'b88183fe7bc8afa260d22cd909f496ab5636aace7075b54ac345d33ea32aedc0', }, // Linux ARM builds are currently done manually as Github Actions used in upstream project // do not natively support an Linux ARM target. @@ -63,20 +63,20 @@ const packages: Package[] = [ // * capture the sha256 with: `shasum -a 256 linux-arm64-*` // * upload the `linux-arm64-*.gz` artifact to the `yarn-prebuilt-artifacts` bucket in GCS using the correct version number 'linux-arm64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-arm64-108.gz', - sha256: '311822ac689bd49a534ecf400b4732a288ad218f711b0e593e41dd3a6b739d97', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-arm64-115.gz', + sha256: '6c04136a6658df3dcc5b8ac0041641c227d232bed385fe55f62c8470f8db041d', }, 'darwin-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-x64-108.gz', - sha256: '215b6ffb1e5d124439a7dbdd09e4ed1263e065839354a6ad67091ce00d14ee9b', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-x64-115.gz', + sha256: '1e0d79983c94222c414a5410444ec0ccf37614fd0e45187d0f313a19b203702c', }, 'darwin-arm64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-arm64-108.gz', - sha256: '0a8bc28150c9efd04f3b52ac214cc7898bde1b8e1f8e6900ae711b03665ff657', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-arm64-115.gz', + sha256: '192c8e036062504b818941989c44ddb799efe0419d039f7089caedb09d49a597', }, 'win32-x64': { - url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/win32-x64-108.gz', - sha256: '117872144e4a2bb61611aacc51ac9fd24e494c209cf63366f236099a662316eb', + url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/win32-x64-115.gz', + sha256: '01ae2df89f976f4097e50e121d7ec6ac62ec8050c838107dcfb976d037a60d59', }, }, }, diff --git a/src/dev/ci_setup/checkout_sibling_es.sh b/src/dev/ci_setup/checkout_sibling_es.sh deleted file mode 100755 index 3832ec9b4076a..0000000000000 --- a/src/dev/ci_setup/checkout_sibling_es.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/bash - -set -e - -function checkout_sibling { - project=$1 - targetDir=$2 - useExistingParamName=$3 - useExisting="$(eval "echo "\$$useExistingParamName"")" - repoAddress="https://github.com/" - - if [ -z ${useExisting:+x} ]; then - if [ -d "$targetDir" ]; then - echo "I expected a clean workspace but an '${project}' sibling directory already exists in [$WORKSPACE]!" - echo - echo "Either define '${useExistingParamName}' or remove the existing '${project}' sibling." - exit 1 - fi - - # read by clone_target_is_valid, and checkout_clone_target populated by pick_clone_target - cloneAuthor="" - cloneBranch="" - - function clone_target_is_valid { - - echo " -> checking for '${cloneBranch}' branch at ${cloneAuthor}/${project}" - if [[ -n "$(git ls-remote --heads "${repoAddress}${cloneAuthor}/${project}.git" ${cloneBranch} 2>/dev/null)" ]]; then - return 0 - else - return 1 - fi - } - - function pick_clone_target { - echo "To develop Kibana features against a specific branch of ${project} and being able to" - echo "test that feature also on CI, the CI is trying to find branches on ${project} with the same name as" - echo "the Kibana branch (first on your fork and then upstream) before building from master." - echo "picking which branch of ${project} to clone:" - if [[ -n "$PR_AUTHOR" && -n "$PR_SOURCE_BRANCH" ]]; then - cloneAuthor="$PR_AUTHOR" - cloneBranch="$PR_SOURCE_BRANCH" - if clone_target_is_valid ; then - return 0 - fi - fi - - cloneAuthor="elastic" - cloneBranch="$GIT_BRANCH" - if clone_target_is_valid ; then - return 0 - fi - - cloneBranch="${PR_TARGET_BRANCH:-$KIBANA_PKG_BRANCH}" - if clone_target_is_valid ; then - return 0 - fi - - cloneBranch="$KIBANA_PKG_BRANCH" - if clone_target_is_valid; then - return 0 - fi - - echo "failed to find a valid branch to clone" - return 1 - } - - function checkout_clone_target { - pick_clone_target - - if [[ "$cloneAuthor/$cloneBranch" != "elastic/$KIBANA_PKG_BRANCH" ]]; then - echo " -> Setting TEST_ES_FROM=source so that ES in tests will be built from $cloneAuthor/$cloneBranch" - export TEST_ES_FROM=source - fi - - echo " -> checking out '${cloneBranch}' branch from ${cloneAuthor}/${project}..." - git clone -b "$cloneBranch" "${repoAddress}${cloneAuthor}/${project}.git" "$targetDir" --depth=1 - echo " -> checked out ${project} revision: $(git -C "${targetDir}" rev-parse HEAD)" - echo - } - - checkout_clone_target - else - if [ -d "$targetDir" ]; then - echo "Using existing '${project}' checkout" - else - echo "You have defined '${useExistingParamName}' but no existing ${targetDir} directory exists!" - exit 2 - fi - fi -} - -checkout_sibling "elasticsearch" "${WORKSPACE}/elasticsearch" "USE_EXISTING_ES" -export TEST_ES_FROM=${TEST_ES_FROM:-snapshot} - -# Set the JAVA_HOME based on the Java property file in the ES repo -# This assumes the naming convention used on CI (ex: ~/.java/java10) -ES_DIR="$WORKSPACE/elasticsearch" -ES_JAVA_PROP_PATH=$ES_DIR/.ci/java-versions.properties - - -if [ ! -f "$ES_JAVA_PROP_PATH" ]; then - echo "Unable to set JAVA_HOME, $ES_JAVA_PROP_PATH does not exist" - exit 1 -fi - -# While sourcing the property file would currently work, we want -# to support the case where whitespace surrounds the equals. -# This has the added benefit of explicitly exporting property values -ES_BUILD_JAVA="$(grep "^ES_BUILD_JAVA" "$ES_JAVA_PROP_PATH" | cut -d'=' -f2 | tr -d '[:space:]')" -export ES_BUILD_JAVA - -if [ -z "$ES_BUILD_JAVA" ]; then - echo "Unable to set JAVA_HOME, ES_BUILD_JAVA not present in $ES_JAVA_PROP_PATH" - exit 1 -fi - -echo "Setting JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA" -export JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA diff --git a/src/dev/ci_setup/extract_bootstrap_cache.sh b/src/dev/ci_setup/extract_bootstrap_cache.sh deleted file mode 100755 index fdd8bb6b90406..0000000000000 --- a/src/dev/ci_setup/extract_bootstrap_cache.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -set -e - -targetBranch="${PR_TARGET_BRANCH:-$GIT_BRANCH}" -bootstrapCache="$HOME/.kibana/bootstrap_cache/$targetBranch.tar" - -### -### Extract the bootstrap cache that we create in the packer_cache.sh script -### -if [ -f "$bootstrapCache" ]; then - echo "extracting bootstrap_cache from $bootstrapCache"; - tar -xf "$bootstrapCache"; -else - branchBootstrapCache="$HOME/.kibana/bootstrap_cache/$(jq -r .branch package.json).tar" - - if [ -f "$branchBootstrapCache" ]; then - echo "extracting bootstrap_cache from $branchBootstrapCache"; - tar -xf "$branchBootstrapCache"; - else - echo "" - echo "" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; - echo " bootstrap_cache missing"; - echo " looked for '$bootstrapCache'"; - echo " and '$branchBootstrapCache'"; - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; - echo "" - echo "" - fi -fi diff --git a/src/dev/ci_setup/get_percy_env.js b/src/dev/ci_setup/get_percy_env.js deleted file mode 100644 index a4a247d2527c3..0000000000000 --- a/src/dev/ci_setup/get_percy_env.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -const execa = require('execa'); -const pkg = require('../../../package.json'); - -const { stdout: commit } = execa.sync('git', ['rev-parse', 'HEAD']); -const shortCommit = commit.slice(0, 8); - -const isPr = !!process.env.ghprbPullId; -if (isPr && !(process.env.PR_TARGET_BRANCH && process.env.PR_SOURCE_BRANCH)) { - throw new Error( - 'getPercyEnv: Unable to determine percy environment in prs without [PR_TARGET_BRANCH] and [PR_SOURCE_BRANCH] environment variables' - ); -} - -let branch; -if (isPr) { - branch = process.env.PR_SOURCE_BRANCH; -} else { - if (!process.env.branch_specifier) { - throw new Error('getPercyEnv: [branch_specifier] environment variable required'); - } - - branch = process.env.branch_specifier.split('refs/heads/')[1]; - - if (!branch) { - throw new Error( - `getPercyEnv: [branch_specifier=${process.env.branch_specifier}] must start with 'refs/heads/'` - ); - } -} - -console.log(`export PERCY_PARALLEL_TOTAL=2;`); -console.log( - `export PERCY_PARALLEL_NONCE="${shortCommit}/${isPr ? 'PR' : branch}/${process.env.BUILD_ID}";` -); -console.log(`export PERCY_BRANCH="${branch}";`); -// percy snapshots always target pkg.branch, so that feature branches can be based on master/7.x/etc. -console.log(`export PERCY_TARGET_BRANCH="${isPr ? process.env.PR_TARGET_BRANCH : pkg.branch}";`); diff --git a/src/dev/ci_setup/load_env_keys.sh b/src/dev/ci_setup/load_env_keys.sh deleted file mode 100644 index 62d29db232eae..0000000000000 --- a/src/dev/ci_setup/load_env_keys.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [ -z "$VAULT_SECRET_ID" ]; then - if [ -n "$GITHUB_TOKEN" ] && [ -n "$KIBANA_CI_REPORTER_KEY" ] && [ -n "$PERCY_TOKEN" ]; then - echo " -- secrets already loaded from vault"; - else - echo "" - echo "" - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; - echo " VAULT_SECRET_ID not set, not loading tokens into env"; - echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; - echo "" - echo "" - fi -else - # load shared helpers to get `retry` function - source /usr/local/bin/bash_standard_lib.sh - - set +x - - # export after define to avoid https://github.com/koalaman/shellcheck/wiki/SC2155 - VAULT_TOKEN=$(retry 5 vault write -field=token auth/approle/login role_id="$VAULT_ROLE_ID" secret_id="$VAULT_SECRET_ID") - export VAULT_TOKEN - - # Set GITHUB_TOKEN for reporting test failures - GITHUB_TOKEN=$(retry 5 vault read -field=github_token secret/kibana-issues/dev/kibanamachine) - export GITHUB_TOKEN - - KIBANA_CI_REPORTER_KEY=$(retry 5 vault read -field=value secret/kibana-issues/dev/kibanamachine-reporter) - export KIBANA_CI_REPORTER_KEY - - PERCY_TOKEN=$(retry 5 vault read -field=value secret/kibana-issues/dev/percy) - export PERCY_TOKEN - - # remove vault related secrets - unset VAULT_ROLE_ID VAULT_SECRET_ID VAULT_TOKEN VAULT_ADDR -fi diff --git a/src/dev/ci_setup/setup.sh b/src/dev/ci_setup/setup.sh deleted file mode 100755 index aeb0ba75a9052..0000000000000 --- a/src/dev/ci_setup/setup.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source src/dev/ci_setup/setup_env.sh true - -echo " -- KIBANA_DIR='$KIBANA_DIR'" -echo " -- XPACK_DIR='$XPACK_DIR'" -echo " -- PARENT_DIR='$PARENT_DIR'" -echo " -- KIBANA_PKG_BRANCH='$KIBANA_PKG_BRANCH'" -echo " -- TEST_ES_SNAPSHOT_VERSION='$TEST_ES_SNAPSHOT_VERSION'" - -### -### install dependencies -### -echo " -- installing node.js dependencies" -yarn kbn bootstrap --verbose - -### -### Download es snapshots -### -echo " -- downloading es snapshot" -node scripts/es snapshot --download-only; - -### -### verify no git modifications caused by bootstrap -### -if [[ "$DISABLE_BOOTSTRAP_VALIDATION" != "true" ]]; then - GIT_CHANGES="$(git ls-files --modified)" - if [ "$GIT_CHANGES" ]; then - echo -e "\n${RED}ERROR: 'yarn kbn bootstrap' caused changes to the following files:${C_RESET}\n" - echo -e "$GIT_CHANGES\n" - exit 1 - fi -fi diff --git a/src/dev/ci_setup/setup_env.sh b/src/dev/ci_setup/setup_env.sh deleted file mode 100644 index c1942775c88b5..0000000000000 --- a/src/dev/ci_setup/setup_env.sh +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ "$CI_ENV_SETUP" ]]; then - return 0 -fi - -installNode=$1 - -dir="$(pwd)" -cacheDir="$HOME/.kibana" - -RED='\033[0;31m' -C_RESET='\033[0m' # Reset color - -export NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=4096" - -### -### Since the Jenkins logging output collector doesn't look like a TTY -### Node/Chalk and other color libs disable their color output. But Jenkins -### can handle color fine, so this forces https://github.com/chalk/supports-color -### to enable color support in Chalk and other related modules. -### -export FORCE_COLOR=1 - -### APM tracking -### -export ELASTIC_APM_ENVIRONMENT=ci - -### -### check that we seem to be in a kibana project -### -if [ -f "$dir/package.json" ] && [ -f "$dir/.node-version" ]; then - echo "Setting up node.js and yarn in $dir" -else - echo "${RED}src/dev/ci_setup/setup.sh must be run within a kibana repo${C_RESET}" - exit 1 -fi - - -export KIBANA_DIR="$dir" -export XPACK_DIR="$KIBANA_DIR/x-pack" - -parentDir="$(cd "$KIBANA_DIR/.."; pwd)" -export PARENT_DIR="$parentDir" - -kbnBranch="$(jq -r .branch "$KIBANA_DIR/package.json")" -export KIBANA_PKG_BRANCH="$kbnBranch" - -export WORKSPACE="${WORKSPACE:-$PARENT_DIR}" - -### -### download node -### -nodeVersion="$(cat "$dir/.node-version")" -nodeDir="$cacheDir/node/$nodeVersion" -nodeBin="$nodeDir/bin" -hostArch="$(command uname -m)" -case "${hostArch}" in - x86_64 | amd64) nodeArch="x64" ;; - aarch64) nodeArch="arm64" ;; - *) nodeArch="${hostArch}" ;; -esac -classifier="$nodeArch.tar.gz" - -UNAME=$(uname) -OS="linux" -if [[ "$UNAME" = *"MINGW64_NT"* ]]; then - OS="win" - nodeBin="$HOME/node" - classifier="x64.zip" -elif [[ "$UNAME" == "Darwin" ]]; then - OS="darwin" -fi -echo " -- Running on OS: $OS" - -nodeUrl="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v$nodeVersion/node-v$nodeVersion-${OS}-${classifier}" - -if [[ "$installNode" == "true" ]]; then - echo " -- node: version=v${nodeVersion} dir=$nodeDir" - - echo " -- setting up node.js" - if [ -x "$nodeBin/node" ] && [ "$("$nodeBin/node" --version)" == "v$nodeVersion" ]; then - echo " -- reusing node.js install" - else - if [ -d "$nodeDir" ]; then - echo " -- clearing previous node.js install" - rm -rf "$nodeDir" - fi - - echo " -- downloading node.js from $nodeUrl" - mkdir -p "$nodeDir" - if [[ "$OS" == "win" ]]; then - nodePkg="$nodeDir/${nodeUrl##*/}" - curl --silent -L -o "$nodePkg" "$nodeUrl" - unzip -qo "$nodePkg" -d "$nodeDir" - mv "${nodePkg%.*}" "$nodeBin" - else - curl --silent -L "$nodeUrl" | tar -xz -C "$nodeDir" --strip-components=1 - fi - fi -fi - -### -### "install" node into this shell -### -export PATH="$nodeBin:$PATH" - -if [[ "$installNode" == "true" || ! $(which yarn) ]]; then - ### - ### downloading yarn - ### - yarnVersion="$(node -e "console.log(String(require('./package.json').engines.yarn || '').replace(/^[^\d]+/,''))")" - npm install -g "yarn@^${yarnVersion}" -fi - -### -### setup yarn offline cache -### -yarn config set yarn-offline-mirror "$cacheDir/yarn-offline-cache" - -### -### "install" yarn into this shell -### -yarnGlobalDir="$(yarn global bin)" -export PATH="$PATH:$yarnGlobalDir" - -# use a proxy to fetch chromedriver/geckodriver asset -export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" -export CHROMEDRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" -export CHROMEDRIVER_CDNBINARIESURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" -export RE2_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" -export SASS_BINARY_SITE="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-sass" -export CYPRESS_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/cypress" - -export CHECKS_REPORTER_ACTIVE=false - -# This is mainly for release-manager builds, which run in an environment that doesn't have Chrome installed -if [[ "$(which google-chrome-stable)" || "$(which google-chrome)" ]]; then - echo "Chrome detected, setting DETECT_CHROMEDRIVER_VERSION=true" - export DETECT_CHROMEDRIVER_VERSION=true - export CHROMEDRIVER_FORCE_DOWNLOAD=true -else - echo "Chrome not detected, installing default chromedriver binary for the package version" -fi - -### only run on pr jobs for elastic/kibana, checks-reporter doesn't work for other repos -if [[ "$ghprbPullId" && "$ghprbGhRepository" == 'elastic/kibana' ]] ; then - export CHECKS_REPORTER_ACTIVE=true -fi - - -source "$KIBANA_DIR/src/dev/ci_setup/load_env_keys.sh" - -ES_DIR="$WORKSPACE/elasticsearch" -ES_JAVA_PROP_PATH=$ES_DIR/.ci/java-versions.properties - -if [[ -d "$ES_DIR" && -f "$ES_JAVA_PROP_PATH" ]]; then - ES_BUILD_JAVA="$(grep "^ES_BUILD_JAVA" "$ES_JAVA_PROP_PATH" | cut -d'=' -f2 | tr -d '[:space:]')" - export ES_BUILD_JAVA - - if [ -z "$ES_BUILD_JAVA" ]; then - echo "Unable to set JAVA_HOME, ES_BUILD_JAVA not present in $ES_JAVA_PROP_PATH" - exit 1 - fi - - echo "Setting JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA" - export JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA -fi - -export CI_ENV_SETUP=true diff --git a/src/dev/ci_setup/setup_percy.sh b/src/dev/ci_setup/setup_percy.sh deleted file mode 100755 index ed6a15d056fe5..0000000000000 --- a/src/dev/ci_setup/setup_percy.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -set -e - -### -### skip chomium download, use the system chrome install -### -export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true -PUPPETEER_EXECUTABLE_PATH="$(command -v google-chrome-stable)" -export PUPPETEER_EXECUTABLE_PATH - -### -### Set Percy parallel build support environment vars -### -eval "$(node ./src/dev/ci_setup/get_percy_env)" -echo " -- PERCY_PARALLEL_NONCE='$PERCY_PARALLEL_NONCE'" -echo " -- PERCY_PARALLEL_TOTAL='$PERCY_PARALLEL_TOTAL'" -echo " -- PERCY_BRANCH='$PERCY_BRANCH'" -echo " -- PERCY_TARGET_BRANCH='$PERCY_TARGET_BRANCH'" diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index b0919d0ab6141..6ba5deb6408ac 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -88,4 +88,5 @@ export const LICENSE_OVERRIDES = { '@elastic/eui@91.0.0-backport.0': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODCā€‘By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary + '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) }; diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index acf4748055589..d7376a81d4525 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -37,7 +37,6 @@ export const IGNORE_FILE_GLOBS = [ 'packages/core/apps/core-apps-server-internal/assets/fonts/**/*', 'src/dev/code_coverage/ingest_coverage/integration_tests/mocks/**/*', 'packages/kbn-utility-types/test-d/**/*', - '**/Jenkinsfile*', 'Dockerfile*', 'vars/*', '.ci/pipeline-library/**/*', diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index 88d8c04b42337..97990be32aa89 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -// Please also add new aliases to test/scripts/jenkins_storybook.sh +// Please also add new aliases to .buildkite/scripts/steps/storybooks/build_and_upload.ts // // If you wish for your Storybook to be built and included in CI, also add your // alias to .buildkite/scripts/steps/storybooks/build_and_upload.ts diff --git a/src/plugins/bfetch/public/batching/create_streaming_batched_function.test.ts b/src/plugins/bfetch/public/batching/create_streaming_batched_function.test.ts index fb9db4490144b..f4eeca4bc5ba6 100644 --- a/src/plugins/bfetch/public/batching/create_streaming_batched_function.test.ts +++ b/src/plugins/bfetch/public/batching/create_streaming_batched_function.test.ts @@ -744,7 +744,7 @@ describe('createStreamingBatchedFunction()', () => { const [, error1] = await promise1; const [result1] = await promise2; expect(error1).toMatchObject({ - message: 'Unexpected token N in JSON at position 0', + message: `Unexpected token 'N', "Not a JSON\n" is not valid JSON`, code: 'STREAM', }); expect(result1).toMatchObject({ diff --git a/src/plugins/chart_expressions/expression_gauge/public/components/__snapshots__/gauge_component.test.tsx.snap b/src/plugins/chart_expressions/expression_gauge/public/components/__snapshots__/gauge_component.test.tsx.snap index afd6ce21ad36f..f797f9ba344e0 100644 --- a/src/plugins/chart_expressions/expression_gauge/public/components/__snapshots__/gauge_component.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_gauge/public/components/__snapshots__/gauge_component.test.tsx.snap @@ -191,6 +191,19 @@ exports[`GaugeComponent renders the chart 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -510,7 +523,7 @@ exports[`GaugeComponent renders the chart 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } diff --git a/src/plugins/chart_expressions/expression_partition_vis/public/components/__snapshots__/partition_vis_component.test.tsx.snap b/src/plugins/chart_expressions/expression_partition_vis/public/components/__snapshots__/partition_vis_component.test.tsx.snap index 241e2ac6f4faf..f7c57d6e765df 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/public/components/__snapshots__/partition_vis_component.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_partition_vis/public/components/__snapshots__/partition_vis_component.test.tsx.snap @@ -421,6 +421,19 @@ exports[`PartitionVisComponent should render correct structure for donut 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -740,7 +753,7 @@ exports[`PartitionVisComponent should render correct structure for donut 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -1324,6 +1337,19 @@ exports[`PartitionVisComponent should render correct structure for mosaic 1`] = "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -1643,7 +1669,7 @@ exports[`PartitionVisComponent should render correct structure for mosaic 1`] = "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -2287,6 +2313,19 @@ exports[`PartitionVisComponent should render correct structure for multi-metric "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -2606,7 +2645,7 @@ exports[`PartitionVisComponent should render correct structure for multi-metric "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -3252,6 +3291,19 @@ exports[`PartitionVisComponent should render correct structure for pie 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -3571,7 +3623,7 @@ exports[`PartitionVisComponent should render correct structure for pie 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -4155,6 +4207,19 @@ exports[`PartitionVisComponent should render correct structure for treemap 1`] = "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -4474,7 +4539,7 @@ exports[`PartitionVisComponent should render correct structure for treemap 1`] = "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -5013,6 +5078,19 @@ exports[`PartitionVisComponent should render correct structure for waffle 1`] = "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -5332,7 +5410,7 @@ exports[`PartitionVisComponent should render correct structure for waffle 1`] = "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } diff --git a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap index 7f5aeab32335a..267833cba170d 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap @@ -763,6 +763,19 @@ exports[`XYChart component it renders area 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -1082,7 +1095,7 @@ exports[`XYChart component it renders area 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -2286,6 +2299,19 @@ exports[`XYChart component it renders bar 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -2605,7 +2631,7 @@ exports[`XYChart component it renders bar 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -3809,6 +3835,19 @@ exports[`XYChart component it renders horizontal bar 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -4128,7 +4167,7 @@ exports[`XYChart component it renders horizontal bar 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -5332,6 +5371,19 @@ exports[`XYChart component it renders line 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -5651,7 +5703,7 @@ exports[`XYChart component it renders line 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -6855,6 +6907,19 @@ exports[`XYChart component it renders stacked area 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -7174,7 +7239,7 @@ exports[`XYChart component it renders stacked area 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -8378,6 +8443,19 @@ exports[`XYChart component it renders stacked bar 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -8697,7 +8775,7 @@ exports[`XYChart component it renders stacked bar 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -9901,6 +9979,19 @@ exports[`XYChart component it renders stacked horizontal bar 1`] = ` "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -10220,7 +10311,7 @@ exports[`XYChart component it renders stacked horizontal bar 1`] = ` "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -11454,6 +11545,19 @@ exports[`XYChart component split chart should render split chart if both, splitR "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -11773,7 +11877,7 @@ exports[`XYChart component split chart should render split chart if both, splitR "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -13215,6 +13319,19 @@ exports[`XYChart component split chart should render split chart if splitColumnA "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -13534,7 +13651,7 @@ exports[`XYChart component split chart should render split chart if splitColumnA "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } @@ -14969,6 +15086,19 @@ exports[`XYChart component split chart should render split chart if splitRowAcce "visible": true, }, }, + "bulletGraph": Object { + "angularTickLabelPadding": 10, + "barBackground": "#343741", + "border": "#EDF0F5", + "colorBands": Array [ + "#D9C6EF", + "#AA87D1", + ], + "fallbackBandColor": "#98A2B3", + "minHeight": 64, + "nonFiniteText": "N/A", + "textColor": "#343741", + }, "chartMargins": Object { "bottom": 0, "left": 0, @@ -15288,7 +15418,7 @@ exports[`XYChart component split chart should render split chart if splitRowAcce "tooltip": Object { "defaultDotColor": "black", "maxTableHeight": 120, - "maxWidth": 260, + "maxWidth": 500, }, } } diff --git a/src/plugins/console/public/styles/_app.scss b/src/plugins/console/public/styles/_app.scss index 9cbe643722047..2f4340f1de0ab 100644 --- a/src/plugins/console/public/styles/_app.scss +++ b/src/plugins/console/public/styles/_app.scss @@ -42,7 +42,7 @@ padding: 0 $euiSizeS; display: inline-block; text-decoration: none; - border-radius: $euiBorderRadius / 2; + border-radius: calc($euiBorderRadius / 2); white-space: nowrap; vertical-align: middle; cursor: default; diff --git a/src/plugins/controls/public/options_list/components/options_list.scss b/src/plugins/controls/public/options_list/components/options_list.scss index ff4014d0cc41d..e0c749441ff6a 100644 --- a/src/plugins/controls/public/options_list/components/options_list.scss +++ b/src/plugins/controls/public/options_list/components/options_list.scss @@ -65,7 +65,7 @@ } .optionsList__actionsRow { - margin: ($euiSizeS / 2) 0 !important; + margin: calc($euiSizeS / 2) 0 !important; .optionsList__actionBarDivider { height: $euiSize; @@ -97,4 +97,4 @@ color: $euiTextSubduedColor; padding: $euiSizeM; } -} \ No newline at end of file +} diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index 310a04874f7fb..1e1084d757310 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -112,12 +112,8 @@ export const setupOptionsListSuggestionsRoute = ( const validationBuilder = getValidationAggregationBuilder(); const suggestionAggregation: any = suggestionBuilder.buildAggregation(request) ?? {}; - const builtValidationAggregation = validationBuilder.buildAggregation(request); - const validationAggregations = builtValidationAggregation - ? { - validation: builtValidationAggregation, - } - : {}; + const validationAggregation: any = validationBuilder.buildAggregation(request); + const body: SearchRequest['body'] = { size: 0, ...timeoutSettings, @@ -128,7 +124,7 @@ export const setupOptionsListSuggestionsRoute = ( }, aggs: { ...suggestionAggregation, - ...validationAggregations, + ...validationAggregation, }, runtime_mappings: { ...runtimeFieldMap, @@ -145,7 +141,7 @@ export const setupOptionsListSuggestionsRoute = ( */ const results = suggestionBuilder.parse(rawEsResult, request); const totalCardinality = results.totalCardinality; - const invalidSelections = validationBuilder.parse(rawEsResult); + const invalidSelections = validationBuilder.parse(rawEsResult, request); return { suggestions: results.suggestions, totalCardinality, diff --git a/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts b/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts index f8a7344eb8860..1d96215e167b9 100644 --- a/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts +++ b/src/plugins/controls/server/options_list/options_list_validation_queries.test.ts @@ -7,6 +7,7 @@ */ import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; +import { FieldSpec } from '@kbn/data-views-plugin/common'; import { OptionsListRequestBody } from '../../common/options_list/types'; import { getValidationAggregationBuilder } from './options_list_validation_queries'; @@ -33,7 +34,19 @@ describe('options list queries', () => { }; }); - describe('validation aggregation and parsing', () => { + describe('validation aggregation', () => { + test('returns empty aggregation when not given selections', () => { + const validationAggBuilder = getValidationAggregationBuilder(); + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }; + expect( + validationAggBuilder.buildAggregation(optionsListRequestBodyMock) + ).toMatchInlineSnapshot(`Object {}`); + }); + test('creates validation aggregation when given selections', () => { const validationAggBuilder = getValidationAggregationBuilder(); const optionsListRequestBodyMock: OptionsListRequestBody = { @@ -45,21 +58,23 @@ describe('options list queries', () => { expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)) .toMatchInlineSnapshot(` Object { - "filters": Object { + "validation": Object { "filters": Object { - "coolOption1": Object { - "match": Object { - "coolTestField": "coolOption1", + "filters": Object { + "coolOption1": Object { + "match": Object { + "coolTestField": "coolOption1", + }, }, - }, - "coolOption2": Object { - "match": Object { - "coolTestField": "coolOption2", + "coolOption2": Object { + "match": Object { + "coolTestField": "coolOption2", + }, }, - }, - "coolOption3": Object { - "match": Object { - "coolTestField": "coolOption3", + "coolOption3": Object { + "match": Object { + "coolTestField": "coolOption3", + }, }, }, }, @@ -68,16 +83,55 @@ describe('options list queries', () => { `); }); - test('returns undefined when not given selections', () => { + test('creates validation aggregation for nested fields when given selections', () => { const validationAggBuilder = getValidationAggregationBuilder(); const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, fieldName: 'coolTestField', + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, allowExpensiveQueries: true, + selectedOptions: ['coolOption1', 'coolOption2', 'coolOption3'], }; - expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)).toBeUndefined(); + expect(validationAggBuilder.buildAggregation(optionsListRequestBodyMock)) + .toMatchInlineSnapshot(` + Object { + "nestedValidation": Object { + "aggs": Object { + "validation": Object { + "filters": Object { + "filters": Object { + "coolOption1": Object { + "match": Object { + "coolTestField": "coolOption1", + }, + }, + "coolOption2": Object { + "match": Object { + "coolTestField": "coolOption2", + }, + }, + "coolOption3": Object { + "match": Object { + "coolTestField": "coolOption3", + }, + }, + }, + }, + }, + }, + "nested": Object { + "path": "path.to.nested", + }, + }, + } + `); }); + }); + describe('validation parsing', () => { test('parses validation result', () => { const validationAggBuilder = getValidationAggregationBuilder(); rawSearchResponseMock.aggregations = { @@ -92,7 +146,13 @@ describe('options list queries', () => { }, }, }; - expect(validationAggBuilder.parse(rawSearchResponseMock)).toMatchInlineSnapshot(` + expect( + validationAggBuilder.parse(rawSearchResponseMock, { + size: 10, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }) + ).toMatchInlineSnapshot(` Array [ "cool1", "cool3", @@ -100,5 +160,41 @@ describe('options list queries', () => { ] `); }); + + test('parses validation result for nested field', () => { + const validationAggBuilder = getValidationAggregationBuilder(); + rawSearchResponseMock.aggregations = { + nestedValidation: { + validation: { + buckets: { + cool1: { doc_count: 0 }, + cool2: { doc_count: 15 }, + cool3: { doc_count: 0 }, + cool4: { doc_count: 0 }, + cool5: { doc_count: 0 }, + cool6: { doc_count: 112 }, + }, + }, + }, + }; + expect( + validationAggBuilder.parse(rawSearchResponseMock, { + size: 10, + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, + fieldName: 'coolTestField', + allowExpensiveQueries: true, + }) + ).toMatchInlineSnapshot(` + Array [ + "cool1", + "cool3", + "cool4", + "cool5", + ] + `); + }); }); }); diff --git a/src/plugins/controls/server/options_list/options_list_validation_queries.ts b/src/plugins/controls/server/options_list/options_list_validation_queries.ts index 56e7f9efef6bf..edacacb361d0c 100644 --- a/src/plugins/controls/server/options_list/options_list_validation_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_validation_queries.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; import { get, isEmpty } from 'lodash'; import { OptionsListRequestBody } from '../../common/options_list/types'; @@ -16,7 +17,7 @@ import { OptionsListValidationAggregationBuilder } from './types'; */ export const getValidationAggregationBuilder: () => OptionsListValidationAggregationBuilder = () => ({ - buildAggregation: ({ selectedOptions, fieldName }: OptionsListRequestBody) => { + buildAggregation: ({ selectedOptions, fieldName, fieldSpec }: OptionsListRequestBody) => { let selectedOptionsFilters; if (selectedOptions) { selectedOptionsFilters = selectedOptions.reduce((acc, currentOption) => { @@ -24,16 +25,43 @@ export const getValidationAggregationBuilder: () => OptionsListValidationAggrega return acc; }, {} as { [key: string]: { match: { [key: string]: string } } }); } - return selectedOptionsFilters && !isEmpty(selectedOptionsFilters) - ? { - filters: { - filters: selectedOptionsFilters, + + if (isEmpty(selectedOptionsFilters ?? [])) { + return {}; + } + + let validationAggregation: any = { + validation: { + filters: { + filters: selectedOptionsFilters, + }, + }, + }; + + const isNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + if (isNested) { + validationAggregation = { + nestedValidation: { + nested: { + path: isNested.nested.path, }, - } - : undefined; + aggs: { + ...validationAggregation, + }, + }, + }; + } + + return validationAggregation; }, - parse: (rawEsResult) => { - const rawInvalidSuggestions = get(rawEsResult, 'aggregations.validation.buckets'); + parse: (rawEsResult, { fieldSpec }) => { + const isNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + const rawInvalidSuggestions = get( + rawEsResult, + isNested + ? 'aggregations.nestedValidation.validation.buckets' + : 'aggregations.validation.buckets' + ); return rawInvalidSuggestions && !isEmpty(rawInvalidSuggestions) ? Object.keys(rawInvalidSuggestions).filter( (key) => rawInvalidSuggestions[key].doc_count === 0 diff --git a/src/plugins/controls/server/options_list/types.ts b/src/plugins/controls/server/options_list/types.ts index 1ea3475eddffb..70edc14484c99 100644 --- a/src/plugins/controls/server/options_list/types.ts +++ b/src/plugins/controls/server/options_list/types.ts @@ -19,7 +19,7 @@ export interface EsBucket { export interface OptionsListValidationAggregationBuilder { buildAggregation: (req: OptionsListRequestBody) => unknown; - parse: (response: SearchResponse) => string[]; + parse: (response: SearchResponse, req: OptionsListRequestBody) => string[]; } export interface OptionsListSuggestionAggregationBuilder { diff --git a/src/plugins/data/common/search/expressions/esql.ts b/src/plugins/data/common/search/expressions/esql.ts index ca6096c8160df..e1eb3bb7be452 100644 --- a/src/plugins/data/common/search/expressions/esql.ts +++ b/src/plugins/data/common/search/expressions/esql.ts @@ -208,10 +208,10 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => { IKibanaSearchResponse >({ params }, { abortSignal, strategy: ESQL_SEARCH_STRATEGY }).pipe( catchError((error) => { - if (!error.err) { + if (!error.attributes) { error.message = `Unexpected error from Elasticsearch: ${error.message}`; } else { - const { type, reason } = extractTypeAndReason(error.err.attributes); + const { type, reason } = extractTypeAndReason(error.attributes); if (type === 'parsing_exception') { error.message = `Couldn't parse Elasticsearch ES|QL query. Check your query and try again. Error: ${reason}`; } else { diff --git a/src/plugins/data/common/search/expressions/essql.ts b/src/plugins/data/common/search/expressions/essql.ts index 5012f01a749ac..b27d9137445f6 100644 --- a/src/plugins/data/common/search/expressions/essql.ts +++ b/src/plugins/data/common/search/expressions/essql.ts @@ -203,10 +203,10 @@ export const getEssqlFn = ({ getStartDependencies }: EssqlFnArguments) => { { abortSignal, strategy: SQL_SEARCH_STRATEGY } ).pipe( catchError((error) => { - if (!error.err) { + if (!error.attributes) { error.message = `Unexpected error from Elasticsearch: ${error.message}`; } else { - const { type, reason } = error.err.attributes; + const { type, reason } = error.attributes; if (type === 'parsing_exception') { error.message = `Couldn't parse Elasticsearch SQL query. You may need to add double quotes to names containing special characters. Check your query and try again. Error: ${reason}`; } else { diff --git a/src/plugins/data/public/search/expressions/esdsl.test.ts b/src/plugins/data/public/search/expressions/esdsl.test.ts index 2bf2ef1148507..603dbf1e8f3eb 100644 --- a/src/plugins/data/public/search/expressions/esdsl.test.ts +++ b/src/plugins/data/public/search/expressions/esdsl.test.ts @@ -63,7 +63,7 @@ describe('esdsl', () => { } catch (error) { errorMessage = error.message; } - expect(errorMessage).toEqual('Unexpected token i in JSON at position 0'); + expect(errorMessage).toEqual(`Unexpected token 'i', "invalid json" is not valid JSON`); }); test('adds filters', async () => { diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts index 1c6bc41e33216..4a2b6f27e9e9b 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts @@ -12,7 +12,7 @@ import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { IEsSearchRequest } from '../../../common/search'; import { SearchInterceptor } from './search_interceptor'; import { AbortError } from '@kbn/kibana-utils-plugin/public'; -import { PainlessError, EsError, type IEsError } from '@kbn/search-errors'; +import { EsError, type IEsError } from '@kbn/search-errors'; import { ISessionService, SearchSessionState } from '..'; import { bfetchPluginMock } from '@kbn/bfetch-plugin/public/mocks'; import { BfetchPublicSetup } from '@kbn/bfetch-plugin/public'; @@ -157,9 +157,9 @@ describe('SearchInterceptor', () => { expect(mockCoreSetup.notifications.toasts.addError).not.toBeCalled(); }); - test('Renders a PainlessError', async () => { + test('Renders a EsError', async () => { searchInterceptor.showError( - new PainlessError( + new EsError( { statusCode: 400, message: 'search_phase_execution_exception', @@ -167,6 +167,7 @@ describe('SearchInterceptor', () => { error: searchPhaseException.error, }, }, + 'search_phase_execution_exception', () => {} ) ); @@ -1467,22 +1468,6 @@ describe('SearchInterceptor', () => { }); }); - test('Should throw Painless error on server error with OSS format', async () => { - const mockResponse: IEsError = { - statusCode: 400, - message: 'search_phase_execution_exception', - attributes: { - error: searchPhaseException.error, - }, - }; - fetchMock.mockRejectedValueOnce(mockResponse); - const mockRequest: IEsSearchRequest = { - params: {}, - }; - const response = searchInterceptor.search(mockRequest); - await expect(response.toPromise()).rejects.toThrow(PainlessError); - }); - test('Should throw ES error on ES server error', async () => { const mockResponse: IEsError = { statusCode: 400, diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts index 8bae4b3fc7c12..9fcb74e339403 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts @@ -50,13 +50,7 @@ import { BatchedFunc, BfetchPublicSetup, DISABLE_BFETCH } from '@kbn/bfetch-plug import { toMountPoint } from '@kbn/kibana-react-plugin/public'; import { AbortError, KibanaServerError } from '@kbn/kibana-utils-plugin/public'; import { BfetchRequestError } from '@kbn/bfetch-error'; -import { - EsError, - isEsError, - isPainlessError, - PainlessError, - renderSearchError, -} from '@kbn/search-errors'; +import { createEsError, isEsError, renderSearchError } from '@kbn/search-errors'; import { ENHANCED_ES_SEARCH_STRATEGY, IAsyncSearchOptions, @@ -238,9 +232,15 @@ export class SearchInterceptor { } ); }; - return isPainlessError(e) - ? new PainlessError(e, openInInspector, options?.indexPattern) - : new EsError(e, openInInspector); + return createEsError( + e, + openInInspector, + { + application: this.application, + docLinks: this.docLinks, + }, + options?.indexPattern + ); } return e instanceof Error ? e : new Error(e.message); @@ -585,10 +585,7 @@ export class SearchInterceptor { return; } - const searchErrorDisplay = renderSearchError({ - error: e, - application: this.application, - }); + const searchErrorDisplay = renderSearchError(e); if (searchErrorDisplay) { this.deps.toasts.addDanger({ diff --git a/src/plugins/data/server/ui_settings.ts b/src/plugins/data/server/ui_settings.ts index 46794e0a3c9c6..b7b665689c106 100644 --- a/src/plugins/data/server/ui_settings.ts +++ b/src/plugins/data/server/ui_settings.ts @@ -471,6 +471,7 @@ export function getUiSettings( '', }, }), + requiresPageReload: true, schema: enableValidations ? schema.arrayOf( schema.object({ diff --git a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx index 73432737f9321..d24a77d01a6e4 100644 --- a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx +++ b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx @@ -257,6 +257,8 @@ const IndexPatternEditorFlyoutContentComponent = ({ className="indexPatternEditor__form" error={form.getErrors()} isInvalid={form.isSubmitted && !form.isValid && form.getErrors().length} + data-validation-error={form.getErrors().length ? '1' : '0'} + data-test-subj="indexPatternEditorForm" > {indexPatternTypeSelect} diff --git a/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx b/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx index 3824a6cea5258..5428f5455aeea 100644 --- a/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx +++ b/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx @@ -197,6 +197,7 @@ export const TitleField = ({ data-test-subj="createIndexPatternTitleInput" append={} placeholder="example-*" + data-is-validating={field.isValidating ? '1' : '0'} /> ); diff --git a/src/plugins/data_view_editor/public/data_view_editor_service.ts b/src/plugins/data_view_editor/public/data_view_editor_service.ts index dcc50567c4b44..52ac001b1f0a4 100644 --- a/src/plugins/data_view_editor/public/data_view_editor_service.ts +++ b/src/plugins/data_view_editor/public/data_view_editor_service.ts @@ -308,8 +308,12 @@ export class DataViewEditorService { getFieldsOptions: GetFieldsOptions, requireTimestampField: boolean ) => { - const fields = await ensureMinimumTime(this.dataViews.getFieldsForWildcard(getFieldsOptions)); - return extractTimeFields(fields as DataViewField[], requireTimestampField); + try { + const fields = await ensureMinimumTime(this.dataViews.getFieldsForWildcard(getFieldsOptions)); + return extractTimeFields(fields as DataViewField[], requireTimestampField); + } catch (e) { + return []; + } }; private getTimestampOptionsForWildcardCached = async ( @@ -374,7 +378,7 @@ export class DataViewEditorService { ); // necessary to get new observable value if the field hasn't changed - this.loadIndices(); + await this.loadIndices(); // Wait until we have fetched the indices. // The result will then be sent to the field validator(s) (when calling await provider();); diff --git a/src/plugins/discover/public/components/common/error_callout.tsx b/src/plugins/discover/public/components/common/error_callout.tsx index a2aa2b478a3dc..3fb91f196ee3a 100644 --- a/src/plugins/discover/public/components/common/error_callout.tsx +++ b/src/plugins/discover/public/components/common/error_callout.tsx @@ -22,10 +22,7 @@ export const ErrorCallout = ({ title, error }: Props) => { const { core } = useDiscoverServices(); const { euiTheme } = useEuiTheme(); - const searchErrorDisplay = renderSearchError({ - error, - application: core.application, - }); + const searchErrorDisplay = renderSearchError(error); return ( { private renderNormal() { const { addBasePath, solutions, isCloudEnabled } = this.props; const { application, trackUiMetric } = getServices(); - const isDarkMode = getServices().uiSettings?.get('theme:darkMode') || false; + const isDarkMode = getServices().theme?.getTheme().darkMode ?? false; const devTools = this.findDirectoryById('console'); const manageDataFeatures = this.getFeaturesByCategory('admin'); diff --git a/src/plugins/home/public/application/components/sample_data/index.tsx b/src/plugins/home/public/application/components/sample_data/index.tsx index 316ba615ce818..c1ebf4178186e 100644 --- a/src/plugins/home/public/application/components/sample_data/index.tsx +++ b/src/plugins/home/public/application/components/sample_data/index.tsx @@ -29,7 +29,7 @@ interface Props { } export function SampleDataCard({ urlBasePath, onDecline, onConfirm }: Props) { - const IS_DARK_THEME = getServices().uiSettings.get('theme:darkMode'); + const IS_DARK_THEME = getServices().theme.getTheme().darkMode; const cardGraphicFile = !IS_DARK_THEME ? 'illustration_integrations_lightmode.png' : 'illustration_integrations_darkmode.png'; diff --git a/src/plugins/home/public/application/components/tutorial/instruction.js b/src/plugins/home/public/application/components/tutorial/instruction.js index 68360c86d2ede..e1aaeae274fe0 100644 --- a/src/plugins/home/public/application/components/tutorial/instruction.js +++ b/src/plugins/home/public/application/components/tutorial/instruction.js @@ -24,7 +24,7 @@ export function Instruction({ variantId, isCloudEnabled, }) { - const { tutorialService, http, uiSettings, getBasePath, kibanaVersion } = getServices(); + const { tutorialService, http, theme, getBasePath, kibanaVersion } = getServices(); let pre; if (textPre) { @@ -67,6 +67,8 @@ export function Instruction({ ); } + const darkTheme = theme?.getTheme().darkMode ?? false; + return (
{pre} @@ -78,7 +80,7 @@ export function Instruction({ { + let container: HTMLDivElement | null; + + beforeEach(() => { + container = document.createElement('div'); + document.body.appendChild(container); + }); + + afterEach(() => { + document.body.removeChild(container!); + container = null; + }); + + const TestConsumer: React.FC = () => { + const darkMode = useDarkMode(); + return
{String(darkMode)}
; + }; + + const mock = (): [KibanaServices, BehaviorSubject] => { + const core = coreMock.createStart(); + const subject = new BehaviorSubject({ darkMode: false }); + core.theme.theme$ = subject.asObservable(); + + return [core, subject]; + }; + + test('returns the value from the theme', () => { + const [core] = mock(); + const { Provider } = createKibanaReactContext(core); + + ReactDOM.render( + + + , + container + ); + + const div = container!.querySelector('div'); + expect(div!.textContent).toBe('false'); + }); + + test('value changes if the theme changes', () => { + const [core, subject] = mock(); + const { Provider } = createKibanaReactContext(core); + + ReactDOM.render( + + + , + container + ); + + let div = container!.querySelector('div'); + expect(div!.textContent).toBe('false'); + + act(() => { + subject.next({ darkMode: true }); + }); + + div = container!.querySelector('div'); + expect(div!.textContent).toBe('true'); + }); +}); diff --git a/src/plugins/kibana_react/public/dark_mode/use_dark_mode.ts b/src/plugins/kibana_react/public/dark_mode/use_dark_mode.ts new file mode 100644 index 0000000000000..c53a7b8687aad --- /dev/null +++ b/src/plugins/kibana_react/public/dark_mode/use_dark_mode.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import useObservable from 'react-use/lib/useObservable'; +import { useKibana } from '../context'; + +export const useDarkMode = (defaultValue?: boolean): boolean => { + const { + services: { theme }, + } = useKibana(); + + if (!theme) { + if (defaultValue !== undefined) { + return defaultValue; + } + throw new TypeError('theme service not available in kibana-react context.'); + } + + const currentTheme = useObservable(theme.theme$, theme.getTheme()); + return currentTheme.darkMode; +}; diff --git a/src/plugins/kibana_react/public/index.ts b/src/plugins/kibana_react/public/index.ts index 05abdbd84e91c..5b4e8a9bcbae0 100644 --- a/src/plugins/kibana_react/public/index.ts +++ b/src/plugins/kibana_react/public/index.ts @@ -42,6 +42,8 @@ export { useGlobalUiSetting$, } from './ui_settings'; +export { useDarkMode } from './dark_mode'; + export { useExecutionContext } from './use_execution_context'; export { reactRouterNavigate, reactRouterOnClickHandler } from './react_router_navigate'; @@ -79,6 +81,7 @@ export { KibanaThemeProvider, wrapWithTheme, type KibanaThemeProviderProps } fro export function plugin() { return new (class KibanaReactPlugin { setup() {} + start() {} })(); } diff --git a/src/plugins/kibana_react/public/markdown/_markdown.scss b/src/plugins/kibana_react/public/markdown/_markdown.scss index c11aefe1f4d97..a3bba38509bcd 100644 --- a/src/plugins/kibana_react/public/markdown/_markdown.scss +++ b/src/plugins/kibana_react/public/markdown/_markdown.scss @@ -14,7 +14,7 @@ $kbnDefaultFontSize: 14px; @function canvasToEm($size) { - @return #{$size / $kbnDefaultFontSize}em; + @return #{calc($size / $kbnDefaultFontSize)}em; } .kbnMarkdown__body { diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index 1fa2407cdd287..b2e2c5ec3f748 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -601,10 +601,6 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, - 'observability:profilingUseLegacyCo2Calculation': { - type: 'boolean', - _meta: { description: 'Non-default value of setting.' }, - }, 'observability:profilingCostPervCPUPerHour': { type: 'integer', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 33518b5389f57..e1de9aa7842d5 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -160,7 +160,6 @@ export interface UsageStats { 'observability:profilingPervCPUWattArm64': number; 'observability:profilingCo2PerKWH': number; 'observability:profilingDatacenterPUE': number; - 'observability:profilingUseLegacyCo2Calculation': boolean; 'observability:profilingCostPervCPUPerHour': number; 'observability:profilingAWSCostDiscountRate': number; } diff --git a/src/plugins/kibana_utils/public/index.ts b/src/plugins/kibana_utils/public/index.ts index 9a717953d60f8..4bf4939714975 100644 --- a/src/plugins/kibana_utils/public/index.ts +++ b/src/plugins/kibana_utils/public/index.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import { PluginInitializerContext } from '@kbn/core/public'; import { KibanaUtilsPublicPlugin } from './plugin'; export type { Get, Set } from '../common'; @@ -114,6 +113,6 @@ export { applyDiff } from './state_management/utils/diff_object'; export type { KibanaUtilsPublicSetup as KibanaUtilsSetup, KibanaUtilsPublicStart } from './plugin'; -export function plugin(initializerContext: PluginInitializerContext) { - return new KibanaUtilsPublicPlugin(initializerContext); +export function plugin() { + return new KibanaUtilsPublicPlugin(); } diff --git a/src/plugins/kibana_utils/public/mocks.ts b/src/plugins/kibana_utils/public/mocks.ts index cb872838af4b4..e30587d71772a 100644 --- a/src/plugins/kibana_utils/public/mocks.ts +++ b/src/plugins/kibana_utils/public/mocks.ts @@ -12,9 +12,7 @@ export type Setup = jest.Mocked; export type Start = jest.Mocked; const createSetupContract = (): Setup => { - return { - setVersion: jest.fn(), - }; + return undefined; }; const createStartContract = (): Start => { diff --git a/src/plugins/kibana_utils/public/plugin.ts b/src/plugins/kibana_utils/public/plugin.ts index 05d8ede256498..f9c1e37928ba5 100644 --- a/src/plugins/kibana_utils/public/plugin.ts +++ b/src/plugins/kibana_utils/public/plugin.ts @@ -6,13 +6,9 @@ * Side Public License, v 1. */ -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; -import { History } from 'history'; -import { setVersion } from './set_version'; +import { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; -export interface KibanaUtilsPublicSetup { - setVersion: (history: Pick) => void; -} +export type KibanaUtilsPublicSetup = undefined; export type KibanaUtilsPublicStart = undefined; @@ -31,16 +27,8 @@ export class KibanaUtilsPublicPlugin KibanaUtilsPublicStartDependencies > { - private readonly version: string; - - constructor(initializerContext: PluginInitializerContext) { - this.version = initializerContext.env.packageInfo.version; - } - public setup(_core: CoreSetup): KibanaUtilsPublicSetup { - return { - setVersion: this.setVersion, - }; + return undefined; } public start(_core: CoreStart): KibanaUtilsPublicStart { @@ -48,8 +36,4 @@ export class KibanaUtilsPublicPlugin } public stop() {} - - private setVersion = (history: Pick) => { - setVersion(history, this.version); - }; } diff --git a/src/plugins/kibana_utils/public/set_version.test.ts b/src/plugins/kibana_utils/public/set_version.test.ts deleted file mode 100644 index eb70d889d0f03..0000000000000 --- a/src/plugins/kibana_utils/public/set_version.test.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { History } from 'history'; -import { setVersion } from './set_version'; - -describe('setVersion', () => { - test('sets version, if one is not set', () => { - const history: Pick = { - location: { - hash: '', - search: '', - pathname: '/', - state: {}, - }, - replace: jest.fn(), - }; - setVersion(history, '1.2.3'); - - expect(history.replace).toHaveBeenCalledTimes(1); - expect(history.replace).toHaveBeenCalledWith('/?_v=1.2.3'); - }); - - test('overwrites, if version already set to a different value', () => { - const history: Pick = { - location: { - hash: '/view/dashboards', - search: 'a=b&_v=7.16.6', - pathname: '/foo/bar', - state: {}, - }, - replace: jest.fn(), - }; - setVersion(history, '8.0.0'); - - expect(history.replace).toHaveBeenCalledTimes(1); - expect(history.replace).toHaveBeenCalledWith('/foo/bar?a=b&_v=8.0.0#/view/dashboards'); - }); - - test('does nothing, if version already set to correct value', () => { - const history: Pick = { - location: { - hash: '/view/dashboards', - search: 'a=b&_v=8.0.0', - pathname: '/foo/bar', - state: {}, - }, - replace: jest.fn(), - }; - setVersion(history, '8.0.0'); - - expect(history.replace).toHaveBeenCalledTimes(0); - }); -}); diff --git a/src/plugins/kibana_utils/public/set_version.ts b/src/plugins/kibana_utils/public/set_version.ts deleted file mode 100644 index b3acb39ed5134..0000000000000 --- a/src/plugins/kibana_utils/public/set_version.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { History } from 'history'; - -export const setVersion = (history: Pick, version: string) => { - const search = new URLSearchParams(history.location.search); - if (search.get('_v') === version) return; - search.set('_v', version); - const path = - history.location.pathname + - '?' + - search.toString() + - (history.location.hash ? '#' + history.location.hash : ''); - history.replace(path); -}; diff --git a/src/plugins/share/common/url_service/locators/redirect/parse_search_params.ts b/src/plugins/share/common/url_service/locators/redirect/parse_search_params.ts index a4711c30db5d0..c66bf56b1858f 100644 --- a/src/plugins/share/common/url_service/locators/redirect/parse_search_params.ts +++ b/src/plugins/share/common/url_service/locators/redirect/parse_search_params.ts @@ -22,7 +22,9 @@ import type { RedirectOptions } from './types'; * @param urlSearch Search part of URL path. * @returns Parsed out locator ID, version, and locator params. */ -export function parseSearchParams(urlSearch: string): RedirectOptions { +export function parseSearchParams

( + urlSearch: string +): RedirectOptions

{ const search = new URLSearchParams(urlSearch); const id = search.get('l'); @@ -66,7 +68,7 @@ export function parseSearchParams(urlSearch: string): RedirectOptions { throw new Error(message); } - let params: unknown & SerializableRecord; + let params: P; try { params = JSON.parse(paramsJson); } catch { diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index ec17c9b9d1a3b..e04e83dc46feb 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10091,12 +10091,6 @@ "description": "Non-default value of setting." } }, - "observability:profilingUseLegacyCo2Calculation": { - "type": "boolean", - "_meta": { - "description": "Non-default value of setting." - } - }, "observability:profilingCostPervCPUPerHour": { "type": "integer", "_meta": { diff --git a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss index 1c16adbfc8c13..362aec7264983 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss +++ b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.scss @@ -8,8 +8,8 @@ line-height: $euiSize; border: none; color: $euiTextColor; - padding-top: $euiSizeM / 2 + 1px; - padding-bottom: $euiSizeM / 2 + 1px; + padding-top: calc($euiSizeM / 2) + 1px; + padding-bottom: calc($euiSizeM / 2) + 1px; white-space: normal; /* 1 */ &:not(.globalFilterItem-isDisabled) { @@ -54,8 +54,8 @@ left: 0; width: $euiSizeXS; background-color: $kbnGlobalFilterItemBorderColor; - border-top-left-radius: $euiBorderRadius / 2; - border-bottom-left-radius: $euiBorderRadius / 2; + border-top-left-radius: calc($euiBorderRadius / 2); + border-bottom-left-radius: calc($euiBorderRadius / 2); } } diff --git a/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss b/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss index 7ce304310ae56..2e6f639ea792d 100644 --- a/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss +++ b/src/plugins/unified_search/public/saved_query_management/saved_query_management_list.scss @@ -5,7 +5,7 @@ } .kbnSavedQueryManagement__text { - padding: $euiSizeM $euiSizeM ($euiSizeM / 2) $euiSizeM; + padding: $euiSizeM $euiSizeM calc($euiSizeM / 2) $euiSizeM; } .kbnSavedQueryManagement__list { @@ -13,5 +13,5 @@ max-height: inherit; // Fixes overflow for applied max-height // Left/Right padding is calculated to match the left alignment of the // popover text and buttons - padding: ($euiSizeM / 2) $euiSizeXS !important; // Override flush + padding: calc($euiSizeM / 2) $euiSizeXS !important; // Override flush } diff --git a/src/plugins/vis_default_editor/public/_agg_params.scss b/src/plugins/vis_default_editor/public/_agg_params.scss index 81faa06681c0d..c56ef94c3a4ba 100644 --- a/src/plugins/vis_default_editor/public/_agg_params.scss +++ b/src/plugins/vis_default_editor/public/_agg_params.scss @@ -1,7 +1,7 @@ .visEditorAggParam--half { margin: $euiSize 0; display: inline-block; - width: calc(50% - #{$euiSizeS / 2}); + width: calc(50% - #{calc($euiSizeS / 2)}); } .visEditorAggParam--half-size { diff --git a/src/plugins/vis_types/timeseries/public/application/components/_vis_with_splits.scss b/src/plugins/vis_types/timeseries/public/application/components/_vis_with_splits.scss index 9e09a6c3477f3..036cf3f6a8fbd 100644 --- a/src/plugins/vis_types/timeseries/public/application/components/_vis_with_splits.scss +++ b/src/plugins/vis_types/timeseries/public/application/components/_vis_with_splits.scss @@ -20,7 +20,7 @@ > .tvbVis { // Apply the minimum height on the vis itself so it doesn't interfere with flex calculations // Gauges are not completely square, so the height is just slightly less than the width - min-height: $euiSize * 12 / 1.25; + min-height: calc($euiSize * 12 / 1.25); } } diff --git a/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js b/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js index c2a2b4bb86af1..e37c55ab8a246 100644 --- a/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js +++ b/src/plugins/vis_types/timeseries/public/application/lib/set_is_reversed.js @@ -7,9 +7,7 @@ */ import color from 'color'; -import { getUISettings } from '../../services'; - -const isDarkTheme = () => getUISettings().get('theme:darkMode'); +import { getCoreStart } from '../../services'; /** * Returns true if the color that is passed has low luminosity @@ -23,7 +21,7 @@ const isColorDark = (c) => { * Defaults to checking `theme:darkMode`. */ export const isThemeDark = (currentTheme) => { - let themeIsDark = currentTheme || isDarkTheme(); + let themeIsDark = currentTheme || getCoreStart().theme.getTheme().darkMode; // If passing a string, check the luminosity if (typeof currentTheme === 'string') { diff --git a/src/plugins/vis_types/timeseries/public/application/visualizations/views/_metric.scss b/src/plugins/vis_types/timeseries/public/application/visualizations/views/_metric.scss index bc2ce4f1a9e44..d5eb056dd172e 100644 --- a/src/plugins/vis_types/timeseries/public/application/visualizations/views/_metric.scss +++ b/src/plugins/vis_types/timeseries/public/application/visualizations/views/_metric.scss @@ -101,7 +101,7 @@ .tvbVisMetric__label--additional { @include euiTextTruncate; font-size: .25em; /* 1 */ - padding: ($euiSizeXS / 2) 0 0; + padding: calc($euiSizeXS / 2) 0 0; text-align: center; color: $tvbValueColor; line-height: 1.2; // Ensure the descenders don't get cut off diff --git a/src/plugins/vis_types/vega/public/plugin.ts b/src/plugins/vis_types/vega/public/plugin.ts index 54f319850d817..96e383979b854 100644 --- a/src/plugins/vis_types/vega/public/plugin.ts +++ b/src/plugins/vis_types/vega/public/plugin.ts @@ -20,7 +20,7 @@ import { setData, setDataViews, setInjectedVars, - setUISettings, + setThemeService, setDocLinks, setMapsEms, setUsageCollectionStart, @@ -77,8 +77,6 @@ export class VegaPlugin implements Plugin { enableExternalUrls: this.initializerContext.config.get().enableExternalUrls, }); - setUISettings(core.uiSettings); - const visualizationDependencies: Readonly = { core, plugins: { @@ -104,6 +102,7 @@ export class VegaPlugin implements Plugin { setDataViews(dataViews); setDocLinks(core.docLinks); setMapsEms(mapsEms); + setThemeService(core.theme); setUsageCollectionStart(usageCollection); } } diff --git a/src/plugins/vis_types/vega/public/services.ts b/src/plugins/vis_types/vega/public/services.ts index 4b3e0ca72cdc3..04c5c5cf1f447 100644 --- a/src/plugins/vis_types/vega/public/services.ts +++ b/src/plugins/vis_types/vega/public/services.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { NotificationsStart, IUiSettingsClient, DocLinksStart } from '@kbn/core/public'; +import type { NotificationsStart, DocLinksStart, ThemeServiceStart } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; @@ -22,7 +22,6 @@ export const [getDataViews, setDataViews] = export const [getNotifications, setNotifications] = createGetterSetter('Notifications'); -export const [getUISettings, setUISettings] = createGetterSetter('UISettings'); export const [getMapsEms, setMapsEms] = createGetterSetter('mapsEms'); export const [getInjectedVars, setInjectedVars] = createGetterSetter<{ @@ -35,3 +34,6 @@ export const [getDocLinks, setDocLinks] = createGetterSetter('doc export const [getUsageCollectionStart, setUsageCollectionStart] = createGetterSetter('UsageCollection'); + +export const [getThemeService, setThemeService] = + createGetterSetter('ThemeServiceStart'); diff --git a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts index eafe75534154a..a42d76681c4ff 100644 --- a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.test.ts @@ -24,7 +24,7 @@ import { setInjectedVars, setData, setNotifications, - setUISettings, + setThemeService, setDataViews, } from '../../services'; import { initVegaLayer, initTmsRasterLayer } from './layers'; @@ -121,7 +121,7 @@ describe('vega_map_view/view', () => { setData(dataPluginStart); setDataViews(dataViewsStart); setNotifications(coreStart.notifications); - setUISettings(coreStart.uiSettings); + setThemeService(coreStart.theme); async function createVegaMapView() { await vegaParser.parseAsync(); diff --git a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts index fe1d6a27f3605..7e4ca5a19dd6a 100644 --- a/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts +++ b/src/plugins/vis_types/vega/public/vega_view/vega_map_view/view.ts @@ -15,7 +15,7 @@ import { maplibregl } from '@kbn/mapbox-gl'; import { initTmsRasterLayer, initVegaLayer } from './layers'; import { VegaBaseView } from '../vega_base_view'; -import { getUISettings } from '../../services'; +import { getThemeService } from '../../services'; import { defaultMapConfig, defaultMabBoxStyle, vegaLayerId } from './constants'; import { validateZoomSettings, injectMapPropsIntoSpec } from './utils'; @@ -98,7 +98,7 @@ export class VegaMapView extends VegaBaseView { const { mapStyle, emsTileServiceId } = this._parser.mapConfig; // if (mapStyle) { - const isDarkMode: boolean = getUISettings().get('theme:darkMode'); + const isDarkMode: boolean = getThemeService().getTheme().darkMode; return emsTileServiceId ? emsTileServiceId : await this._serviceSettings.getDefaultTmsLayer(isDarkMode); diff --git a/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss b/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss index 4612602d93f1c..8b92af5a4fdcf 100644 --- a/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss +++ b/src/plugins/vis_types/vislib/public/vislib/lib/layout/_layout.scss @@ -203,7 +203,7 @@ } .slice { - stroke-width: $euiSizeXS / 2; + stroke-width: calc($euiSizeXS / 2); stroke: $euiColorEmptyShade; &:hover { diff --git a/src/setup_node_env/exit_on_warning.js b/src/setup_node_env/exit_on_warning.js index 5e7bae8254c04..dc6e321074224 100644 --- a/src/setup_node_env/exit_on_warning.js +++ b/src/setup_node_env/exit_on_warning.js @@ -46,6 +46,13 @@ var IGNORE_WARNINGS = [ // We need to discard that warning name: 'ProductNotSupportedSecurityError', }, + // https://github.com/browserify/browserify-rsa/pull/20 + { + name: 'DeprecationWarning', + code: 'DEP0170', + message: + 'The URL https://github.com:crypto-browserify/browserify-rsa.git is invalid. Future versions of Node.js will throw an error.', + }, ]; if (process.noProcessWarnings !== true) { diff --git a/src/setup_node_env/heap_snapshot.js b/src/setup_node_env/heap_snapshot.js deleted file mode 100644 index 94e4b35e2f887..0000000000000 --- a/src/setup_node_env/heap_snapshot.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -var getopts = require('getopts'); -var path = require('path'); -var v8 = require('node:v8'); -var worker = require('node:worker_threads'); - -var execOpts = getopts(process.execArgv); -var envOpts = getopts(process.env.NODE_OPTIONS ? process.env.NODE_OPTIONS.split(/\s+/) : []); -var diagnosticDir = execOpts['diagnostic-dir'] || envOpts['diagnostic-dir']; -var heapSnapshotSignal = execOpts['heapsnapshot-signal'] || envOpts['heapsnapshot-signal']; -var heapSnapshotSerial = 0; - -function getHeapSnapshotPath() { - var now = new Date(); - - var year = now.getFullYear(); - var month = String(now.getMonth() + 1).padStart(2, '0'); - var day = String(now.getDate()).padStart(2, '0'); - var hours = String(now.getHours()).padStart(2, '0'); - var minutes = String(now.getMinutes()).padStart(2, '0'); - var seconds = String(now.getSeconds()).padStart(2, '0'); - - var date = `${year}${month}${day}`; - var time = `${hours}${minutes}${seconds}`; - var pid = process.pid; - var threadId = worker.threadId; - var serial = (++heapSnapshotSerial).toString().padStart(3, '0'); - - return path.join(diagnosticDir, `Heap.${date}.${time}.${pid}.${threadId}.${serial}.heapsnapshot`); -} - -if (diagnosticDir && heapSnapshotSignal) { - process.removeAllListeners(heapSnapshotSignal); - - process.on(heapSnapshotSignal, function () { - var heapSnapshotPath = getHeapSnapshotPath(); - v8.writeHeapSnapshot(heapSnapshotPath); - }); -} diff --git a/src/setup_node_env/setup_env.js b/src/setup_node_env/setup_env.js index d3076a2c3b9cf..7b37d98011cfb 100644 --- a/src/setup_node_env/setup_env.js +++ b/src/setup_node_env/setup_env.js @@ -11,8 +11,6 @@ require('./exit_on_warning'); require('./harden'); // The following require statements MUST be executed before any others - END -// @todo Remove when migrated to Node 20 (#162696) -require('./heap_snapshot'); require('symbol-observable'); require('source-map-support').install(); require('./node_version_validator'); diff --git a/test/common/services/security/test_user.ts b/test/common/services/security/test_user.ts index bc5dbf68698bc..e8d88d81bb167 100644 --- a/test/common/services/security/test_user.ts +++ b/test/common/services/security/test_user.ts @@ -61,7 +61,10 @@ export class TestUser extends FtrService { }); if (this.browser && this.testSubjects && !options?.skipBrowserRefresh) { - if (await this.testSubjects.exists('kibanaChrome', { allowHidden: true })) { + if ( + (await this.browser.hasOpenWindow()) && + (await this.testSubjects.exists('kibanaChrome', { allowHidden: true })) + ) { await this.browser.refresh(); // accept alert if it pops up const alert = await this.browser.getAlert(); diff --git a/test/functional/apps/discover/group1/_discover_histogram.ts b/test/functional/apps/discover/group1/_discover_histogram.ts index bdaf14fca96e4..64e9b0e47dc90 100644 --- a/test/functional/apps/discover/group1/_discover_histogram.ts +++ b/test/functional/apps/discover/group1/_discover_histogram.ts @@ -33,8 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const queryBar = getService('queryBar'); - // FLAKY: https://github.com/elastic/kibana/issues/173586 - describe.skip('discover histogram', function describeIndexTests() { + describe('discover histogram', function describeIndexTests() { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.load('test/functional/fixtures/es_archiver/long_window_logstash'); @@ -44,6 +43,7 @@ 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'); }); after(async () => { @@ -66,13 +66,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should modify the time range when the histogram is brushed', async function () { await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); // this is the number of renderings of the histogram needed when new data is fetched let renderingCountInc = 1; const prevRenderingCount = await elasticChart.getVisualizationRenderingCount(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); + await queryBar.submitQuery(); await retry.waitFor('chart rendering complete', async () => { const actualCount = await elasticChart.getVisualizationRenderingCount(); const expectedCount = prevRenderingCount + renderingCountInc; @@ -108,8 +105,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should update correctly when switching data views and brushing the histogram', async () => { await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.discover.selectIndexPattern('logstash-*'); await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.discover.selectIndexPattern('long-window-logstash-*'); @@ -282,7 +277,6 @@ 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 PageObjects.timePicker.setDefaultAbsoluteRange(); // Make sure the chart is visible await testSubjects.click('unifiedHistogramChartOptionsToggle'); await testSubjects.click('unifiedHistogramChartToggle'); diff --git a/test/functional/apps/management/data_views/_data_view_create_delete.ts b/test/functional/apps/management/data_views/_data_view_create_delete.ts index 245ac88606b50..e3bc2240887ad 100644 --- a/test/functional/apps/management/data_views/_data_view_create_delete.ts +++ b/test/functional/apps/management/data_views/_data_view_create_delete.ts @@ -187,8 +187,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/173625 - describe.skip('index pattern edit', function () { + describe('index pattern edit', function () { it('should update field list', async function () { await PageObjects.settings.editIndexPattern( 'kibana_sample_data_flights', diff --git a/test/functional/apps/management/data_views/_index_pattern_filter.ts b/test/functional/apps/management/data_views/_index_pattern_filter.ts index 5c0dc5d0284f0..81ff2b450755d 100644 --- a/test/functional/apps/management/data_views/_index_pattern_filter.ts +++ b/test/functional/apps/management/data_views/_index_pattern_filter.ts @@ -24,13 +24,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); }); + after(async function () { + await kibanaServer.savedObjects.cleanStandardList(); + }); + beforeEach(async function () { await PageObjects.settings.createIndexPattern('logstash-*'); }); afterEach(async function () { await PageObjects.settings.removeIndexPattern(); - await kibanaServer.savedObjects.cleanStandardList(); }); it('should filter indexed fields by type', async function () { diff --git a/test/functional/apps/management/data_views/_runtime_fields.ts b/test/functional/apps/management/data_views/_runtime_fields.ts index d6aca3a88c925..cf0fb7f498974 100644 --- a/test/functional/apps/management/data_views/_runtime_fields.ts +++ b/test/functional/apps/management/data_views/_runtime_fields.ts @@ -61,6 +61,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should modify runtime field', async function () { await PageObjects.settings.filterField(fieldName); await testSubjects.click('editFieldFormat'); + await retry.try(async () => { + await testSubjects.existOrFail('flyoutTitle'); + }); await PageObjects.settings.setFieldType('Long'); await PageObjects.settings.setFieldScriptWithoutToggle('emit(6);'); await PageObjects.settings.toggleRow('formatRow'); diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index 5172d7d7d0ff4..cd650086e9e1a 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -177,9 +177,20 @@ export class SettingsPageObject extends FtrService { async selectTimeFieldOption(selection: string) { // open dropdown const timefield = await this.getTimeFieldNameField(); - await timefield.click(); - await this.browser.pressKeys(selection); - await this.browser.pressKeys(this.browser.keys.TAB); + const prevValue = await timefield.getAttribute('value'); + const enabled = await timefield.isEnabled(); + + if (prevValue === selection || !enabled) { + return; + } + await this.retry.waitFor('time field dropdown have the right value', async () => { + await timefield.click(); + await timefield.type(this.browser.keys.DELETE, { charByChar: true }); + await this.browser.pressKeys(selection); + await this.browser.pressKeys(this.browser.keys.TAB); + const value = await timefield.getAttribute('value'); + return value === selection; + }); } async getTimeFieldOption(selection: string) { @@ -192,7 +203,7 @@ export class SettingsPageObject extends FtrService { async setNameField(dataViewName: string) { const field = await this.getNameField(); - await field.clearValue(); + await field.clearValueWithKeyboard(); await field.type(dataViewName); } @@ -486,7 +497,7 @@ export class SettingsPageObject extends FtrService { async allowHiddenClick() { await this.testSubjects.click('toggleAdvancedSetting'); const allowHiddenField = await this.testSubjects.find('allowHiddenField'); - (await allowHiddenField.findByTagName('button')).click(); + await (await allowHiddenField.findByTagName('button')).click(); } async createIndexPattern( @@ -567,19 +578,26 @@ export class SettingsPageObject extends FtrService { throw new Error('No Data View name provided for edit'); } - this.clickEditIndexButton(); + await this.clickEditIndexButton(); await this.header.waitUntilLoadingHasFinished(); await this.retry.try(async () => { + if (dataViewName) { + await this.setNameField(dataViewName); + } await this.setIndexPatternField(indexPatternName); + await this.header.waitUntilLoadingHasFinished(); + if (timefield) { + await this.selectTimeFieldOption(timefield); + } + const indexPatternSaveBtn = await this.getSaveIndexPatternButton(); + await indexPatternSaveBtn.click(); + + const form = await this.testSubjects.findAll('indexPatternEditorForm'); + const hasValidationErrors = + form.length !== 0 && (await form[0].getAttribute('data-validation-error')) === '1'; + expect(hasValidationErrors).to.eql(false); }); - if (dataViewName) { - await this.setNameField(dataViewName); - } - if (timefield) { - await this.selectTimeFieldOption(timefield); - } - await (await this.getSaveIndexPatternButton()).click(); if (errorCheck) { await this.retry.try(async () => { @@ -653,6 +671,10 @@ export class SettingsPageObject extends FtrService { const currentName = await field.getAttribute('value'); this.log.debug(`setIndexPatternField set to ${currentName}`); expect(currentName).to.eql(indexPatternName); + await this.retry.waitFor('validating the given index pattern should be finished', async () => { + const isValidating = await field.getAttribute('data-is-validating'); + return isValidating === '0'; + }); } async getCreateIndexPatternGoToStep2Button() { diff --git a/test/functional/services/remote/remote.ts b/test/functional/services/remote/remote.ts index b3038130b0187..6ee7b6e8d9085 100644 --- a/test/functional/services/remote/remote.ts +++ b/test/functional/services/remote/remote.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { NoSuchSessionError } from 'selenium-webdriver/lib/error'; +import { NoSuchSessionError, NoSuchWindowError } from 'selenium-webdriver/lib/error'; import { FtrProviderContext } from '../../ftr_provider_context'; import { initWebDriver, BrowserConfig } from './webdriver'; import { Browsers } from './browsers'; @@ -37,6 +37,10 @@ export async function RemoteProvider({ getService }: FtrProviderContext) { // Avoid duplicating NoSuchSessionError error output on each hook // https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors/InvalidSessionID log.error('WebDriver session is no longer valid'); + } else if (error instanceof NoSuchWindowError) { + // Avoid duplicating NoSuchWindowError error output on each hook + // https://developer.mozilla.org/en-US/docs/Web/WebDriver/Errors + log.error('Browser window is already closed'); } else { throw error; } diff --git a/test/scripts/checks/baseline_plugin_public_api_docs.sh b/test/scripts/checks/baseline_plugin_public_api_docs.sh deleted file mode 100755 index 72de7c0980a5f..0000000000000 --- a/test/scripts/checks/baseline_plugin_public_api_docs.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -### -### rebuild plugin api docs to ensure it's not out of date -### -echo " -- building api docs" -node --max-old-space-size=12000 scripts/build_api_docs diff --git a/test/scripts/checks/bundle_limits.sh b/test/scripts/checks/bundle_limits.sh deleted file mode 100755 index 10d9d9343fda4..0000000000000 --- a/test/scripts/checks/bundle_limits.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/build_kibana_platform_plugins --validate-limits diff --git a/test/scripts/checks/commit/commit.sh b/test/scripts/checks/commit/commit.sh deleted file mode 100755 index 180f6dfb56e29..0000000000000 --- a/test/scripts/checks/commit/commit.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -# Runs pre-commit hook script for the files touched in the last commit. -# That way we can ensure a set of quick commit checks earlier as we removed -# the pre-commit hook installation by default. -# If files are more than 200 we will skip it and just use -# the further ci steps that already check linting and file casing for the entire repo. -"$(dirname "${0}")/commit_check_runner.sh" diff --git a/test/scripts/checks/commit/commit_check_runner.sh b/test/scripts/checks/commit/commit_check_runner.sh deleted file mode 100755 index 65ca9a6ecef06..0000000000000 --- a/test/scripts/checks/commit/commit_check_runner.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -run_quick_commit_checks() { - echo "!!!!!!!! ATTENTION !!!!!!!! -That check is intended to provide earlier CI feedback after we remove the automatic install for the local pre-commit hook. -If you want, you can still manually install the pre-commit hook locally by running 'node scripts/register_git_hook locally' -!!!!!!!!!!!!!!!!!!!!!!!!!!! -" - - node scripts/precommit_hook.js --ref HEAD~1..HEAD --max-files 200 -} - -run_quick_commit_checks diff --git a/test/scripts/checks/file_casing.sh b/test/scripts/checks/file_casing.sh deleted file mode 100755 index 1a2240d0562ff..0000000000000 --- a/test/scripts/checks/file_casing.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/check_file_casing --quiet diff --git a/test/scripts/checks/i18n.sh b/test/scripts/checks/i18n.sh deleted file mode 100755 index 468b8394081e1..0000000000000 --- a/test/scripts/checks/i18n.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/i18n_check --ignore-missing diff --git a/test/scripts/checks/jest_configs.sh b/test/scripts/checks/jest_configs.sh deleted file mode 100755 index cebcbc63bb396..0000000000000 --- a/test/scripts/checks/jest_configs.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/check_jest_configs diff --git a/test/scripts/checks/licenses.sh b/test/scripts/checks/licenses.sh deleted file mode 100755 index 8a19cdc2fc126..0000000000000 --- a/test/scripts/checks/licenses.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/check_licenses --dev diff --git a/test/scripts/checks/plugin_list_docs.sh b/test/scripts/checks/plugin_list_docs.sh deleted file mode 100644 index b0f49d7845841..0000000000000 --- a/test/scripts/checks/plugin_list_docs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -### -### rebuild plugin list to ensure it's not out of date -### -echo " -- building plugin list docs" -node scripts/build_plugin_list_docs - -### -### verify no git modifications -### -GIT_CHANGES="$(git ls-files --modified)" -if [ "$GIT_CHANGES" ]; then - echo -e "\n${RED}ERROR: 'node scripts/build_plugin_list_docs' caused changes to the following files:${C_RESET}\n" - echo -e "$GIT_CHANGES\n" - exit 1 -fi diff --git a/test/scripts/checks/telemetry.sh b/test/scripts/checks/telemetry.sh deleted file mode 100755 index 09b2305f9d607..0000000000000 --- a/test/scripts/checks/telemetry.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/telemetry_check diff --git a/test/scripts/checks/test_hardening.sh b/test/scripts/checks/test_hardening.sh deleted file mode 100755 index 332edb0fcde68..0000000000000 --- a/test/scripts/checks/test_hardening.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/test_hardening diff --git a/test/scripts/checks/test_projects.sh b/test/scripts/checks/test_projects.sh deleted file mode 100755 index 6a1a8b958c4aa..0000000000000 --- a/test/scripts/checks/test_projects.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -yarn kbn run-in-packages test diff --git a/test/scripts/checks/ts_projects.sh b/test/scripts/checks/ts_projects.sh deleted file mode 100755 index 9963d10792f94..0000000000000 --- a/test/scripts/checks/ts_projects.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/check_ts_projects diff --git a/test/scripts/checks/type_check_plugin_public_api_docs.sh b/test/scripts/checks/type_check_plugin_public_api_docs.sh deleted file mode 100755 index b5fed38e192d2..0000000000000 --- a/test/scripts/checks/type_check_plugin_public_api_docs.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/build_ts_refs \ - --clean \ - --no-cache \ - --force - -node scripts/type_check - -echo " -- building api docs" -node --max-old-space-size=12000 scripts/build_api_docs diff --git a/test/scripts/checks/verify_notice.sh b/test/scripts/checks/verify_notice.sh deleted file mode 100755 index 55dd1c04aaf8a..0000000000000 --- a/test/scripts/checks/verify_notice.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/notice --validate diff --git a/test/scripts/jenkins_accessibility.sh b/test/scripts/jenkins_accessibility.sh deleted file mode 100755 index fa582cf2d97d0..0000000000000 --- a/test/scripts/jenkins_accessibility.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/accessibility/config.ts; diff --git a/test/scripts/jenkins_apm_cypress.sh b/test/scripts/jenkins_apm_cypress.sh deleted file mode 100755 index 2ccd7d760fba5..0000000000000 --- a/test/scripts/jenkins_apm_cypress.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running APM cypress tests" -cd "$XPACK_DIR" - -node plugins/apm/scripts/test/e2e.js - -echo "" -echo "" diff --git a/test/scripts/jenkins_build_kbn_sample_panel_action.sh b/test/scripts/jenkins_build_kbn_sample_panel_action.sh deleted file mode 100755 index 67c3da246ed7c..0000000000000 --- a/test/scripts/jenkins_build_kbn_sample_panel_action.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -cd test/plugin_functional/plugins/kbn_sample_panel_action; -if [[ ! -d "target" ]]; then - yarn build; -fi -cd -; diff --git a/test/scripts/jenkins_build_kibana.sh b/test/scripts/jenkins_build_kibana.sh deleted file mode 100755 index 28d4feef3a4b9..0000000000000 --- a/test/scripts/jenkins_build_kibana.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash - -cd "$KIBANA_DIR" -source src/dev/ci_setup/setup_env.sh - -if [[ ! "$TASK_QUEUE_PROCESS_ID" ]]; then - ./test/scripts/jenkins_build_plugins.sh -fi - -# doesn't persist, also set in kibanaPipeline.groovy -export KBN_NP_PLUGINS_BUILT=true - -# Do not build kibana for code coverage run -if [[ -z "$CODE_COVERAGE" ]] ; then - echo " -> building and extracting default Kibana distributable for use in functional tests" - node scripts/build --debug - - echo " -> shipping metrics from build to ci-stats" - node scripts/ship_ci_stats \ - --metrics target/optimizer_bundle_metrics.json \ - --metrics build/kibana/node_modules/@kbn/ui-shared-deps-src/shared_built_assets/metrics.json - - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" - installDir="$KIBANA_DIR/install/kibana" - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - cp "$linuxBuild" "$WORKSPACE/kibana-default.tar.gz" - - mkdir -p "$WORKSPACE/kibana-build" - cp -pR install/kibana/. $WORKSPACE/kibana-build/ - - echo " -> Archive built plugins" - shopt -s globstar - tar -zcf \ - "$WORKSPACE/kibana-default-plugins.tar.gz" \ - x-pack/plugins/**/target/public \ - x-pack/test/**/target/public \ - examples/**/target/public \ - x-pack/examples/**/target/public \ - test/**/target/public - shopt -u globstar -fi diff --git a/test/scripts/jenkins_build_load_testing.sh b/test/scripts/jenkins_build_load_testing.sh deleted file mode 100755 index f64caa3c02cab..0000000000000 --- a/test/scripts/jenkins_build_load_testing.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env bash - -while getopts s: flag -do - case "${flag}" in - s) simulations=${OPTARG};; - esac -done -echo "Simulation classes: $simulations"; - -cd "$KIBANA_DIR" -source src/dev/ci_setup/setup_env.sh - -if [[ ! "$TASK_QUEUE_PROCESS_ID" ]]; then - ./test/scripts/jenkins_xpack_build_plugins.sh -fi - -echo " -> Configure Metricbeat monitoring" -# Configure Metricbeat monitoring for Kibana and ElasticSearch, ingest monitoring data into Kibana Stats cluster -# Getting the URL -TOP="$(curl -L http://snapshots.elastic.co/latest/master.json)" -MB_BUILD=$(echo $TOP | sed 's/.*"version" : "\(.*\)", "build_id.*/\1/') -echo $MB_BUILD -MB_BUILD_ID=$(echo $TOP | sed 's/.*"build_id" : "\(.*\)", "manifest_url.*/\1/') - -URL=https://snapshots.elastic.co/${MB_BUILD_ID}/downloads/beats/metricbeat/metricbeat-${MB_BUILD}-linux-x86_64.tar.gz -URL=https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.11.0-linux-x86_64.tar.gz -echo $URL -# Downloading the Metricbeat package -while [ 1 ]; do - wget -q --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0 --continue --no-check-certificate --tries=3 $URL - if [ $? = 0 ]; then break; fi; # check return value, break if successful (0) - sleep 1s; -done; - -# Install Metricbeat -echo "untar metricbeat and config" -#tar -xzf metricbeat-${MB_BUILD}-linux-x86_64.tar.gz -tar -xzf metricbeat-7.11.0-linux-x86_64.tar.gz -#mv metricbeat-${MB_BUILD}-linux-x86_64 metricbeat-install -mv metricbeat-7.11.0-linux-x86_64 metricbeat-install - -# Configure Metricbeat -echo " -> Changing metricbeat config" -pushd ../kibana-load-testing -cp cfg/metricbeat/elasticsearch-xpack.yml $KIBANA_DIR/metricbeat-install/modules.d/elasticsearch-xpack.yml -cp cfg/metricbeat/kibana-xpack.yml $KIBANA_DIR/metricbeat-install/modules.d/kibana-xpack.yml -echo "fields.build: ${BUILD_ID}" >> cfg/metricbeat/metricbeat.yml -echo "path.config: ${KIBANA_DIR}/metricbeat-install" >> cfg/metricbeat/metricbeat.yml -echo "cloud.auth: ${USER_FROM_VAULT}:${PASS_FROM_VAULT}" >> cfg/metricbeat/metricbeat.yml -cp cfg/metricbeat/metricbeat.yml $KIBANA_DIR/metricbeat-install/metricbeat.yml -# Disable system monitoring: enabled for now to have more data -#mv $KIBANA_DIR/metricbeat-install/modules.d/system.yml $KIBANA_DIR/metricbeat-install/modules.d/system.yml.disabled -echo " -> Building puppeteer project" -cd puppeteer -yarn install && yarn build -popd - -# doesn't persist, also set in kibanaPipeline.groovy -export KBN_NP_PLUGINS_BUILT=true - -echo " -> Building and extracting default Kibana distributable for use in functional tests" -cd "$KIBANA_DIR" -node scripts/build --debug -linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" -installDir="$KIBANA_DIR/install/kibana" -mkdir -p "$installDir" -tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - -mkdir -p "$WORKSPACE/kibana-build" -cp -pR install/kibana/. $WORKSPACE/kibana-build/ - -echo " -> Setup env for tests" -source test/scripts/jenkins_test_setup_xpack.sh - -# Start Metricbeat -echo " -> Starting metricbeat" -pushd $KIBANA_DIR/metricbeat-install -nohup ./metricbeat > metricbeat.log 2>&1 & -popd - -echo " -> Running gatling load testing" -export GATLING_SIMULATIONS="$simulations" -node scripts/functional_tests \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/load/config.ts; - - -echo " -> Simulations run is finished" - -# Show output of Metricbeat. Disabled. Enable for debug purposes -#echo "output of metricbeat.log" -#cat $KIBANA_DIR/metricbeat-install/metricbeat.log diff --git a/test/scripts/jenkins_build_plugins.sh b/test/scripts/jenkins_build_plugins.sh deleted file mode 100755 index dd1715065e799..0000000000000 --- a/test/scripts/jenkins_build_plugins.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -echo " -> building kibana platform plugins" -node scripts/build_kibana_platform_plugins \ - --scan-dir "$KIBANA_DIR/test/plugin_functional/plugins" \ - --scan-dir "$KIBANA_DIR/test/health_gateway/plugins" \ - --scan-dir "$KIBANA_DIR/test/interpreter_functional/plugins" \ - --scan-dir "$KIBANA_DIR/test/common/plugins" \ - --scan-dir "$KIBANA_DIR/examples" \ - --scan-dir "$KIBANA_DIR/test/plugin_functional/plugins" \ - --scan-dir "$KIBANA_DIR/test/common/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_functional/plugins" \ - --scan-dir "$XPACK_DIR/test/functional_with_es_ssl/plugins" \ - --scan-dir "$XPACK_DIR/test/alerting_api_integration/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_api_integration/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_api_perf/plugins" \ - --scan-dir "$XPACK_DIR/test/licensing_plugin/plugins" \ - --scan-dir "$XPACK_DIR/test/usage_collection/plugins" \ - --scan-dir "$XPACK_DIR/test/security_functional/fixtures/common" \ - --scan-dir "$XPACK_DIR/examples" \ - --workers 12 diff --git a/test/scripts/jenkins_ci_group.sh b/test/scripts/jenkins_ci_group.sh deleted file mode 100755 index dde224823789b..0000000000000 --- a/test/scripts/jenkins_ci_group.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -if [[ -z "$CODE_COVERAGE" ]]; then - echo " -> Running functional and api tests" - - node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --include-tag "ciGroup$CI_GROUP" - - if [[ ! "$TASK_QUEUE_PROCESS_ID" && "$CI_GROUP" == "1" ]]; then - source test/scripts/jenkins_build_kbn_sample_panel_action.sh - ./test/scripts/test/plugin_functional.sh - ./test/scripts/test/health_gateway.sh - ./test/scripts/test/interpreter_functional.sh - fi -else - echo " -> Running Functional tests with code coverage" - export NODE_OPTIONS=--max_old_space_size=8192 - - echo " -> making hard link clones" - cd .. - cp -RlP kibana "kibana${CI_GROUP}" - cd "kibana${CI_GROUP}" - - echo " -> running tests from the clone folder" - node scripts/functional_tests --debug --include-tag "ciGroup$CI_GROUP" --exclude-tag "skipCoverage" || true; - - echo " -> moving junit output, silently fail in case of no report" - mkdir -p ../kibana/target/junit - mv target/junit/* ../kibana/target/junit/ || echo "copying junit failed" - - echo " -> copying screenshots and html for failures" - cp -r test/functional/screenshots/* ../kibana/test/functional/screenshots/ || echo "copying screenshots failed" - cp -r test/functional/failure_debug ../kibana/test/functional/ || echo "copying html failed" -fi diff --git a/test/scripts/jenkins_cloud.sh b/test/scripts/jenkins_cloud.sh deleted file mode 100755 index 57798a9afcac1..0000000000000 --- a/test/scripts/jenkins_cloud.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -# This script runs kibana tests compatible with cloud. -# -# The cloud instance setup is done in the elastic/elastic-stack-testing framework, -# where the following environment variables are set pointing to the cloud instance. -# -# export TEST_KIBANA_HOSTNAME -# export TEST_KIBANA_PROTOCOL= -# export TEST_KIBANA_PORT= -# export TEST_KIBANA_USER= -# export TEST_KIBANA_PASS= -# -# export TEST_ES_HOSTNAME= -# export TEST_ES_PROTOCOL= -# export TEST_ES_PORT= -# export TEST_ES_USER= -# export TEST_ES_PASS= -# - -set -e - -source "$(dirname $0)/../../src/dev/ci_setup/setup.sh" - -export TEST_BROWSER_HEADLESS=1 -node scripts/functional_test_runner --debug --exclude-tag skipCloud $@ diff --git a/test/scripts/jenkins_firefox_smoke.sh b/test/scripts/jenkins_firefox_smoke.sh deleted file mode 100755 index 4566b11822bf5..0000000000000 --- a/test/scripts/jenkins_firefox_smoke.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --bail --debug \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --include-tag "includeFirefox" \ - --config test/functional/config.firefox.js; diff --git a/test/scripts/jenkins_fleet_cypress.sh b/test/scripts/jenkins_fleet_cypress.sh deleted file mode 100755 index e43259c1c1c3f..0000000000000 --- a/test/scripts/jenkins_fleet_cypress.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running fleet cypress tests" -cd "$XPACK_DIR" - -cd x-pack/plugins/fleet -yarn --cwd x-pack/plugins/fleet cypress:run - -echo "" -echo "" diff --git a/test/scripts/jenkins_osquery_cypress.sh b/test/scripts/jenkins_osquery_cypress.sh deleted file mode 100755 index b4a9420ff9440..0000000000000 --- a/test/scripts/jenkins_osquery_cypress.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running osquery cypress tests" -cd "$XPACK_DIR" - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/osquery_cypress/cli_config.ts - -echo "" -echo "" diff --git a/test/scripts/jenkins_plugin_functional.sh b/test/scripts/jenkins_plugin_functional.sh deleted file mode 100755 index 984e648bf6b84..0000000000000 --- a/test/scripts/jenkins_plugin_functional.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -cd test/plugin_functional/plugins/kbn_sample_panel_action; -if [[ ! -d "target" ]]; then - yarn build; -fi -cd -; - -pwd - -./test/scripts/test/plugin_functional.sh -./test/scripts/test/health_gateway.sh -./test/scripts/test/interpreter_functional.sh diff --git a/test/scripts/jenkins_runbld_junit.sh b/test/scripts/jenkins_runbld_junit.sh deleted file mode 100755 index bcb6accd5f8cd..0000000000000 --- a/test/scripts/jenkins_runbld_junit.sh +++ /dev/null @@ -1,2 +0,0 @@ -# This file just exists to give runbld something to invoke before processing junit reports -echo 'Processing junit reports with runbld...' diff --git a/test/scripts/jenkins_security_solution_cypress_chrome.sh b/test/scripts/jenkins_security_solution_cypress_chrome.sh deleted file mode 100755 index 0605a319896ce..0000000000000 --- a/test/scripts/jenkins_security_solution_cypress_chrome.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running security solution cypress tests" -cd "$XPACK_DIR" - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/security_solution_cypress/cli_config.ts - -echo "" -echo "" diff --git a/test/scripts/jenkins_setup.sh b/test/scripts/jenkins_setup.sh deleted file mode 100755 index 8c8492d10e602..0000000000000 --- a/test/scripts/jenkins_setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/load_env_keys.sh -source src/dev/ci_setup/extract_bootstrap_cache.sh -source src/dev/ci_setup/setup.sh -source src/dev/ci_setup/checkout_sibling_es.sh \ No newline at end of file diff --git a/test/scripts/jenkins_setup_parallel_workspace.sh b/test/scripts/jenkins_setup_parallel_workspace.sh deleted file mode 100755 index 5274d05572e71..0000000000000 --- a/test/scripts/jenkins_setup_parallel_workspace.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -set -e - -CURRENT_DIR=$(pwd) - -# Copy everything except node_modules into the current workspace -rsync -a ${WORKSPACE}/kibana/* . --exclude node_modules -rsync -a ${WORKSPACE}/kibana/.??* . - -# Symlink all non-root, non-fixture node_modules into our new workspace -cd ${WORKSPACE}/kibana -find . -type d -name node_modules -not -path '*__fixtures__*' -not -path './node_modules*' -prune -print0 | xargs -0I % ln -s "${WORKSPACE}/kibana/%" "${CURRENT_DIR}/%" -find . -type d -wholename '*__fixtures__*node_modules' -not -path './node_modules*' -prune -print0 | xargs -0I % cp -R "${WORKSPACE}/kibana/%" "${CURRENT_DIR}/%" -cd "${CURRENT_DIR}" - -# Symlink all of the individual root-level node_modules into the node_modules/ directory -mkdir -p node_modules -ln -s ${WORKSPACE}/kibana/node_modules/* node_modules/ -ln -s ${WORKSPACE}/kibana/node_modules/.??* node_modules/ - -# Copy a few node_modules instead of symlinking them. They don't work correctly if symlinked -unlink node_modules/@kbn -unlink node_modules/css-loader -unlink node_modules/style-loader - -# packages/kbn-optimizer/src/integration_tests/basic_optimization.test.ts will fail if this is a symlink -unlink node_modules/val-loader - -cp -R ${WORKSPACE}/kibana/node_modules/@kbn node_modules/ -cp -R ${WORKSPACE}/kibana/node_modules/css-loader node_modules/ -cp -R ${WORKSPACE}/kibana/node_modules/style-loader node_modules/ -cp -R ${WORKSPACE}/kibana/node_modules/val-loader node_modules/ diff --git a/test/scripts/jenkins_storybook.sh b/test/scripts/jenkins_storybook.sh deleted file mode 100755 index 058c58ed922eb..0000000000000 --- a/test/scripts/jenkins_storybook.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -cd "$KIBANA_DIR" - -yarn storybook --site apm -yarn storybook --site canvas -yarn storybook --site cell_actions -yarn storybook --site ci_composite -yarn storybook --site content_management -yarn storybook --site custom_integrations -yarn storybook --site dashboard -yarn storybook --site dashboard_enhanced -yarn storybook --site data -yarn storybook --site embeddable -yarn storybook --site expression_error -yarn storybook --site expression_image -yarn storybook --site expression_metric -yarn storybook --site expression_repeat_image -yarn storybook --site expression_reveal_image -yarn storybook --site expression_shape -yarn storybook --site expression_tagcloud -yarn storybook --site fleet -yarn storybook --site infra -yarn storybook --site kibana_react -yarn storybook --site lists -yarn storybook --site observability -yarn storybook --site presentation -yarn storybook --site security_solution -yarn storybook --site solution_side_nav -yarn storybook --site shared_ux -yarn storybook --site ui_actions_enhanced diff --git a/test/scripts/jenkins_test_setup.sh b/test/scripts/jenkins_test_setup.sh deleted file mode 100755 index 05b88aa2dd0a2..0000000000000 --- a/test/scripts/jenkins_test_setup.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -e - -function post_work() { - set +e - if [[ -z "$REMOVE_KIBANA_INSTALL_DIR" && -z "$KIBANA_INSTALL_DIR" && -d "$KIBANA_INSTALL_DIR" ]]; then - rm -rf "$REMOVE_KIBANA_INSTALL_DIR" - fi -} - -trap 'post_work' EXIT - -export TEST_BROWSER_HEADLESS=1 - -source src/dev/ci_setup/setup_env.sh - -# For parallel workspaces, we should copy the .es directory from the root, because it should already have downloaded snapshots in it -# This isn't part of jenkins_setup_parallel_workspace.sh just because not all tasks require ES -if [[ ! -d .es && -d "$WORKSPACE/kibana/.es" ]]; then - cp -R $WORKSPACE/kibana/.es ./ -fi diff --git a/test/scripts/jenkins_test_setup_oss.sh b/test/scripts/jenkins_test_setup_oss.sh deleted file mode 100755 index 29d396667c465..0000000000000 --- a/test/scripts/jenkins_test_setup_oss.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$CODE_COVERAGE" ]]; then - destDir="$WORKSPACE/kibana-build-${TASK_QUEUE_PROCESS_ID:-$CI_PARALLEL_PROCESS_NUMBER}" - - if [[ ! -d $destDir ]]; then - mkdir -p $destDir - cp -pR "$WORKSPACE/kibana-build/." $destDir/ - fi - - export KIBANA_INSTALL_DIR="$destDir" -fi diff --git a/test/scripts/jenkins_test_setup_xpack.sh b/test/scripts/jenkins_test_setup_xpack.sh deleted file mode 100755 index 31acc4f4865e2..0000000000000 --- a/test/scripts/jenkins_test_setup_xpack.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$CODE_COVERAGE" ]]; then - destDir="$WORKSPACE/kibana-build-${TASK_QUEUE_PROCESS_ID:-$CI_PARALLEL_PROCESS_NUMBER}" - - if [[ ! -d $destDir ]]; then - mkdir -p $destDir - cp -pR "$WORKSPACE/kibana-build/." $destDir/ - fi - - export KIBANA_INSTALL_DIR="$(realpath $destDir)" - - cd "$XPACK_DIR" -fi diff --git a/test/scripts/jenkins_uptime_playwright.sh b/test/scripts/jenkins_uptime_playwright.sh deleted file mode 100755 index 5bea30a223cd4..0000000000000 --- a/test/scripts/jenkins_uptime_playwright.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running synthetics @elastic/synthetics tests" -cd "$XPACK_DIR" - -node plugins/synthetics/scripts/e2e.js - -echo "" -echo "" diff --git a/test/scripts/jenkins_ux_synthetics.sh b/test/scripts/jenkins_ux_synthetics.sh deleted file mode 100755 index acf2611e36b94..0000000000000 --- a/test/scripts/jenkins_ux_synthetics.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -echo " -> Running User Experience plugin @elastic/synthetics tests" -cd "$XPACK_DIR" - -node plugins/ux/scripts/e2e.js - -echo "" -echo "" diff --git a/test/scripts/jenkins_xpack_accessibility.sh b/test/scripts/jenkins_xpack_accessibility.sh deleted file mode 100755 index b1daa0ada1d50..0000000000000 --- a/test/scripts/jenkins_xpack_accessibility.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/accessibility/config.ts; diff --git a/test/scripts/jenkins_xpack_baseline.sh b/test/scripts/jenkins_xpack_baseline.sh deleted file mode 100755 index a0a98ccd5a5e7..0000000000000 --- a/test/scripts/jenkins_xpack_baseline.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh -source "$KIBANA_DIR/src/dev/ci_setup/setup_percy.sh" - -echo " -> building and extracting default Kibana distributable" -cd "$KIBANA_DIR" -node scripts/build --debug - -echo " -> shipping metrics from build to ci-stats" -node scripts/ship_ci_stats \ - --metrics target/optimizer_bundle_metrics.json \ - --metrics build/kibana/node_modules/@kbn/ui-shared-deps-src/shared_built_assets/metrics.json - -linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" -installDir="$KIBANA_DIR/install/kibana" -mkdir -p "$installDir" -tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - -mkdir -p "$WORKSPACE/kibana-build" -cp -pR install/kibana/. $WORKSPACE/kibana-build/ - -cd "$KIBANA_DIR" -source "test/scripts/jenkins_xpack_saved_objects_field_metrics.sh" diff --git a/test/scripts/jenkins_xpack_build_plugins.sh b/test/scripts/jenkins_xpack_build_plugins.sh deleted file mode 100755 index bdf6ee2455527..0000000000000 --- a/test/scripts/jenkins_xpack_build_plugins.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -echo " -> building kibana platform plugins" -node scripts/build_kibana_platform_plugins \ - --scan-dir "$KIBANA_DIR/test/plugin_functional/plugins" \ - --scan-dir "$KIBANA_DIR/test/common/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_functional/plugins" \ - --scan-dir "$XPACK_DIR/test/functional_with_es_ssl/plugins" \ - --scan-dir "$XPACK_DIR/test/alerting_api_integration/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_api_integration/plugins" \ - --scan-dir "$XPACK_DIR/test/plugin_api_perf/plugins" \ - --scan-dir "$XPACK_DIR/test/licensing_plugin/plugins" \ - --scan-dir "$XPACK_DIR/test/usage_collection/plugins" \ - --scan-dir "$XPACK_DIR/test/security_functional/fixtures/common" \ - --scan-dir "$KIBANA_DIR/examples" \ - --scan-dir "$XPACK_DIR/examples" \ - --workers 12 diff --git a/test/scripts/jenkins_xpack_ci_group.sh b/test/scripts/jenkins_xpack_ci_group.sh deleted file mode 100755 index 59bcf45a2089f..0000000000000 --- a/test/scripts/jenkins_xpack_ci_group.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -if [[ -z "$CODE_COVERAGE" ]]; then - echo " -> Running functional and api tests" - - node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --include-tag "ciGroup$CI_GROUP" - - echo "" - echo "" -else - echo " -> Running X-Pack functional tests with code coverage" - export NODE_OPTIONS=--max_old_space_size=8192 - - echo " -> making hard link clones" - cd .. - cp -RlP kibana "kibana${CI_GROUP}" - cd "kibana${CI_GROUP}/x-pack" - - echo " -> running tests from the clone folder" - node scripts/functional_tests --debug --include-tag "ciGroup$CI_GROUP" --exclude-tag "skipCoverage" || true; - - echo " -> moving junit output, silently fail in case of no report" - mkdir -p ../../kibana/target/junit - mv ../target/junit/* ../../kibana/target/junit/ || echo "copying junit failed" - - echo " -> copying screenshots and html for failures" - cp -r test/functional/screenshots/* ../../kibana/x-pack/test/functional/screenshots/ || echo "copying screenshots failed" - cp -r test/functional/failure_debug ../../kibana/x-pack/test/functional/ || echo "copying html failed" -fi diff --git a/test/scripts/jenkins_xpack_firefox_smoke.sh b/test/scripts/jenkins_xpack_firefox_smoke.sh deleted file mode 100755 index de19d3867520d..0000000000000 --- a/test/scripts/jenkins_xpack_firefox_smoke.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --include-tag "includeFirefox" \ - --config test/functional/config.firefox.js \ - --config test/functional_embedded/config.firefox.ts; diff --git a/test/scripts/jenkins_xpack_saved_objects_field_metrics.sh b/test/scripts/jenkins_xpack_saved_objects_field_metrics.sh deleted file mode 100755 index fc3a7db06a43b..0000000000000 --- a/test/scripts/jenkins_xpack_saved_objects_field_metrics.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_xpack.sh - -node scripts/functional_tests \ - --debug --bail \ - --kibana-install-dir "$KIBANA_INSTALL_DIR" \ - --config test/saved_objects_field_count/config.ts; diff --git a/test/scripts/lint/eslint.sh b/test/scripts/lint/eslint.sh deleted file mode 100755 index 8395df85c5d30..0000000000000 --- a/test/scripts/lint/eslint.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/eslint --no-cache diff --git a/test/scripts/lint/stylelint.sh b/test/scripts/lint/stylelint.sh deleted file mode 100755 index 2f500c7e14aaa..0000000000000 --- a/test/scripts/lint/stylelint.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/stylelint diff --git a/test/scripts/test/api_integration.sh b/test/scripts/test/api_integration.sh deleted file mode 100755 index 06263c38b0728..0000000000000 --- a/test/scripts/test/api_integration.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/functional_tests \ - --config test/api_integration/config.js \ - --bail \ - --debug diff --git a/test/scripts/test/health_gateway.sh b/test/scripts/test/health_gateway.sh deleted file mode 100755 index 18a9b81b083de..0000000000000 --- a/test/scripts/test/health_gateway.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --config test/health_gateway/config.ts \ - --bail \ - --debug \ - --kibana-install-dir $KIBANA_INSTALL_DIR diff --git a/test/scripts/test/interpreter_functional.sh b/test/scripts/test/interpreter_functional.sh deleted file mode 100755 index 2a40c81c34ad0..0000000000000 --- a/test/scripts/test/interpreter_functional.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --config test/interpreter_functional/config.ts \ - --bail \ - --debug \ - --kibana-install-dir $KIBANA_INSTALL_DIR diff --git a/test/scripts/test/jest_integration.sh b/test/scripts/test/jest_integration.sh deleted file mode 100755 index 3b27ba06842be..0000000000000 --- a/test/scripts/test/jest_integration.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node --max-old-space-size=5120 scripts/jest_integration --ci diff --git a/test/scripts/test/jest_unit.sh b/test/scripts/test/jest_unit.sh deleted file mode 100755 index f368554e35760..0000000000000 --- a/test/scripts/test/jest_unit.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -source src/dev/ci_setup/setup_env.sh - -node scripts/jest --ci --maxWorkers=6 diff --git a/test/scripts/test/plugin_functional.sh b/test/scripts/test/plugin_functional.sh deleted file mode 100755 index 115ddb81d3e45..0000000000000 --- a/test/scripts/test/plugin_functional.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --config test/plugin_functional/config.ts \ - --bail \ - --debug diff --git a/test/scripts/test/server_integration.sh b/test/scripts/test/server_integration.sh deleted file mode 100755 index fa4c4c6ce2c35..0000000000000 --- a/test/scripts/test/server_integration.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -source test/scripts/jenkins_test_setup_oss.sh - -node scripts/functional_tests \ - --config test/server_integration/http/ssl/config.js \ - --config test/server_integration/http/ssl_redirect/config.js \ - --config test/server_integration/http/platform/config.ts \ - --config test/server_integration/http/ssl_with_p12/config.js \ - --config test/server_integration/http/ssl_with_p12_intermediate/config.js \ - --bail \ - --debug \ - --kibana-install-dir $KIBANA_INSTALL_DIR - -# Tests that must be run against source in order to build test plugins -node scripts/functional_tests \ - --config test/server_integration/http/platform/config.status.ts \ - --bail \ - --debug diff --git a/tsconfig.base.json b/tsconfig.base.json index 178f70c927e28..d241aace37840 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -966,6 +966,8 @@ "@kbn/language-documentation-popover/*": ["packages/kbn-language-documentation-popover/*"], "@kbn/lens-embeddable-utils": ["packages/kbn-lens-embeddable-utils"], "@kbn/lens-embeddable-utils/*": ["packages/kbn-lens-embeddable-utils/*"], + "@kbn/lens-formula-docs": ["packages/kbn-lens-formula-docs"], + "@kbn/lens-formula-docs/*": ["packages/kbn-lens-formula-docs/*"], "@kbn/lens-plugin": ["x-pack/plugins/lens"], "@kbn/lens-plugin/*": ["x-pack/plugins/lens/*"], "@kbn/license-api-guard-plugin": ["x-pack/plugins/license_api_guard"], diff --git a/vars/agentInfo.groovy b/vars/agentInfo.groovy deleted file mode 100644 index 166a86c169261..0000000000000 --- a/vars/agentInfo.groovy +++ /dev/null @@ -1,40 +0,0 @@ -def print() { - catchError(catchInterruptions: false, buildResult: null) { - def startTime = sh(script: "date -d '-3 minutes' -Iseconds | sed s/+/%2B/", returnStdout: true).trim() - def endTime = sh(script: "date -d '+1 hour 30 minutes' -Iseconds | sed s/+/%2B/", returnStdout: true).trim() - - def resourcesUrl = - ( - "https://infra-stats.elastic.co/app/kibana#/visualize/edit/8bd92360-1b92-11ea-b719-aba04518cc34" + - "?_g=(time:(from:'${startTime}',to:'${endTime}'))" + - "&_a=(query:'host.name:${env.NODE_NAME}')" - ) - .replaceAll("'", '%27') // Need to escape ' because of the shell echo below, but can't really replace "'" with "\'" because of groovy sandbox - .replaceAll(/\)$/, '%29') // This is just here because the URL parsing in the Jenkins console doesn't work right - - def logsStartTime = sh(script: "date -d '-3 minutes' +%s", returnStdout: true).trim() - def logsUrl = - ( - "https://infra-stats.elastic.co/app/infra#/logs" + - "?_g=()&flyoutOptions=(flyoutId:!n,flyoutVisibility:hidden,surroundingLogsId:!n)" + - "&logFilter=(expression:'host.name:${env.NODE_NAME}',kind:kuery)" + - "&logPosition=(position:(time:${logsStartTime}000),streamLive:!f)" - ) - .replaceAll("'", '%27') - .replaceAll('\\)', '%29') - - sh script: """ - set +x - echo 'Resource Graph:' - echo '${resourcesUrl}' - echo '' - echo 'Agent Logs:' - echo '${logsUrl}' - echo '' - echo 'SSH Command:' - echo "ssh -F ssh_config \$(hostname --ip-address)" - """, label: "Worker/Agent/Node debug links" - } -} - -return this diff --git a/vars/buildState.groovy b/vars/buildState.groovy deleted file mode 100644 index 365705661350c..0000000000000 --- a/vars/buildState.groovy +++ /dev/null @@ -1,30 +0,0 @@ -import groovy.transform.Field - -public static @Field JENKINS_BUILD_STATE = [:] - -def add(key, value) { - if (!buildState.JENKINS_BUILD_STATE.containsKey(key)) { - buildState.JENKINS_BUILD_STATE[key] = value - return true - } - - return false -} - -def set(key, value) { - buildState.JENKINS_BUILD_STATE[key] = value -} - -def get(key) { - return buildState.JENKINS_BUILD_STATE[key] -} - -def has(key) { - return buildState.JENKINS_BUILD_STATE.containsKey(key) -} - -def get() { - return buildState.JENKINS_BUILD_STATE -} - -return this diff --git a/vars/catchErrors.groovy b/vars/catchErrors.groovy deleted file mode 100644 index 2a1b55d832606..0000000000000 --- a/vars/catchErrors.groovy +++ /dev/null @@ -1,15 +0,0 @@ -// Basically, this is a shortcut for catchError(catchInterruptions: false) {} -// By default, catchError will swallow aborts/timeouts, which we almost never want -// Also, by wrapping it in an additional try/catch, we cut down on spam in Pipeline Steps -def call(Map params = [:], Closure closure) { - try { - closure() - } catch (ex) { - params.catchInterruptions = false - catchError(params) { - throw ex - } - } -} - -return this diff --git a/vars/esSnapshots.groovy b/vars/esSnapshots.groovy deleted file mode 100644 index 884fbcdb17aeb..0000000000000 --- a/vars/esSnapshots.groovy +++ /dev/null @@ -1,50 +0,0 @@ -def promote(snapshotVersion, snapshotId) { - def snapshotDestination = "${snapshotVersion}/archives/${snapshotId}" - def MANIFEST_URL = "https://storage.googleapis.com/kibana-ci-es-snapshots-daily/${snapshotDestination}/manifest.json" - - dir('verified-manifest') { - def verifiedSnapshotFilename = 'manifest-latest-verified.json' - - sh """ - curl -O '${MANIFEST_URL}' - mv manifest.json ${verifiedSnapshotFilename} - """ - - googleStorageUpload( - credentialsId: 'kibana-ci-gcs-plugin', - bucket: "gs://kibana-ci-es-snapshots-daily/${snapshotVersion}", - pattern: verifiedSnapshotFilename, - sharedPublicly: false, - showInline: false, - ) - } - - // This would probably be more efficient if we could just copy using gsutil and specifying buckets for src and dest - // But we don't currently have access to the GCS credentials in a way that can be consumed easily from here... - dir('transfer-to-permanent') { - googleStorageDownload( - credentialsId: 'kibana-ci-gcs-plugin', - bucketUri: "gs://kibana-ci-es-snapshots-daily/${snapshotDestination}/*", - localDirectory: '.', - pathPrefix: snapshotDestination, - ) - - def manifestJson = readFile file: 'manifest.json' - writeFile( - file: 'manifest.json', - text: manifestJson.replace("kibana-ci-es-snapshots-daily/${snapshotDestination}", "kibana-ci-es-snapshots-permanent/${snapshotVersion}") - ) - - // Ideally we would have some delete logic here before uploading, - // But we don't currently have access to the GCS credentials in a way that can be consumed easily from here... - googleStorageUpload( - credentialsId: 'kibana-ci-gcs-plugin', - bucket: "gs://kibana-ci-es-snapshots-permanent/${snapshotVersion}", - pattern: '*.*', - sharedPublicly: false, - showInline: false, - ) - } -} - -return this diff --git a/vars/getCheckoutInfo.groovy b/vars/getCheckoutInfo.groovy deleted file mode 100644 index f9d797f8127c7..0000000000000 --- a/vars/getCheckoutInfo.groovy +++ /dev/null @@ -1,50 +0,0 @@ -def call(branchOverride) { - def repoInfo = [ - branch: branchOverride ?: env.ghprbSourceBranch, - targetBranch: env.ghprbTargetBranch, - targetsTrackedBranch: true - ] - - if (repoInfo.branch == null) { - if (!(params.branch_specifier instanceof String)) { - throw new Exception( - "Unable to determine branch automatically, either pass a branch name to getCheckoutInfo() or use the branch_specifier param." - ) - } - - // strip prefix from the branch specifier to make it consistent with ghprbSourceBranch - repoInfo.branch = params.branch_specifier.replaceFirst(/^(refs\/heads\/|origin\/)/, "") - } - - repoInfo.commit = sh( - script: "git rev-parse HEAD", - label: "determining checked out sha", - returnStdout: true - ).trim() - - if (repoInfo.targetBranch) { - // Try to clone fetch from Github up to 8 times, waiting 15 secs between attempts - retryWithDelay(8, 15) { - sh( - script: "git fetch origin ${repoInfo.targetBranch}", - label: "fetch latest from '${repoInfo.targetBranch}' at origin" - ) - } - - repoInfo.mergeBase = sh( - script: "git merge-base HEAD FETCH_HEAD", - label: "determining merge point with '${repoInfo.targetBranch}' at origin", - returnStdout: true - ).trim() - - def pkgJson = readFile("package.json") - def releaseBranch = toJSON(pkgJson).branch - repoInfo.targetsTrackedBranch = releaseBranch == repoInfo.targetBranch - } - - print "repoInfo: ${repoInfo}" - - return repoInfo -} - -return this diff --git a/vars/githubCommitStatus.groovy b/vars/githubCommitStatus.groovy deleted file mode 100644 index 175dbe0c90542..0000000000000 --- a/vars/githubCommitStatus.groovy +++ /dev/null @@ -1,57 +0,0 @@ -def defaultCommit() { - if (buildState.has('checkoutInfo')) { - return buildState.get('checkoutInfo').commit - } -} - -def onStart(commit = defaultCommit(), context = 'kibana-ci') { - catchError { - if (githubPr.isPr() || !commit) { - return - } - - create(commit, 'pending', 'Build started.', context) - } -} - -def onFinish(commit = defaultCommit(), context = 'kibana-ci') { - catchError { - if (githubPr.isPr() || !commit) { - return - } - - def status = buildUtils.getBuildStatus() - - if (status == 'SUCCESS' || status == 'UNSTABLE') { - create(commit, 'success', 'Build completed successfully.', context) - } else if(status == 'ABORTED') { - create(commit, 'error', 'Build aborted or timed out.', context) - } else { - create(commit, 'error', 'Build failed.', context) - } - } -} - -def trackBuild(commit, context, Closure closure) { - onStart(commit, context) - catchError { - closure() - } - onFinish(commit, context) -} - -// state: error|failure|pending|success -def create(sha, state, description, context, targetUrl = null) { - targetUrl = targetUrl ?: env.BUILD_URL - - withGithubCredentials { - return githubApi.post("repos/elastic/kibana/statuses/${sha}", [ - state: state, - description: description, - context: context, - target_url: targetUrl.toString() - ]) - } -} - -return this diff --git a/vars/githubPr.groovy b/vars/githubPr.groovy deleted file mode 100644 index 594d54f2c5b5e..0000000000000 --- a/vars/githubPr.groovy +++ /dev/null @@ -1,369 +0,0 @@ -/** - Wraps the main/important part of a job, executes it, and then publishes a comment to GitHub with the status. - - It will check for the existence of GHPRB env variables before doing any actual PR work, - so it can be used to wrap code that is executed in both PR and non-PR contexts. - - Inside the comment, it will hide a JSON blob containing build data (status, etc). - - Then, the next time it posts a comment, it will: - 1. Read the previous comment and parse the json - 2. Create a new comment, add a summary of up to 5 previous builds to it, and append this build's data to the hidden JSON - 3. Delete the old comment - - So, there is only ever one build status comment on a PR at any given time, the most recent one. -*/ -def withDefaultPrComments(closure) { - catchErrors { - // kibanaPipeline.notifyOnError() needs to know if comments are enabled, so lets track it with a global - // isPr() just ensures this functionality is skipped for non-PR builds - buildState.set('PR_COMMENTS_ENABLED', isPr()) - catchErrors { - closure() - } - sendComment(true) - } -} - -def sendComment(isFinal = false) { - if (!buildState.get('PR_COMMENTS_ENABLED')) { - return - } - - def status = buildUtils.getBuildStatus() - if (status == "ABORTED") { - return - } - - def lastComment = getLatestBuildComment() - def info = getLatestBuildInfo(lastComment) ?: [:] - info.builds = (info.builds ?: []).takeRight(5) // Rotate out old builds - - // If two builds are running at the same time, the first one should not post a comment after the second one - if (info.number && info.number.toInteger() > env.BUILD_NUMBER.toInteger()) { - return - } - - def shouldUpdateComment = !!info.builds.find { it.number == env.BUILD_NUMBER } - - def message = getNextCommentMessage(info, isFinal) - - if (shouldUpdateComment) { - updateComment(lastComment.id, message) - } else { - createComment(message) - - if (lastComment && lastComment.user.login == 'kibanamachine') { - deleteComment(lastComment.id) - } - } -} - -// Checks whether or not this currently executing build was triggered via a PR in the elastic/kibana repo -def isPr() { - return !!(env.ghprbPullId && env.ghprbPullLink && env.ghprbPullLink =~ /\/elastic\/kibana\//) -} - -def isTrackedBranchPr() { - return isPr() && (env.ghprbTargetBranch == 'master' || env.ghprbTargetBranch == '6.8' || env.ghprbTargetBranch =~ /[7-8]\.[x0-9]+/) -} - -def getLatestBuildComment() { - return getComments() - .reverse() - .find { (it.user.login == 'elasticmachine' || it.user.login == 'kibanamachine') && it.body =~ // - if (!matches || !matches[0]) { - return null - } - - return toJSON(matches[0][1].trim()) -} - -def getLatestBuildInfo() { - return getLatestBuildInfo(getLatestBuildComment()) -} - -def getLatestBuildInfo(comment) { - return comment ? getBuildInfoFromComment(comment.body) : null -} - -def getHistoryText(builds) { - if (!builds || builds.size() < 1) { - return "" - } - - def list = builds - .reverse() - .collect { build -> - if (build.status == "SUCCESS") { - return "* :green_heart: [Build #${build.number}](${build.url}) succeeded ${build.commit}" - } else if(build.status == "UNSTABLE") { - return "* :yellow_heart: [Build #${build.number}](${build.url}) was flaky ${build.commit}" - } else { - return "* :broken_heart: [Build #${build.number}](${build.url}) failed ${build.commit}" - } - } - .join("\n") - - return "### History\n${list}" -} - -def getTestFailuresMessage() { - def failures = testUtils.getFailures() - if (!failures) { - return "" - } - - def messages = [] - messages << "---\n\n### [Test Failures](${env.BUILD_URL}testReport)" - - failures.take(3).each { failure -> - messages << """ -

${failure.fullDisplayName} - -[Link to Jenkins](${failure.url}) -""" - - if (failure.stdOut) { - messages << "\n#### Standard Out\n```\n${failure.stdOut}\n```" - } - - if (failure.stdErr) { - messages << "\n#### Standard Error\n```\n${failure.stdErr}\n```" - } - - if (failure.stacktrace) { - messages << "\n#### Stack Trace\n```\n${failure.stacktrace}\n```" - } - - messages << "
\n\n---" - } - - if (failures.size() > 3) { - messages << "and ${failures.size() - 3} more failures, only showing the first 3." - } - - return messages.join("\n") -} - -def getBuildStatusIncludingMetrics() { - def status = buildUtils.getBuildStatus() - - if (status == 'SUCCESS' && shouldCheckCiMetricSuccess() && !ciStats.getMetricsSuccess()) { - return 'FAILURE' - } - - return status -} - -def getNextCommentMessage(previousCommentInfo = [:], isFinal = false) { - def info = previousCommentInfo ?: [:] - info.builds = previousCommentInfo.builds ?: [] - - // When we update an in-progress comment, we need to remove the old version from the history - info.builds = info.builds.findAll { it.number != env.BUILD_NUMBER } - - def messages = [] - - def status = isFinal - ? getBuildStatusIncludingMetrics() - : buildUtils.getBuildStatus() - - def storybooksUrl = buildState.get('storybooksUrl') - def storybooksMessage = storybooksUrl ? "* [Storybooks Preview](${storybooksUrl})" : "* Storybooks not built" - - if (!isFinal) { - storybooksMessage = storybooksUrl ? storybooksMessage : "* Storybooks not built yet" - - def failuresPart = status != 'SUCCESS' ? ', with failures' : '' - messages << """ - ## :hourglass_flowing_sand: Build in-progress${failuresPart} - * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) - * Commit: ${getCommitHash()} - ${storybooksMessage} - * This comment will update when the build is complete - """ - } else if (status == 'SUCCESS') { - messages << """ - ## :green_heart: Build Succeeded - * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) - * Commit: ${getCommitHash()} - ${storybooksMessage} - ${getDocsChangesLink()} - """ - } else if(status == 'UNSTABLE') { - def message = """ - ## :yellow_heart: Build succeeded, but was flaky - * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) - * Commit: ${getCommitHash()} - ${storybooksMessage} - ${getDocsChangesLink()} - """.stripIndent() - - def failures = retryable.getFlakyFailures() - if (failures && failures.size() > 0) { - def list = failures.collect { " * ${it.label}" }.join("\n") - message += "* Flaky suites:\n${list}" - } - - messages << message - } else { - messages << """ - ## :broken_heart: Build Failed - * [continuous-integration/kibana-ci/pull-request](${env.BUILD_URL}) - * Commit: ${getCommitHash()} - ${storybooksMessage} - * [Pipeline Steps](${env.BUILD_URL}flowGraphTable) (look for red circles / failed steps) - * [Interpreting CI Failures](https://www.elastic.co/guide/en/kibana/current/interpreting-ci-failures.html) - ${getDocsChangesLink()} - """ - } - - if (status != 'SUCCESS' && status != 'UNSTABLE') { - try { - def steps = getFailedSteps() - if (steps?.size() > 0) { - def list = steps.collect { "* [${it.displayName}](${it.logs})" }.join("\n") - messages << "### Failed CI Steps\n${list}" - } - } catch (ex) { - buildUtils.printStacktrace(ex) - print "Error retrieving failed pipeline steps for PR comment, will skip this section" - } - } - - messages << getTestFailuresMessage() - - catchErrors { - if (isFinal && isTrackedBranchPr()) { - messages << ciStats.getMetricsReport() - } - } - - if (info.builds && info.builds.size() > 0) { - messages << getHistoryText(info.builds) - } - - messages << "To update your PR or re-run it, just comment with:\n`@elasticmachine merge upstream`" - - catchErrors { - def assignees = getAssignees() - if (assignees) { - messages << "cc " + assignees.collect { "@${it}"}.join(" ") - } - } - - info.builds << [ - status: status, - url: env.BUILD_URL, - number: env.BUILD_NUMBER, - commit: getCommitHash() - ] - - messages << """ - - """ - - return messages - .findAll { !!it } // No blank strings - .collect { it.stripIndent().trim() } // This just allows us to indent various strings above, but leaves them un-indented in the comment - .join("\n\n") -} - -def createComment(message) { - if (!isPr()) { - error "Trying to post a GitHub PR comment on a non-PR or non-elastic PR build" - } - - withGithubCredentials { - return githubApi.post("repos/elastic/kibana/issues/${env.ghprbPullId}/comments", [ body: message ]) - } -} - -def getComments() { - withGithubCredentials { - return githubIssues.getComments(env.ghprbPullId) - } -} - -def updateComment(commentId, message) { - if (!isPr()) { - error "Trying to post a GitHub PR comment on a non-PR or non-elastic PR build" - } - - withGithubCredentials { - def path = "repos/elastic/kibana/issues/comments/${commentId}" - def json = toJSON([ body: message ]).toString() - - def resp = githubApi([ path: path ], [ method: "POST", data: json, headers: [ "X-HTTP-Method-Override": "PATCH" ] ]) - return toJSON(resp) - } -} - -def deleteComment(commentId) { - withGithubCredentials { - def path = "repos/elastic/kibana/issues/comments/${commentId}" - return githubApi([ path: path ], [ method: "DELETE" ]) - } -} - -def getCommitHash() { - return env.ghprbActualCommit -} - -def getDocsChangesLink() { - def url = "https://kibana_${env.ghprbPullId}.docs-preview.app.elstc.co/diff" - - try { - // httpRequest throws on status codes >400 and failures - def resp = httpRequest([ method: "GET", url: url ]) - - if (resp.contains("There aren't any differences!")) { - return "" - } - - return "* [Documentation Changes](${url})" - } catch (ex) { - print "Failed to reach ${url}" - buildUtils.printStacktrace(ex) - } - - return "" -} - -def getFailedSteps() { - return jenkinsApi.getFailedSteps()?.findAll { step -> - step.displayName != 'Check out from version control' - } -} - -def shouldCheckCiMetricSuccess() { - // disable ciMetrics success check when a PR is targetting a non-tracked branch - if (buildState.has('checkoutInfo') && !buildState.get('checkoutInfo').targetsTrackedBranch) { - return false - } - - return true -} - -def getPR() { - withGithubCredentials { - def path = "repos/elastic/kibana/pulls/${env.ghprbPullId}" - return githubApi.get(path) - } -} - -def getAssignees() { - def pr = getPR() - if (!pr) { - return [] - } - - return pr.assignees.collect { it.login } -} diff --git a/vars/jenkinsApi.groovy b/vars/jenkinsApi.groovy deleted file mode 100644 index 57818593ffeb2..0000000000000 --- a/vars/jenkinsApi.groovy +++ /dev/null @@ -1,21 +0,0 @@ -def getSteps() { - def url = "${env.BUILD_URL}api/json?tree=actions[nodes[iconColor,running,displayName,id,parents]]" - def responseRaw = httpRequest([ method: "GET", url: url ]) - def response = toJSON(responseRaw) - - def graphAction = response?.actions?.find { it._class == "org.jenkinsci.plugins.workflow.job.views.FlowGraphAction" } - - return graphAction?.nodes -} - -def getFailedSteps() { - def steps = getSteps() - def failedSteps = steps?.findAll { (it.iconColor == "red" || it.iconColor == "red_anime") && it._class == "org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode" } - failedSteps.each { step -> - step.logs = "${env.BUILD_URL}execution/node/${step.id}/log".toString() - } - - return failedSteps -} - -return this diff --git a/vars/kibanaPipeline.groovy b/vars/kibanaPipeline.groovy deleted file mode 100644 index 374219d800600..0000000000000 --- a/vars/kibanaPipeline.groovy +++ /dev/null @@ -1,496 +0,0 @@ -def withPostBuildReporting(Map params, Closure closure) { - try { - closure() - } finally { - def parallelWorkspaces = [] - try { - parallelWorkspaces = getParallelWorkspaces() - } catch(ex) { - print ex - } - - if (params.runErrorReporter) { - catchErrors { - runErrorReporter([pwd()] + parallelWorkspaces) - } - } - - catchErrors { - publishJunit() - } - - catchErrors { - def parallelWorkspace = "${env.WORKSPACE}/parallel" - if (fileExists(parallelWorkspace)) { - dir(parallelWorkspace) { - def workspaceTasks = [:] - - parallelWorkspaces.each { workspaceDir -> - workspaceTasks[workspaceDir] = { - dir(workspaceDir) { - catchErrors { - runbld.junit() - } - } - } - } - - if (workspaceTasks) { - parallel(workspaceTasks) - } - } - } - } - } -} - -def getParallelWorkspaces() { - def workspaces = [] - def parallelWorkspace = "${env.WORKSPACE}/parallel" - if (fileExists(parallelWorkspace)) { - dir(parallelWorkspace) { - // findFiles only returns files if you use glob, so look for a file that should be in every valid workspace - workspaces = findFiles(glob: '*/kibana/package.json') - .collect { - // get the paths to the kibana directories for the parallel workspaces - return parallelWorkspace + '/' + it.path.tokenize('/').dropRight(1).join('/') - } - } - } - - return workspaces -} - -def notifyOnError(Closure closure) { - try { - closure() - } catch (ex) { - // If this is the first failed step, it's likely that the error hasn't propagated up far enough to mark the build as a failure - currentBuild.result = 'FAILURE' - catchErrors { - githubPr.sendComment(false) - } - catchErrors { - // an empty map is a valid config, but is falsey, so let's use .has() - if (buildState.has('SLACK_NOTIFICATION_CONFIG')) { - slackNotifications.sendFailedBuild(buildState.get('SLACK_NOTIFICATION_CONFIG')) - } - } - throw ex - } -} - -def withFunctionalTestEnv(List additionalEnvs = [], Closure closure) { - // This can go away once everything that uses the deprecated workers.parallelProcesses() is moved to task queue - def parallelId = env.TASK_QUEUE_PROCESS_ID ?: env.CI_PARALLEL_PROCESS_NUMBER - - def kibanaPort = "61${parallelId}1" - def esPort = "62${parallelId}1" - // Ports 62x2-62x9 kept open for ES nodes - def esTransportPort = "63${parallelId}1-63${parallelId}9" - def fleetPackageRegistryPort = "64${parallelId}1" - def alertingProxyPort = "64${parallelId}2" - def corsTestServerPort = "64${parallelId}3" - // needed for https://github.com/elastic/kibana/issues/107246 - def proxyTestServerPort = "64${parallelId}4" - def contextPropagationOnly = githubPr.isPr() ? "true" : "false" - - withEnv([ - "CI_GROUP=${parallelId}", - "REMOVE_KIBANA_INSTALL_DIR=1", - "CI_PARALLEL_PROCESS_NUMBER=${parallelId}", - "TEST_KIBANA_HOST=localhost", - "TEST_KIBANA_PORT=${kibanaPort}", - "TEST_KIBANA_URL=http://elastic:changeme@localhost:${kibanaPort}", - "TEST_ES_URL=http://elastic:changeme@localhost:${esPort}", - "TEST_ES_TRANSPORT_PORT=${esTransportPort}", - "TEST_CORS_SERVER_PORT=${corsTestServerPort}", - "TEST_PROXY_SERVER_PORT=${proxyTestServerPort}", - "KBN_NP_PLUGINS_BUILT=true", - "FLEET_PACKAGE_REGISTRY_PORT=${fleetPackageRegistryPort}", - "ALERTING_PROXY_PORT=${alertingProxyPort}", - "ELASTIC_APM_ACTIVE=true", - "ELASTIC_APM_CONTEXT_PROPAGATION_ONLY=${contextPropagationOnly}", - "ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1", - ] + additionalEnvs) { - closure() - } -} - -def functionalTestProcess(String name, Closure closure) { - return { - notifyOnError { - withFunctionalTestEnv(["JOB=${name}"], closure) - } - } -} - -def functionalTestProcess(String name, String script) { - return functionalTestProcess(name) { - retryable(name) { - runbld(script, "Execute ${name}") - } - } -} - -def ossCiGroupProcess(ciGroup, withDelay = false) { - return functionalTestProcess("ciGroup" + ciGroup) { - if (withDelay && !(ciGroup instanceof String) && !(ciGroup instanceof GString)) { - sleep((ciGroup-1)*30) // smooth out CPU spikes from ES startup - } - - withEnv([ - "CI_GROUP=${ciGroup}", - "JOB=kibana-ciGroup${ciGroup}", - ]) { - retryable("kibana-ciGroup${ciGroup}") { - runbld("./test/scripts/jenkins_ci_group.sh", "Execute kibana-ciGroup${ciGroup}") - } - } - } -} - -def xpackCiGroupProcess(ciGroup, withDelay = false) { - return functionalTestProcess("xpack-ciGroup" + ciGroup) { - if (withDelay && !(ciGroup instanceof String) && !(ciGroup instanceof GString)) { - sleep((ciGroup-1)*30) // smooth out CPU spikes from ES startup - } - withEnv([ - "CI_GROUP=${ciGroup}", - "JOB=xpack-kibana-ciGroup${ciGroup}", - ]) { - retryable("xpack-kibana-ciGroup${ciGroup}") { - runbld("./test/scripts/jenkins_xpack_ci_group.sh", "Execute xpack-kibana-ciGroup${ciGroup}") - } - } - } -} - -def uploadGcsArtifact(uploadPrefix, pattern) { - googleStorageUpload( - credentialsId: 'kibana-ci-gcs-plugin', - bucket: "gs://${uploadPrefix}", - pattern: pattern, - sharedPublicly: true, - showInline: true, - ) -} - -def withGcsArtifactUpload(workerName, closure) { - def uploadPrefix = "kibana-ci-artifacts/jobs/${env.JOB_NAME}/${BUILD_NUMBER}/${workerName}" - def ARTIFACT_PATTERNS = [ - 'target/junit/**/*', - 'target/kibana-*', - 'target/kibana-coverage/jest/**/*', - 'target/kibana-security-solution/**/*.png', - 'target/kibana-fleet/**/*.png', - 'target/test-metrics/*', - 'target/test-suites-ci-plan.json', - 'test/**/screenshots/diff/*.png', - 'test/**/screenshots/failure/*.png', - 'test/**/screenshots/session/*.png', - 'test/functional/failure_debug/html/*.html', - 'x-pack/test/**/screenshots/diff/*.png', - 'x-pack/test/**/screenshots/failure/*.png', - 'x-pack/test/**/screenshots/session/*.png', - 'x-pack/test/functional/failure_debug/html/*.html', - '.es/**/*.hprof' - ] - - withEnv([ - "GCS_UPLOAD_PREFIX=${uploadPrefix}" - ], { - try { - closure() - } finally { - catchErrors { - ARTIFACT_PATTERNS.each { pattern -> - uploadGcsArtifact(uploadPrefix, pattern) - } - - dir(env.WORKSPACE) { - ARTIFACT_PATTERNS.each { pattern -> - uploadGcsArtifact(uploadPrefix, "parallel/*/kibana/${pattern}") - } - } - } - } - }) -} - -def publishJunit() { - junit(testResults: 'target/junit/**/*.xml', allowEmptyResults: true, keepLongStdio: true) - - dir(env.WORKSPACE) { - junit(testResults: 'parallel/*/kibana/target/junit/**/*.xml', allowEmptyResults: true, keepLongStdio: true) - } -} - -def sendMail(Map params = [:]) { - // If the build doesn't have a result set by this point, there haven't been any errors and it can be marked as a success - // The e-mail plugin for the infra e-mail depends upon this being set - currentBuild.result = currentBuild.result ?: 'SUCCESS' - - def buildStatus = buildUtils.getBuildStatus() - if (buildStatus != 'SUCCESS' && buildStatus != 'ABORTED') { - node('flyweight') { - sendInfraMail() - sendKibanaMail(params) - } - } -} - -def sendInfraMail() { - catchErrors { - step([ - $class: 'Mailer', - notifyEveryUnstableBuild: true, - recipients: 'infra-root+build@elastic.co', - sendToIndividuals: false - ]) - } -} - -def sendKibanaMail(Map params = [:]) { - def config = [to: 'build-kibana@elastic.co'] + params - - catchErrors { - def buildStatus = buildUtils.getBuildStatus() - if(params.NOTIFY_ON_FAILURE && buildStatus != 'SUCCESS' && buildStatus != 'ABORTED') { - emailext( - config.to, - subject: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - ${buildStatus}", - body: '${SCRIPT,template="groovy-html.template"}', - mimeType: 'text/html', - ) - } - } -} - -def bash(script, label) { - sh( - script: "#!/bin/bash\n${script}", - label: label - ) -} - -def doSetup() { - notifyOnError { - retryWithDelay(2, 15) { - try { - runbld("./test/scripts/jenkins_setup.sh", "Setup Build Environment and Dependencies") - } catch (ex) { - try { - // Setup expects this directory to be missing, so we need to remove it before we do a retry - bash("rm -rf ../elasticsearch", "Remove elasticsearch sibling directory, if it exists") - } finally { - throw ex - } - } - } - } -} - -def getBuildArtifactBucket() { - def dir = env.ghprbPullId ? "pr-${env.ghprbPullId}" : buildState.get('checkoutInfo').branch.replace("/", "__") - return "gs://ci-artifacts.kibana.dev/default-build/${dir}/${buildState.get('checkoutInfo').commit}" -} - -def buildKibana(maxWorkers = '') { - notifyOnError { - withEnv(["KBN_OPTIMIZER_MAX_WORKERS=${maxWorkers}"]) { - runbld("./test/scripts/jenkins_build_kibana.sh", "Build Kibana") - } - - withGcpServiceAccount.fromVaultSecret('secret/kibana-issues/dev/ci-artifacts-key', 'value') { - bash(""" - cd "${env.WORKSPACE}" - gsutil -q -m cp 'kibana-default.tar.gz' '${getBuildArtifactBucket()}/' - gsutil -q -m cp 'kibana-default-plugins.tar.gz' '${getBuildArtifactBucket()}/' - """, "Upload Default Build artifacts to GCS") - } - } -} - -def downloadDefaultBuildArtifacts() { - withGcpServiceAccount.fromVaultSecret('secret/kibana-issues/dev/ci-artifacts-key', 'value') { - bash(""" - cd "${env.WORKSPACE}" - gsutil -q -m cp '${getBuildArtifactBucket()}/kibana-default.tar.gz' ./ - gsutil -q -m cp '${getBuildArtifactBucket()}/kibana-default-plugins.tar.gz' ./ - """, "Download Default Build artifacts from GCS") - } -} - -def runErrorReporter() { - return runErrorReporter([pwd()]) -} - -def runErrorReporter(workspaces) { - def status = buildUtils.getBuildStatus() - def dryRun = status != "ABORTED" ? "" : "--no-github-update" - - def globs = workspaces.collect { "'${it}/target/junit/**/*.xml'" }.join(" ") - - bash( - """ - source src/dev/ci_setup/setup_env.sh - node scripts/report_failed_tests --no-index-errors ${dryRun} ${globs} - """, - "Report failed tests, if necessary" - ) -} - -def call(Map params = [:], Closure closure) { - def config = [timeoutMinutes: 135, checkPrChanges: false, setCommitStatus: false] + params - - stage("Kibana Pipeline") { - timeout(time: config.timeoutMinutes, unit: 'MINUTES') { - timestamps { - ansiColor('xterm') { - if (config.setCommitStatus) { - buildState.set('shouldSetCommitStatus', true) - } - if (config.checkPrChanges && githubPr.isPr()) { - pipelineLibraryTests() - - print "Checking PR for changes to determine if CI needs to be run..." - - if (prChanges.areChangesSkippable()) { - print "No changes requiring CI found in PR, skipping." - return - } - } - try { - closure() - } finally { - if (config.setCommitStatus) { - githubCommitStatus.onFinish() - } - } - } - } - } - } -} - -// Creates a task queue using withTaskQueue, and copies the bootstrapped kibana repo into each process's workspace -// Note that node_modules are mostly symlinked to save time/space. See test/scripts/jenkins_setup_parallel_workspace.sh -def withCiTaskQueue(Map options = [:], Closure closure) { - def setupClosure = { - // This can't use runbld, because it expects the source to be there, which isn't yet - bash("${env.WORKSPACE}/kibana/test/scripts/jenkins_setup_parallel_workspace.sh", "Set up duplicate workspace for parallel process") - } - - def config = [parallel: 24, setup: setupClosure] + options - - withTaskQueue(config) { - closure.call() - } -} - -def scriptTask(description, script) { - return { - withFunctionalTestEnv { - notifyOnError { - runbld(script, description) - } - } - } -} - -def scriptTaskDocker(description, script) { - return { - withDocker(scriptTask(description, script)) - } -} - -def buildDocker() { - sh( - script: "./.ci/build_docker.sh", - label: 'Build CI Docker image' - ) -} - -def withDocker(Closure closure) { - docker - .image('kibana-ci') - .inside( - "-v /etc/runbld:/etc/runbld:ro -v '${env.JENKINS_HOME}:${env.JENKINS_HOME}' -v '/dev/shm/workspace:/dev/shm/workspace' --shm-size 2GB --cpus 4", - closure - ) -} - -def buildPlugins() { - runbld('./test/scripts/jenkins_build_plugins.sh', 'Build OSS Plugins') -} - -def withTasks(Map params = [:], Closure closure) { - catchErrors { - def config = [setupWork: {}, worker: [:], parallel: 24] + params - def workerConfig = [name: 'ci-worker', size: 'xxl', ramDisk: true] + config.worker - - workers.ci(workerConfig) { - withCiTaskQueue([parallel: config.parallel]) { - parallel([ - docker: { - retry(2) { - buildDocker() - } - }, - - // There are integration tests etc that require the plugins to be built first, so let's go ahead and build them before set up the parallel workspaces - plugins: { buildPlugins() }, - ]) - - config.setupWork() - - catchErrors { - closure() - } - } - } - } -} - -def allCiTasks() { - parallel([ - general: { - withTasks { - tasks.check() - tasks.lint() - tasks.test() - task { - buildKibana(16) - tasks.functionalOss() - tasks.functionalXpack() - } - tasks.storybooksCi() - } - }, - jest: { - workers.ci(name: 'jest', size: 'n2-standard-16', ramDisk: false) { - catchErrors { - scriptTask('Jest Unit Tests', 'test/scripts/test/jest_unit.sh')() - } - - catchErrors { - runbld.junit() - } - } - }, - ]) -} - -def pipelineLibraryTests() { - return - whenChanged(['vars/', '.ci/pipeline-library/']) { - workers.base(size: 'flyweight', bootstrapped: false, ramDisk: false) { - dir('.ci/pipeline-library') { - sh './gradlew test' - } - } - } -} - -return this diff --git a/vars/prChanges.groovy b/vars/prChanges.groovy deleted file mode 100644 index a8a81cade844c..0000000000000 --- a/vars/prChanges.groovy +++ /dev/null @@ -1,82 +0,0 @@ -import groovy.transform.Field - -public static @Field PR_CHANGES_CACHE = [] - -// if all the changed files in a PR match one of these regular -// expressions then CI will be skipped for that PR -def getSkippablePaths() { - return [ - /^docs\//, - /^rfcs\//, - /^.ci\/.+\.yml$/, - /^.ci\/es-snapshots\//, - /^.ci\/pipeline-library\//, - /^.ci\/Jenkinsfile_[^\/]+$/, - /^\.github\//, - /\.md$/, - /^\.backportrc\.json$/, - /^\.buildkite\//, - ] -} - -// exclusion regular expressions that will invalidate paths that -// match one of the skippable path regular expressions -def getNotSkippablePaths() { - return [ - // this file is auto-generated and changes to it need to be validated with CI - /^docs\/developer\/plugin-list.asciidoc$/, - // don't skip CI on prs with changes to plugin readme files (?i) is for case-insensitive matching - /(?i)\/plugins\/[^\/]+\/readme\.(md|asciidoc)$/, - ] -} - -def areChangesSkippable() { - if (!githubPr.isPr()) { - return false - } - - try { - def skippablePaths = getSkippablePaths() - def notSkippablePaths = getNotSkippablePaths() - def files = getChangedFiles() - - // 3000 is the max files GH API will return - if (files.size() >= 3000) { - return false - } - - files = files.findAll { file -> - def skippable = skippablePaths.find { regex -> file =~ regex} && !notSkippablePaths.find { regex -> file =~ regex } - return !skippable - } - - return files.size() < 1 - } catch (ex) { - buildUtils.printStacktrace(ex) - print "Error while checking to see if CI is skippable based on changes. Will run CI." - return false - } -} - -def getChanges() { - if (!PR_CHANGES_CACHE && env.ghprbPullId) { - withGithubCredentials { - def changes = githubPrs.getChanges(env.ghprbPullId) - if (changes) { - PR_CHANGES_CACHE.addAll(changes) - } - } - } - - return PR_CHANGES_CACHE -} - -def getChangedFiles() { - def changes = getChanges() - def changedFiles = changes.collect { it.filename } - def renamedFiles = changes.collect { it.previousFilename }.findAll { it } - - return changedFiles + renamedFiles -} - -return this diff --git a/vars/retryWithDelay.groovy b/vars/retryWithDelay.groovy deleted file mode 100644 index 83fd94c6f2b1e..0000000000000 --- a/vars/retryWithDelay.groovy +++ /dev/null @@ -1,18 +0,0 @@ -def call(retryTimes, delaySecs, closure) { - retry(retryTimes) { - try { - closure() - } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException ex) { - throw ex // Immediately re-throw build abort exceptions, don't sleep first - } catch (Exception ex) { - sleep delaySecs - throw ex - } - } -} - -def call(retryTimes, Closure closure) { - call(retryTimes, 15, closure) -} - -return this diff --git a/vars/retryable.groovy b/vars/retryable.groovy deleted file mode 100644 index bfd021ddd8167..0000000000000 --- a/vars/retryable.groovy +++ /dev/null @@ -1,78 +0,0 @@ -import groovy.transform.Field - -public static @Field GLOBAL_RETRIES_ENABLED = false -public static @Field MAX_GLOBAL_RETRIES = 1 -public static @Field CURRENT_GLOBAL_RETRIES = 0 -public static @Field FLAKY_FAILURES = [] - -def setMax(max) { - retryable.MAX_GLOBAL_RETRIES = max -} - -def enable() { - retryable.GLOBAL_RETRIES_ENABLED = true -} - -def enable(max) { - enable() - setMax(max) -} - -def haveReachedMaxRetries() { - return retryable.CURRENT_GLOBAL_RETRIES >= retryable.MAX_GLOBAL_RETRIES -} - -def getFlakyFailures() { - return retryable.FLAKY_FAILURES -} - -def printFlakyFailures() { - catchErrors { - def failures = getFlakyFailures() - - if (failures && failures.size() > 0) { - print "This build had the following flaky failures:" - failures.each { - print "\n${it.label}" - buildUtils.printStacktrace(it.exception) - } - } - } -} - -def call(label, Closure closure) { - if (!retryable.GLOBAL_RETRIES_ENABLED) { - closure() - return - } - - try { - closure() - } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException ex) { - // If the build was aborted, don't retry the step - throw ex - } catch (Exception ex) { - if (haveReachedMaxRetries()) { - print "Couldn't retry '${label}', have already reached the max number of retries for this build." - throw ex - } - - retryable.CURRENT_GLOBAL_RETRIES++ - buildUtils.printStacktrace(ex) - unstable "${label} failed but is retryable, trying a second time..." - - def JOB = env.JOB ? "${env.JOB}-retry" : "" - withEnv([ - "JOB=${JOB}", - ]) { - closure() - } - - retryable.FLAKY_FAILURES << [ - label: label, - exception: ex, - ] - - unstable "${label} failed on the first attempt, but succeeded on the second. Marking it as flaky." - } -} diff --git a/vars/runbld.groovy b/vars/runbld.groovy deleted file mode 100644 index 80416d4fa9a41..0000000000000 --- a/vars/runbld.groovy +++ /dev/null @@ -1,17 +0,0 @@ -def call(script, label, enableJunitProcessing = false) { - // def extraConfig = enableJunitProcessing ? "" : "--config ${env.WORKSPACE}/kibana/.ci/runbld_no_junit.yml" - - sh( - script: "bash ${script}", - label: label ?: script - ) -} - -def junit() { - sh( - script: "/usr/local/bin/runbld -d '${pwd()}' ${env.WORKSPACE}/kibana/test/scripts/jenkins_runbld_junit.sh", - label: "Process JUnit reports with runbld" - ) -} - -return this diff --git a/vars/slackNotifications.groovy b/vars/slackNotifications.groovy deleted file mode 100644 index 02aad14d8ba3f..0000000000000 --- a/vars/slackNotifications.groovy +++ /dev/null @@ -1,228 +0,0 @@ -def getFailedBuildBlocks() { - def messages = [ - getFailedSteps(), - getTestFailures(), - ] - - return messages - .findAll { !!it } // No blank strings - .collect { markdownBlock(it) } -} - -def dividerBlock() { - return [ type: "divider" ] -} - -// If a message is longer than the limit, split it up by '\n' into parts, and return as many parts as will fit within the limit -def shortenMessage(message, sizeLimit = 3000) { - if (message.size() <= sizeLimit) { - return message - } - - def truncatedMessage = "[...truncated...]" - - def parts = message.split("\n") - message = "" - - for(def part in parts) { - if ((message.size() + part.size() + truncatedMessage.size() + 1) > sizeLimit) { - break; - } - message += part+"\n" - } - - message += truncatedMessage - - return message.size() <= sizeLimit ? message : truncatedMessage -} - -def markdownBlock(message) { - return [ - type: "section", - text: [ - type: "mrkdwn", - text: shortenMessage(message, 3000), // 3000 is max text length for `section`s only - ], - ] -} - -def contextBlock(message) { - return [ - type: "context", - elements: [ - [ - type: 'mrkdwn', - text: message, // Not sure what the size limit is here, I tried 10000s of characters and it still worked - ] - ] - ] -} - -def getFailedSteps() { - try { - def steps = jenkinsApi.getFailedSteps()?.findAll { step -> - step.displayName != 'Check out from version control' - } - - if (steps?.size() > 0) { - def list = steps.collect { "ā€¢ <${it.logs}|${it.displayName}>" }.join("\n") - return "*Failed Steps*\n${list}" - } - } catch (ex) { - buildUtils.printStacktrace(ex) - print "Error retrieving failed pipeline steps for PR comment, will skip this section" - } - - return "" -} - -def getTestFailures() { - def failures = testUtils.getFailures() - if (!failures) { - return "" - } - - def messages = [] - messages << "*Test Failures*" - - def list = failures.take(10).collect { - def name = it - .fullDisplayName - .split(/\./, 2)[-1] - // Only the following three characters need to be escaped for link text, per Slack's docs - .replaceAll('&', '&') - .replaceAll('<', '<') - .replaceAll('>', '>') - - return "ā€¢ <${it.url}|${name}>" - }.join("\n") - - def moreText = failures.size() > 10 ? "\nā€¢ ...and ${failures.size()-10} more" : "" - return "*Test Failures*\n${list}${moreText}" -} - -def getDefaultDisplayName() { - return "${env.JOB_NAME} ${env.BUILD_DISPLAY_NAME}" -} - -def getDefaultContext(config = [:]) { - def progressMessage = "" - if (config && !config.isFinal) { - progressMessage = "In-progress" - } else { - def duration = currentBuild.durationString.replace(' and counting', '') - progressMessage = "${buildUtils.getBuildStatus().toLowerCase().capitalize()} after ${duration}" - } - - return contextBlock([ - progressMessage, - "", - ].join(' Ā· ')) -} - -def getStatusIcon(config = [:]) { - if (config && !config.isFinal) { - return ':hourglass_flowing_sand:' - } - - def status = buildUtils.getBuildStatus() - if (status == 'UNSTABLE') { - return ':yellow_heart:' - } - - return ':broken_heart:' -} - -def getBackupMessage(config) { - return "${getStatusIcon(config)} ${config.title}\n\nFirst attempt at sending this notification failed. Please check the build." -} - -def sendFailedBuild(Map params = [:]) { - def config = [ - channel: '#kibana-operations-alerts', - title: "*<${env.BUILD_URL}|${getDefaultDisplayName()}>*", - message: getDefaultDisplayName(), - color: 'danger', - icon: ':jenkins:', - username: 'Kibana Operations', - isFinal: false, - ] + params - - config.context = config.context ?: getDefaultContext(config) - - def title = "${getStatusIcon(config)} ${config.title}" - def message = "${getStatusIcon(config)} ${config.message}" - - def blocks = [markdownBlock(title)] - getFailedBuildBlocks().each { blocks << it } - blocks << dividerBlock() - blocks << config.context - - def channel = config.channel - def timestamp = null - - def previousResp = buildState.get('SLACK_NOTIFICATION_RESPONSE') - if (previousResp) { - // When using `timestamp` to update a previous message, you have to use the channel ID from the previous response - channel = previousResp.channelId - timestamp = previousResp.ts - } - - def resp = slackSend( - channel: channel, - timestamp: timestamp, - username: config.username, - iconEmoji: config.icon, - color: config.color, - message: message, - blocks: blocks - ) - - if (!resp) { - resp = slackSend( - channel: config.channel, - username: config.username, - iconEmoji: config.icon, - color: config.color, - message: message, - blocks: [markdownBlock(getBackupMessage(config))] - ) - } - - if (resp) { - buildState.set('SLACK_NOTIFICATION_RESPONSE', resp) - } -} - -def onFailure(Map options = [:]) { - catchError { - def status = buildUtils.getBuildStatus() - if (status != "SUCCESS") { - catchErrors { - options.isFinal = true - sendFailedBuild(options) - } - } - } -} - -def onFailure(Map options = [:], Closure closure) { - if (options.disabled) { - catchError { - closure() - } - - return - } - - buildState.set('SLACK_NOTIFICATION_CONFIG', options) - - // try/finally will NOT work here, because the build status will not have been changed to ERROR when the finally{} block executes - catchError { - closure() - } - - onFailure(options) -} - -return this diff --git a/vars/storybooks.groovy b/vars/storybooks.groovy deleted file mode 100644 index f3c4a97a7d436..0000000000000 --- a/vars/storybooks.groovy +++ /dev/null @@ -1,83 +0,0 @@ -def getStorybooksBucket() { - return "ci-artifacts.kibana.dev/storybooks" -} - -def getDestinationDir() { - return env.ghprbPullId ? "pr-${env.ghprbPullId}" : buildState.get('checkoutInfo').branch.replace("/", "__") -} - -def getUrl() { - return "https://${getStorybooksBucket()}/${getDestinationDir()}" -} - -def getUrlLatest() { - return "${getUrl()}/latest" -} - -def getUrlForCommit() { - return "${getUrl()}/${buildState.get('checkoutInfo').commit}" -} - -def upload() { - dir("built_assets/storybook") { - sh "mv ci_composite composite" - - def storybooks = sh( - script: 'ls -1d */', - returnStdout: true - ).trim() - .split('\n') - .collect { it.replace('/', '') } - .findAll { it != 'composite' } - - def listHtml = storybooks.collect { """
  • ${it}
  • """ }.join("\n") - - def html = """ - - -

    Storybooks

    -

    Composite Storybook

    -

    All

    -
      - ${listHtml} -
    - - - """ - - writeFile(file: 'index.html', text: html) - - withGcpServiceAccount.fromVaultSecret('secret/kibana-issues/dev/ci-artifacts-key', 'value') { - kibanaPipeline.bash(""" - gsutil -q -m cp -r -z js,css,html,json,map,txt,svg '*' 'gs://${getStorybooksBucket()}/${getDestinationDir()}/${buildState.get('checkoutInfo').commit}/' - gsutil -h "Cache-Control:no-cache, max-age=0, no-transform" cp -z html 'index.html' 'gs://${getStorybooksBucket()}/${getDestinationDir()}/latest/' - """, "Upload Storybooks to GCS") - } - - buildState.set('storybooksUrl', getUrlForCommit()) - } -} - -def build() { - withEnv(["STORYBOOK_BASE_URL=${getUrlForCommit()}"]) { - kibanaPipeline.bash('test/scripts/jenkins_storybook.sh', 'Build Storybooks') - } -} - -def buildAndUpload() { - def sha = buildState.get('checkoutInfo').commit - def context = 'Build and Publish Storybooks' - - githubCommitStatus.create(sha, 'pending', 'Building Storybooks', context) - - try { - build() - upload() - githubCommitStatus.create(sha, 'success', 'Storybooks built', context, getUrlForCommit()) - } catch(ex) { - githubCommitStatus.create(sha, 'error', 'Building Storybooks failed', context) - throw ex - } -} - -return this diff --git a/vars/task.groovy b/vars/task.groovy deleted file mode 100644 index 0c07b519b6fef..0000000000000 --- a/vars/task.groovy +++ /dev/null @@ -1,5 +0,0 @@ -def call(Closure closure) { - withTaskQueue.addTask(closure) -} - -return this diff --git a/vars/tasks.groovy b/vars/tasks.groovy deleted file mode 100644 index 9a1ea053e9c49..0000000000000 --- a/vars/tasks.groovy +++ /dev/null @@ -1,201 +0,0 @@ -def call(List closures) { - withTaskQueue.addTasks(closures) -} - -def check() { - tasks([ - kibanaPipeline.scriptTask('Quick Commit Checks', 'test/scripts/checks/commit/commit.sh'), - kibanaPipeline.scriptTask('Check Telemetry Schema', 'test/scripts/checks/telemetry.sh'), - kibanaPipeline.scriptTask('Check TypeScript Projects', 'test/scripts/checks/ts_projects.sh'), - kibanaPipeline.scriptTask('Check Jest Configs', 'test/scripts/checks/jest_configs.sh'), - kibanaPipeline.scriptTask('Check @kbn/pm Distributable', 'test/scripts/checks/kbn_pm_dist.sh'), - kibanaPipeline.scriptTask('Check Plugin List Docs', 'test/scripts/checks/plugin_list_docs.sh'), - kibanaPipeline.scriptTask('Check Types and Public API Docs', 'test/scripts/checks/type_check_plugin_public_api_docs.sh'), - kibanaPipeline.scriptTask('Check Bundle Limits', 'test/scripts/checks/bundle_limits.sh'), - kibanaPipeline.scriptTask('Check i18n', 'test/scripts/checks/i18n.sh'), - kibanaPipeline.scriptTask('Check File Casing', 'test/scripts/checks/file_casing.sh'), - kibanaPipeline.scriptTask('Check Licenses', 'test/scripts/checks/licenses.sh'), - kibanaPipeline.scriptTask('Check Plugins With Circular Dependencies', 'test/scripts/checks/plugins_with_circular_deps.sh'), - kibanaPipeline.scriptTask('Verify NOTICE', 'test/scripts/checks/verify_notice.sh'), - kibanaPipeline.scriptTask('Test Projects', 'test/scripts/checks/test_projects.sh'), - kibanaPipeline.scriptTask('Test Hardening', 'test/scripts/checks/test_hardening.sh'), - ]) -} - -def lint() { - tasks([ - kibanaPipeline.scriptTask('Lint: eslint', 'test/scripts/lint/eslint.sh'), - kibanaPipeline.scriptTask('Lint: stylelint', 'test/scripts/lint/stylelint.sh'), - ]) -} - -def test() { - tasks([ - // This task requires isolation because of hard-coded, conflicting ports and such, so let's use Docker here - kibanaPipeline.scriptTaskDocker('Jest Integration Tests', 'test/scripts/test/jest_integration.sh'), - kibanaPipeline.scriptTask('API Integration Tests', 'test/scripts/test/api_integration.sh'), - ]) -} - -def ossCiGroups() { - def ciGroups = 1..11 - tasks(ciGroups.collect { kibanaPipeline.ossCiGroupProcess(it, true) }) -} - -def xpackCiGroups() { - def ciGroups = 1..13 - tasks(ciGroups.collect { kibanaPipeline.xpackCiGroupProcess(it, true) }) -} - -def xpackCiGroupDocker() { - task { - workers.ci(name: 'xpack-cigroups-docker', size: 'm', ramDisk: true) { - kibanaPipeline.downloadDefaultBuildArtifacts() - kibanaPipeline.bash(""" - cd '${env.WORKSPACE}' - mkdir -p kibana-build - tar -xzf kibana-default.tar.gz -C kibana-build --strip=1 - tar -xzf kibana-default-plugins.tar.gz -C kibana - """, "Extract Default Build artifacts") - kibanaPipeline.xpackCiGroupProcess('Docker', true)() - } - } -} - -def functionalOss(Map params = [:]) { - def config = params ?: [ - serverIntegration: true, - ciGroups: true, - firefox: true, - accessibility: true, - pluginFunctional: true, - visualRegression: false, - ] - - task { - if (config.ciGroups) { - ossCiGroups() - } - - if (config.firefox) { - task(kibanaPipeline.functionalTestProcess('oss-firefox', './test/scripts/jenkins_firefox_smoke.sh')) - } - - if (config.accessibility) { - task(kibanaPipeline.functionalTestProcess('oss-accessibility', './test/scripts/jenkins_accessibility.sh')) - } - - if (config.pluginFunctional) { - task(kibanaPipeline.functionalTestProcess('oss-pluginFunctional', './test/scripts/jenkins_plugin_functional.sh')) - } - - if (config.visualRegression) { - task(kibanaPipeline.functionalTestProcess('oss-visualRegression', './test/scripts/jenkins_visual_regression.sh')) - } - - if (config.serverIntegration) { - task(kibanaPipeline.scriptTaskDocker('serverIntegration', './test/scripts/test/server_integration.sh')) - } - } -} - -def functionalXpack(Map params = [:]) { - def config = params ?: [ - ciGroups: true, - firefox: true, - accessibility: true, - pluginFunctional: true, - savedObjectsFieldMetrics:true, - pageLoadMetrics: false, - visualRegression: false, - ] - - task { - if (config.ciGroups) { - xpackCiGroups() - xpackCiGroupDocker() - } - - if (config.firefox) { - task(kibanaPipeline.functionalTestProcess('xpack-firefox', './test/scripts/jenkins_xpack_firefox_smoke.sh')) - } - - if (config.accessibility) { - task(kibanaPipeline.functionalTestProcess('xpack-accessibility', './test/scripts/jenkins_xpack_accessibility.sh')) - } - - if (config.visualRegression) { - task(kibanaPipeline.functionalTestProcess('xpack-visualRegression', './test/scripts/jenkins_xpack_visual_regression.sh')) - } - - if (config.savedObjectsFieldMetrics) { - task(kibanaPipeline.functionalTestProcess('xpack-savedObjectsFieldMetrics', './test/scripts/jenkins_xpack_saved_objects_field_metrics.sh')) - } - - whenChanged([ - 'x-pack/plugins/security_solution/', - 'x-pack/plugins/cases/', - 'x-pack/plugins/timelines/', - 'x-pack/plugins/lists/', - 'x-pack/test/security_solution_cypress/', - 'x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/', - 'x-pack/plugins/triggers_actions_ui/public/application/context/actions_connectors_context.tsx', - 'x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-securitySolutionCypressChrome', './test/scripts/jenkins_security_solution_cypress_chrome.sh')) - // Temporarily disabled to figure out test flake - // task(kibanaPipeline.functionalTestProcess('xpack-securitySolutionCypressFirefox', './test/scripts/jenkins_security_solution_cypress_firefox.sh')) - } - } - - whenChanged([ - 'x-pack/plugins/apm/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-APMCypress', './test/scripts/jenkins_apm_cypress.sh')) - } - } - - whenChanged([ - 'x-pack/plugins/synthetics/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-UptimePlaywright', './test/scripts/jenkins_uptime_playwright.sh')) - } - } - - whenChanged([ - 'x-pack/plugins/ux/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-uxPluginSynthetics', './test/scripts/jenkins_ux_synthetics.sh')) - } - } - - whenChanged([ - 'x-pack/plugins/fleet/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-FleetCypress', './test/scripts/jenkins_fleet_cypress.sh')) - } - } - - whenChanged([ - 'x-pack/plugins/osquery/', - ]) { - if (githubPr.isPr()) { - task(kibanaPipeline.functionalTestProcess('xpack-osqueryCypress', './test/scripts/jenkins_osquery_cypress.sh')) - } - } - - } -} - -def storybooksCi() { - task { - storybooks.buildAndUpload() - } -} - -return this diff --git a/vars/whenChanged.groovy b/vars/whenChanged.groovy deleted file mode 100644 index c58ec83f2b051..0000000000000 --- a/vars/whenChanged.groovy +++ /dev/null @@ -1,57 +0,0 @@ -/* - whenChanged('some/path') { yourCode() } can be used to execute pipeline code in PRs only when changes are detected on paths that you specify. - The specified code blocks will also always be executed during the non-PR jobs for tracked branches. - - You have the option of passing in path prefixes, or regexes. Single or multiple. - Path specifications are NOT globby, they are only prefixes. - Specifying multiple will treat them as ORs. - - Example Usages: - whenChanged('a/path/prefix/') { someCode() } - whenChanged(startsWith: 'a/path/prefix/') { someCode() } // Same as above - whenChanged(['prefix1/', 'prefix2/']) { someCode() } - whenChanged(regex: /\.test\.js$/) { someCode() } - whenChanged(regex: [/abc/, /xyz/]) { someCode() } -*/ - -def call(String startsWithString, Closure closure) { - return whenChanged([ startsWith: startsWithString ], closure) -} - -def call(List startsWithStrings, Closure closure) { - return whenChanged([ startsWith: startsWithStrings ], closure) -} - -def call(Map params, Closure closure) { - if (!githubPr.isPr()) { - return closure() - } - - def files = prChanges.getChangedFiles() - def hasMatch = false - - if (params.regex) { - params.regex = [] + params.regex - print "Checking PR for changes that match: ${params.regex.join(', ')}" - hasMatch = !!files.find { file -> - params.regex.find { regex -> file =~ regex } - } - } - - if (!hasMatch && params.startsWith) { - params.startsWith = [] + params.startsWith - print "Checking PR for changes that start with: ${params.startsWith.join(', ')}" - hasMatch = !!files.find { file -> - params.startsWith.find { str -> file.startsWith(str) } - } - } - - if (hasMatch) { - print "Changes found, executing pipeline." - closure() - } else { - print "No changes found, skipping." - } -} - -return this diff --git a/vars/withGithubCredentials.groovy b/vars/withGithubCredentials.groovy deleted file mode 100644 index 224e49af1bd6f..0000000000000 --- a/vars/withGithubCredentials.groovy +++ /dev/null @@ -1,9 +0,0 @@ -def call(closure) { - withCredentials([ - string(credentialsId: '2a9602aa-ab9f-4e52-baf3-b71ca88469c7', variable: 'GITHUB_TOKEN'), - ]) { - closure() - } -} - -return this diff --git a/vars/withTaskQueue.groovy b/vars/withTaskQueue.groovy deleted file mode 100644 index 8132d6264744f..0000000000000 --- a/vars/withTaskQueue.groovy +++ /dev/null @@ -1,154 +0,0 @@ -import groovy.transform.Field - -public static @Field TASK_QUEUES = [:] -public static @Field TASK_QUEUES_COUNTER = 0 - -/** - withTaskQueue creates a queue of "tasks" (just plain closures to execute), and executes them with your desired level of concurrency. - This way, you can define, for example, 40 things that need to execute, then only allow 10 of them to execute at once. - - Each "process" will execute in a separate, unique, empty directory. - If you want each process to have a bootstrapped kibana repo, check out kibanaPipeline.withCiTaskQueue - - Using the queue currently requires an agent/worker. - - Usage: - - withTaskQueue(parallel: 10) { - task { print "This is a task" } - - // This is the same as calling task() multiple times - tasks([ { print "Another task" }, { print "And another task" } ]) - - // Tasks can queue up subsequent tasks - task { - buildThing() - task { print "I depend on buildThing()" } - } - } - - You can also define a setup task that each process should execute one time before executing tasks: - withTaskQueue(parallel: 10, setup: { sh "my-setup-scrupt.sh" }) { - ... - } - -*/ -def call(Map options = [:], Closure closure) { - def config = [ parallel: 10 ] + options - def counter = ++TASK_QUEUES_COUNTER - - // We're basically abusing withEnv() to create a "scope" for all steps inside of a withTaskQueue block - // This way, we could have multiple task queue instances in the same pipeline - withEnv(["TASK_QUEUE_ID=${counter}"]) { - withTaskQueue.TASK_QUEUES[env.TASK_QUEUE_ID] = [ - tasks: [], - tmpFile: sh(script: 'mktemp', returnStdout: true).trim() - ] - - closure.call() - - def processesExecuting = 0 - def processes = [:] - def iterationId = 0 - - for(def i = 1; i <= config.parallel; i++) { - def j = i - processes["task-queue-process-${j}"] = { - catchErrors { - withEnv([ - "TASK_QUEUE_PROCESS_ID=${j}", - "TASK_QUEUE_ITERATION_ID=${++iterationId}" - ]) { - dir("${WORKSPACE}/parallel/${j}/kibana") { - if (config.setup) { - config.setup.call(j) - } - - def isDone = false - while(!isDone) { // TODO some kind of timeout? - catchErrors { - if (!getTasks().isEmpty()) { - processesExecuting++ - catchErrors { - def task - try { - task = getTasks().pop() - } catch (java.util.NoSuchElementException ex) { - return - } - - task.call() - } - processesExecuting-- - // If a task finishes, and no new tasks were queued up, and nothing else is executing - // Then all of the processes should wake up and exit - if (processesExecuting < 1 && getTasks().isEmpty()) { - taskNotify() - } - return - } - - if (processesExecuting > 0) { - taskSleep() - return - } - - // Queue is empty, no processes are executing - isDone = true - } - } - } - } - } - } - } - parallel(processes) - } -} - -// If we sleep in a loop using Groovy code, Pipeline Steps is flooded with Sleep steps -// So, instead, we just watch a file and `touch` it whenever something happens that could modify the queue -// There's a 20 minute timeout just in case something goes wrong, -// in which case this method will get called again if the process is actually supposed to be waiting. -def taskSleep() { - sh(script: """#!/bin/bash - TIMESTAMP=\$(date '+%s' -d "0 seconds ago") - for (( i=1; i<=240; i++ )) - do - if [ "\$(stat -c %Y '${getTmpFile()}')" -ge "\$TIMESTAMP" ] - then - break - else - sleep 5 - if [[ \$i == 240 ]]; then - echo "Waited for new tasks for 20 minutes, exiting in case something went wrong" - fi - fi - done - """, label: "Waiting for new tasks...") -} - -// Used to let the task queue processes know that either a new task has been queued up, or work is complete -def taskNotify() { - sh "touch '${getTmpFile()}'" -} - -def getTasks() { - return withTaskQueue.TASK_QUEUES[env.TASK_QUEUE_ID].tasks -} - -def getTmpFile() { - return withTaskQueue.TASK_QUEUES[env.TASK_QUEUE_ID].tmpFile -} - -def addTask(Closure closure) { - getTasks() << closure - taskNotify() -} - -def addTasks(List closures) { - closures.reverse().each { - getTasks() << it - } - taskNotify() -} diff --git a/vars/workers.groovy b/vars/workers.groovy deleted file mode 100644 index ea67ce415738f..0000000000000 --- a/vars/workers.groovy +++ /dev/null @@ -1,206 +0,0 @@ -// "Workers" in this file will spin up an instance, do some setup etc depending on the configuration, and then execute some work that you define -// e.g. workers.base(name: 'my-worker') { sh "echo 'ready to execute some kibana scripts'" } - -def label(size) { - switch(size) { - case 'flyweight': - return 'flyweight' - case 's': - return 'docker && linux && immutable' - case 's-highmem': - return 'docker && tests-s' - case 'm': - return 'docker && linux && immutable && gobld/machineType:n2-standard-8' - case 'm-highmem': - return 'docker && linux && immutable && gobld/machineType:n1-highmem-8' - case 'l': - return 'docker && tests-l' - case 'xl': - return 'docker && tests-xl' - case 'xl-highmem': - return 'docker && tests-xl-highmem' - case 'xxl': - return 'docker && tests-xxl && gobld/machineType:custom-64-327680' - case 'n2-standard-16': - return 'docker && linux && immutable && gobld/machineType:n2-standard-16' - } - - error "unknown size '${size}'" -} - -/* - The base worker that all of the others use. Will clone the scm (assumed to be kibana), and run kibana bootstrap processes by default. - - Parameters: - size - size of worker label to use, e.g. 's' or 'xl' - ramDisk - Should the workspace be mounted in memory? Default: true - bootstrapped - If true, download kibana dependencies, run kbn bootstrap, etc. Default: true - name - Name of the worker for display purposes, filenames, etc. - scm - Jenkins scm configuration for checking out code. Use `null` to disable checkout. Default: inherited from job -*/ -def base(Map params, Closure closure) { - def config = [size: '', ramDisk: true, bootstrapped: true, name: 'unnamed-worker', scm: scm] + params - if (!config.size) { - error "You must specify an agent size, such as 'xl' or 's', when using workers.base()" - } - - node(label(config.size)) { - agentInfo.print() - - if (config.ramDisk) { - // Move to a temporary workspace, so that we can symlink the real workspace into /dev/shm - def originalWorkspace = env.WORKSPACE - ws('/tmp/workspace') { - sh( - script: """ - mkdir -p /dev/shm/workspace - mkdir -p '${originalWorkspace}' # create all of the directories leading up to the workspace, if they don't exist - rm --preserve-root -rf '${originalWorkspace}' # then remove just the workspace, just in case there's stuff in it - ln -s /dev/shm/workspace '${originalWorkspace}' - """, - label: "Move workspace to RAM - /dev/shm/workspace" - ) - } - } - - sh( - script: "mkdir -p ${env.WORKSPACE}/tmp", - label: "Create custom temp directory" - ) - - def checkoutInfo = [:] - - if (config.scm) { - // Try to clone from Github up to 8 times, waiting 15 secs between attempts - retryWithDelay(8, 15) { - kibanaCheckout() - } - - dir("kibana") { - checkoutInfo = getCheckoutInfo() - - if (!buildState.has('checkoutInfo')) { - buildState.set('checkoutInfo', checkoutInfo) - - if (buildState.get('shouldSetCommitStatus')) { - githubCommitStatus.onStart() - } - } - } - - ciStats.reportGitInfo( - checkoutInfo.branch, - checkoutInfo.commit, - checkoutInfo.targetBranch, - checkoutInfo.mergeBase - ) - } - - withEnv([ - "CI=true", - "HOME=${env.JENKINS_HOME}", - "PR_NUMBER=${env.ghprbPullId ?: ''}", - "PR_SOURCE_BRANCH=${env.ghprbSourceBranch ?: ''}", - "PR_TARGET_BRANCH=${env.ghprbTargetBranch ?: ''}", - "PR_MERGE_BASE=${checkoutInfo.mergeBase ?: ''}", - "PR_AUTHOR=${env.ghprbPullAuthorLogin ?: ''}", - "TEST_BROWSER_HEADLESS=1", - "GIT_COMMIT=${checkoutInfo.commit}", - "GIT_BRANCH=${checkoutInfo.branch}", - "TMPDIR=${env.WORKSPACE}/tmp", // For Chrome and anything else that respects it - ]) { - withCredentials([ - string(credentialsId: 'vault-addr', variable: 'VAULT_ADDR'), - string(credentialsId: 'vault-role-id', variable: 'VAULT_ROLE_ID'), - string(credentialsId: 'vault-secret-id', variable: 'VAULT_SECRET_ID'), - ]) { - // scm is configured to check out to the ./kibana directory - dir('kibana') { - if (config.bootstrapped) { - kibanaPipeline.doSetup() - } - - closure() - } - } - } - } -} - -// Worker for ci processes. Extends the base worker and adds GCS artifact upload, error reporting, junit processing -def ci(Map params, Closure closure) { - def config = [ramDisk: true, bootstrapped: true, runErrorReporter: true] + params - - return base(config) { - kibanaPipeline.withGcsArtifactUpload(config.name) { - kibanaPipeline.withPostBuildReporting(config) { - closure() - } - } - } -} - -// Worker for running the current intake jobs. Just runs a single script after bootstrap. -def intake(jobName, String script) { - return { - ci(name: jobName, size: 'm-highmem', ramDisk: true) { - withEnv(["JOB=${jobName}"]) { - kibanaPipeline.notifyOnError { - runbld(script, "Execute ${jobName}") - } - } - } - } -} - -// Worker for running functional tests. Runs a setup process (e.g. the kibana build) then executes a map of closures in parallel (e.g. one for each ciGroup) -def functional(name, Closure setup, Map processes) { - return { - parallelProcesses(name: name, setup: setup, processes: processes, delayBetweenProcesses: 20, size: 'xl') - } -} - -/* - Creates a ci worker that can run a setup process, followed by a group of processes in parallel. - - Parameters: - name: Name of the worker for display purposes, filenames, etc. - setup: Closure to execute after the agent is bootstrapped, before starting the parallel work - processes: Map of closures that will execute in parallel after setup. Each closure is passed a unique number. - delayBetweenProcesses: Number of seconds to wait between starting the parallel processes. Useful to spread the load of heavy init processes, e.g. Elasticsearch starting up. Default: 0 - size: size of worker label to use, e.g. 's' or 'xl' -*/ -def parallelProcesses(Map params) { - def config = [name: 'parallel-worker', setup: {}, processes: [:], delayBetweenProcesses: 0, size: 'xl'] + params - - ci(size: config.size, name: config.name) { - config.setup() - - def nextProcessNumber = 1 - def process = { processName, processClosure -> - def processNumber = nextProcessNumber - nextProcessNumber++ - - return { - if (config.delayBetweenProcesses && config.delayBetweenProcesses > 0) { - // This delay helps smooth out CPU load caused by ES/Kibana instances starting up at the same time - def delay = (processNumber-1)*config.delayBetweenProcesses - sleep(delay) - } - - withEnv(["CI_PARALLEL_PROCESS_NUMBER=${processNumber}"]) { - processClosure() - } - } - } - - def processes = [:] - config.processes.each { processName, processClosure -> - processes[processName] = process(processName, processClosure) - } - - parallel(processes) - } -} - -return this diff --git a/versions.json b/versions.json index ce91f8f76bb7e..8406528bb4428 100644 --- a/versions.json +++ b/versions.json @@ -13,10 +13,16 @@ "currentMajor": true, "previousMinor": true }, + { + "version": "8.11.4", + "branch": "8.11", + "currentMajor": true, + "previousMinor": true + }, { "version": "7.17.17", "branch": "7.17", "previousMajor": true } ] -} +} \ No newline at end of file diff --git a/x-pack/examples/gen_ai_streaming_response_example/server/plugin.ts b/x-pack/examples/gen_ai_streaming_response_example/server/plugin.ts index 05f9612bcf73d..02be370d08e25 100644 --- a/x-pack/examples/gen_ai_streaming_response_example/server/plugin.ts +++ b/x-pack/examples/gen_ai_streaming_response_example/server/plugin.ts @@ -6,7 +6,7 @@ */ import Boom from '@hapi/boom'; -import { CreateChatCompletionResponse } from 'openai'; +import type OpenAI from 'openai'; import { Readable } from 'stream'; import { Plugin, CoreSetup } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; @@ -112,7 +112,7 @@ export class GenAiStreamingResponseExamplePlugin implements Plugin { } return response.ok({ - body: executeResult.data as CreateChatCompletionResponse | Readable, + body: executeResult.data as OpenAI.ChatCompletion | Readable, }); } ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.test.tsx index beb2bd77d8512..cfdbcdc4a86b9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.test.tsx @@ -19,8 +19,8 @@ describe('AlertsSettings', () => { it('updates the knowledgeBase settings when the switch is toggled', () => { const knowledgeBase: KnowledgeBaseConfig = { - alerts: false, - assistantLangChain: false, + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }; const setUpdatedKnowledgeBaseSettings = jest.fn(); @@ -36,8 +36,8 @@ describe('AlertsSettings', () => { fireEvent.click(alertsSwitch); expect(setUpdatedKnowledgeBaseSettings).toHaveBeenCalledWith({ - alerts: true, - assistantLangChain: false, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }); }); @@ -45,8 +45,8 @@ describe('AlertsSettings', () => { it('updates the knowledgeBase settings when the alerts range slider is changed', () => { const setUpdatedKnowledgeBaseSettings = jest.fn(); const knowledgeBase: KnowledgeBaseConfig = { - alerts: true, - assistantLangChain: false, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }; @@ -61,17 +61,17 @@ describe('AlertsSettings', () => { fireEvent.change(rangeSlider, { target: { value: '10' } }); expect(setUpdatedKnowledgeBaseSettings).toHaveBeenCalledWith({ - alerts: true, - assistantLangChain: false, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: false, latestAlerts: 10, }); }); - it('enables the alerts range slider when knowledgeBase.alerts is true', () => { + it('enables the alerts range slider when knowledgeBase.isEnabledRAGAlerts is true', () => { const setUpdatedKnowledgeBaseSettings = jest.fn(); const knowledgeBase: KnowledgeBaseConfig = { - alerts: true, // <-- true - assistantLangChain: false, + isEnabledRAGAlerts: true, // <-- true + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }; @@ -85,11 +85,11 @@ describe('AlertsSettings', () => { expect(screen.getByTestId('alertsRange')).not.toBeDisabled(); }); - it('disables the alerts range slider when knowledgeBase.alerts is false', () => { + it('disables the alerts range slider when knowledgeBase.isEnabledRAGAlerts is false', () => { const setUpdatedKnowledgeBaseSettings = jest.fn(); const knowledgeBase: KnowledgeBaseConfig = { - alerts: false, // <-- false - assistantLangChain: false, + isEnabledRAGAlerts: false, // <-- false + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.tsx index f23470bbbe7a7..6895d2f595e73 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/alerts/settings/alerts_settings.tsx @@ -40,7 +40,7 @@ const AlertsSettingsComponent = ({ knowledgeBase, setUpdatedKnowledgeBaseSetting (event: EuiSwitchEvent) => { setUpdatedKnowledgeBaseSettings({ ...knowledgeBase, - alerts: event.target.checked, + isEnabledRAGAlerts: event.target.checked, }); }, [knowledgeBase, setUpdatedKnowledgeBaseSettings] @@ -58,7 +58,7 @@ const AlertsSettingsComponent = ({ knowledgeBase, setUpdatedKnowledgeBaseSetting `} > - - - {i18n.ASK_QUESTIONS_ABOUT} - - - - {i18n.LATEST_AND_RISKIEST_OPEN_ALERTS} + {i18n.LATEST_AND_RISKIEST_OPEN_ALERTS(knowledgeBase.latestAlerts)} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx index ebb5afe2f12a1..4c71c1e63f8b3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx @@ -35,14 +35,13 @@ const messages: Message[] = [ { content: 'This is a test', role: 'user', timestamp: new Date().toLocaleString() }, ]; const fetchConnectorArgs: FetchConnectorExecuteAction = { - alerts: false, + isEnabledRAGAlerts: false, apiConfig, - assistantLangChain: true, + isEnabledKnowledgeBase: true, assistantStreamingEnabled: true, http: mockHttp, messages, onNewReplacements: jest.fn(), - ragOnAlerts: false, }; describe('API tests', () => { beforeEach(() => { @@ -50,13 +49,13 @@ describe('API tests', () => { }); describe('fetchConnectorExecuteAction', () => { - it('calls the internal assistant API when assistantLangChain is true', async () => { + it('calls the internal assistant API when isEnabledKnowledgeBase is true', async () => { await fetchConnectorExecuteAction(fetchConnectorArgs); expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"assistantLangChain":true}', + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":false}', headers: { 'Content-Type': 'application/json' }, method: 'POST', signal: undefined, @@ -64,10 +63,10 @@ describe('API tests', () => { ); }); - it('calls the actions connector api with streaming when assistantStreamingEnabled is true when assistantLangChain is false', async () => { + it('calls the actions connector api with streaming when assistantStreamingEnabled is true when isEnabledKnowledgeBase is false', async () => { const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, + isEnabledKnowledgeBase: false, }; await fetchConnectorExecuteAction(testProps); @@ -75,7 +74,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeStream"},"assistantLangChain":false}', + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeStream"},"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false}', method: 'POST', asResponse: true, rawResponse: true, @@ -87,11 +86,10 @@ describe('API tests', () => { it('calls the actions connector with the expected optional request parameters', async () => { const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - alerts: true, + isEnabledRAGAlerts: true, alertsIndexPattern: '.alerts-security.alerts-default', allow: ['a', 'b', 'c'], allowReplacement: ['b', 'c'], - ragOnAlerts: true, replacements: { auuid: 'real.hostname' }, size: 30, }; @@ -101,7 +99,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"assistantLangChain":true,"alertsIndexPattern":".alerts-security.alerts-default","allow":["a","b","c"],"allowReplacement":["b","c"],"replacements":{"auuid":"real.hostname"},"size":30}', + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":true,"alertsIndexPattern":".alerts-security.alerts-default","allow":["a","b","c"],"allowReplacement":["b","c"],"replacements":{"auuid":"real.hostname"},"size":30}', headers: { 'Content-Type': 'application/json', }, @@ -111,10 +109,10 @@ describe('API tests', () => { ); }); - it('calls the actions connector api with invoke when assistantStreamingEnabled is false when assistantLangChain is false', async () => { + it('calls the actions connector api with invoke when assistantStreamingEnabled is false when isEnabledKnowledgeBase is false', async () => { const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, + isEnabledKnowledgeBase: false, assistantStreamingEnabled: false, }; @@ -123,7 +121,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"assistantLangChain":false}', + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false}', method: 'POST', headers: { 'Content-Type': 'application/json', @@ -133,11 +131,11 @@ describe('API tests', () => { ); }); - it('calls the actions connector api with invoke when assistantStreamingEnabled is true when assistantLangChain is false and alerts is true', async () => { + it('calls the actions connector api with invoke when assistantStreamingEnabled is true when isEnabledKnowledgeBase is false and isEnabledRAGAlerts is true', async () => { const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, - alerts: true, + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: true, }; await fetchConnectorExecuteAction(testProps); @@ -145,7 +143,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"assistantLangChain":false}', + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":true}', method: 'POST', headers: { 'Content-Type': 'application/json', @@ -170,7 +168,7 @@ describe('API tests', () => { }); const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, + isEnabledKnowledgeBase: false, assistantStreamingEnabled: false, }; @@ -188,7 +186,7 @@ describe('API tests', () => { const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, + isEnabledKnowledgeBase: false, }; const result = await fetchConnectorExecuteAction(testProps); @@ -207,7 +205,7 @@ describe('API tests', () => { }); const testProps: FetchConnectorExecuteAction = { ...fetchConnectorArgs, - assistantLangChain: false, + isEnabledKnowledgeBase: false, }; const result = await fetchConnectorExecuteAction(testProps); @@ -227,7 +225,7 @@ describe('API tests', () => { expect(result).toEqual({ response: API_ERROR, isStream: false, isError: true }); }); - it('returns the value of the action_input property when assistantLangChain is true, and `content` has properly prefixed and suffixed JSON with the action_input property', async () => { + it('returns the value of the action_input property when isEnabledKnowledgeBase is true, and `content` has properly prefixed and suffixed JSON with the action_input property', async () => { const response = '```json\n{"action_input": "value from action_input"}\n```'; (mockHttp.fetch as jest.Mock).mockResolvedValue({ @@ -244,7 +242,7 @@ describe('API tests', () => { }); }); - it('returns the original content when assistantLangChain is true, and `content` has properly formatted JSON WITHOUT the action_input property', async () => { + it('returns the original content when isEnabledKnowledgeBase is true, and `content` has properly formatted JSON WITHOUT the action_input property', async () => { const response = '```json\n{"some_key": "some value"}\n```'; (mockHttp.fetch as jest.Mock).mockResolvedValue({ @@ -257,7 +255,7 @@ describe('API tests', () => { expect(result).toEqual({ response, isStream: false, isError: false }); }); - it('returns the original when assistantLangChain is true, and `content` is not JSON', async () => { + it('returns the original when isEnabledKnowledgeBase is true, and `content` is not JSON', async () => { const response = 'plain text content'; (mockHttp.fetch as jest.Mock).mockResolvedValue({ diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx index c2bdd4806a99a..f04b99c4e46e1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx @@ -19,17 +19,16 @@ import { import { PerformEvaluationParams } from './settings/evaluation_settings/use_perform_evaluation'; export interface FetchConnectorExecuteAction { - alerts: boolean; + isEnabledRAGAlerts: boolean; alertsIndexPattern?: string; allow?: string[]; allowReplacement?: string[]; - assistantLangChain: boolean; + isEnabledKnowledgeBase: boolean; assistantStreamingEnabled: boolean; apiConfig: Conversation['apiConfig']; http: HttpSetup; messages: Message[]; onNewReplacements: (newReplacements: Record) => void; - ragOnAlerts: boolean; replacements?: Record; signal?: AbortSignal | undefined; size?: number; @@ -46,16 +45,15 @@ export interface FetchConnectorExecuteResponse { } export const fetchConnectorExecuteAction = async ({ - alerts, + isEnabledRAGAlerts, alertsIndexPattern, allow, allowReplacement, - assistantLangChain, + isEnabledKnowledgeBase, assistantStreamingEnabled, http, messages, onNewReplacements, - ragOnAlerts, replacements, apiConfig, signal, @@ -84,13 +82,12 @@ export const fetchConnectorExecuteAction = async ({ // tracked here: https://github.com/elastic/security-team/issues/7363 // In part 3 I will make enhancements to langchain to introduce streaming // Once implemented, invokeAI can be removed - const isStream = assistantStreamingEnabled && !assistantLangChain && !alerts; + const isStream = assistantStreamingEnabled && !isEnabledKnowledgeBase && !isEnabledRAGAlerts; const optionalRequestParams = getOptionalRequestParams({ - alerts, + isEnabledRAGAlerts, alertsIndexPattern, allow, allowReplacement, - ragOnAlerts, replacements, size, }); @@ -101,7 +98,8 @@ export const fetchConnectorExecuteAction = async ({ subActionParams: body, subAction: 'invokeStream', }, - assistantLangChain, + isEnabledKnowledgeBase, + isEnabledRAGAlerts, ...optionalRequestParams, } : { @@ -109,7 +107,8 @@ export const fetchConnectorExecuteAction = async ({ subActionParams: body, subAction: 'invokeAI', }, - assistantLangChain, + isEnabledKnowledgeBase, + isEnabledRAGAlerts, ...optionalRequestParams, }; @@ -190,9 +189,8 @@ export const fetchConnectorExecuteAction = async ({ return { response: hasParsableResponse({ - alerts, - assistantLangChain, - ragOnAlerts, + isEnabledRAGAlerts, + isEnabledKnowledgeBase, }) ? getFormattedMessageContent(response.data) : response.data, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx index 972d3d9099cd0..34d56d100cbae 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx @@ -15,6 +15,7 @@ const assistantTelemetry = { reportAssistantInvoked, reportAssistantMessageSent: () => {}, reportAssistantQuickPrompt: () => {}, + reportAssistantSettingToggled: () => {}, }; describe('AssistantOverlay', () => { beforeEach(() => { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx index ac72fc27dd891..e866cad765456 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx @@ -33,8 +33,7 @@ export const AssistantOverlay = React.memo(() => { WELCOME_CONVERSATION_TITLE ); const [promptContextId, setPromptContextId] = useState(); - const { assistantTelemetry, setShowAssistantOverlay, localStorageLastConversationId } = - useAssistantContext(); + const { assistantTelemetry, setShowAssistantOverlay, getConversationId } = useAssistantContext(); // Bind `showAssistantOverlay` in SecurityAssistantContext to this modal instance const showOverlay = useCallback( @@ -44,16 +43,18 @@ export const AssistantOverlay = React.memo(() => { promptContextId: pid, conversationId: cid, }: ShowAssistantOverlayProps) => { + const newConversationId = getConversationId(cid); if (so) assistantTelemetry?.reportAssistantInvoked({ - conversationId: cid ?? 'unknown', + conversationId: newConversationId, invokedBy: 'click', }); + setIsModalVisible(so); setPromptContextId(pid); - setConversationId(cid); + setConversationId(newConversationId); }, - [assistantTelemetry] + [assistantTelemetry, getConversationId] ); useEffect(() => { setShowAssistantOverlay(showOverlay); @@ -63,15 +64,15 @@ export const AssistantOverlay = React.memo(() => { const handleShortcutPress = useCallback(() => { // Try to restore the last conversation on shortcut pressed if (!isModalVisible) { - setConversationId(localStorageLastConversationId ?? WELCOME_CONVERSATION_TITLE); + setConversationId(getConversationId()); assistantTelemetry?.reportAssistantInvoked({ invokedBy: 'shortcut', - conversationId: localStorageLastConversationId ?? WELCOME_CONVERSATION_TITLE, + conversationId: getConversationId(), }); } setIsModalVisible(!isModalVisible); - }, [assistantTelemetry, isModalVisible, localStorageLastConversationId]); + }, [assistantTelemetry, isModalVisible, getConversationId]); // Register keyboard listener to show the modal when cmd + ; is pressed const onKeyDown = useCallback( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts index 0c3c5a579d274..b176a229bcca7 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts @@ -235,29 +235,12 @@ describe('getBlockBotConversation', () => { }); describe('getOptionalRequestParams', () => { - it('should return an empty object when ragOnAlerts is false', () => { - const params = { - alerts: true, - alertsIndexPattern: 'indexPattern', - allow: ['a', 'b', 'c'], - allowReplacement: ['b', 'c'], - ragOnAlerts: false, // <-- false - replacements: { key: 'value' }, - size: 10, - }; - - const result = getOptionalRequestParams(params); - - expect(result).toEqual({}); - }); - it('should return an empty object when alerts is false', () => { const params = { - alerts: false, // <-- false + isEnabledRAGAlerts: false, // <-- false alertsIndexPattern: 'indexPattern', allow: ['a', 'b', 'c'], allowReplacement: ['b', 'c'], - ragOnAlerts: true, replacements: { key: 'value' }, size: 10, }; @@ -267,13 +250,12 @@ describe('getBlockBotConversation', () => { expect(result).toEqual({}); }); - it('should return the optional request params when ragOnAlerts is true and alerts is true', () => { + it('should return the optional request params when alerts is true', () => { const params = { - alerts: true, + isEnabledRAGAlerts: true, alertsIndexPattern: 'indexPattern', allow: ['a', 'b', 'c'], allowReplacement: ['b', 'c'], - ragOnAlerts: true, replacements: { key: 'value' }, size: 10, }; @@ -291,8 +273,7 @@ describe('getBlockBotConversation', () => { it('should return (only) the optional request params that are defined when some optional params are not provided', () => { const params = { - alerts: true, - ragOnAlerts: true, + isEnabledRAGAlerts: true, allow: ['a', 'b', 'c'], // all the others are undefined }; @@ -305,31 +286,37 @@ describe('getBlockBotConversation', () => { }); describe('hasParsableResponse', () => { - it('returns true when assistantLangChain is true', () => { + it('returns true when just isEnabledKnowledgeBase is true', () => { + const result = hasParsableResponse({ + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: true, + }); + + expect(result).toBe(true); + }); + + it('returns true when just isEnabledRAGAlerts is true', () => { const result = hasParsableResponse({ - alerts: false, - assistantLangChain: true, - ragOnAlerts: false, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: false, }); expect(result).toBe(true); }); - it('returns true when ragOnAlerts is true and alerts is true', () => { + it('returns true when both isEnabledKnowledgeBase and isEnabledRAGAlerts are true', () => { const result = hasParsableResponse({ - alerts: true, - assistantLangChain: false, - ragOnAlerts: true, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: true, }); expect(result).toBe(true); }); - it('returns false when assistantLangChain, ragOnAlerts, and alerts are all false', () => { + it('returns false when both isEnabledKnowledgeBase and isEnabledRAGAlerts are false', () => { const result = hasParsableResponse({ - alerts: false, - assistantLangChain: false, - ragOnAlerts: false, + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, }); expect(result).toBe(false); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts index 688416d2e738c..f7ea3f52c8826 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts @@ -97,19 +97,17 @@ interface OptionalRequestParams { } export const getOptionalRequestParams = ({ - alerts, + isEnabledRAGAlerts, alertsIndexPattern, allow, allowReplacement, - ragOnAlerts, replacements, size, }: { - alerts: boolean; + isEnabledRAGAlerts: boolean; alertsIndexPattern?: string; allow?: string[]; allowReplacement?: string[]; - ragOnAlerts: boolean; replacements?: Record; size?: number; }): OptionalRequestParams => { @@ -119,10 +117,8 @@ export const getOptionalRequestParams = ({ const optionalReplacements = replacements ? { replacements } : undefined; const optionalSize = size ? { size } : undefined; - if ( - !ragOnAlerts || // the feature flag must be enabled - !alerts // the settings toggle must also be enabled - ) { + // the settings toggle must be enabled: + if (!isEnabledRAGAlerts) { return {}; // don't send any optional params } @@ -136,11 +132,9 @@ export const getOptionalRequestParams = ({ }; export const hasParsableResponse = ({ - alerts, - assistantLangChain, - ragOnAlerts, + isEnabledRAGAlerts, + isEnabledKnowledgeBase, }: { - alerts: boolean; - assistantLangChain: boolean; - ragOnAlerts: boolean; -}): boolean => assistantLangChain || (ragOnAlerts && alerts); + isEnabledRAGAlerts: boolean; + isEnabledKnowledgeBase: boolean; +}): boolean => isEnabledKnowledgeBase || isEnabledRAGAlerts; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index 86e0f3a460055..190eee654bc67 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -83,7 +83,7 @@ const AssistantComponent: React.FC = ({ http, promptContexts, setLastConversationId, - localStorageLastConversationId, + getConversationId, title, allSystemPrompts, } = useAssistantContext(); @@ -113,12 +113,7 @@ const AssistantComponent: React.FC = ({ ); const [selectedConversationId, setSelectedConversationId] = useState( - isAssistantEnabled - ? // if a conversationId has been provided, use that - // if not, check local storage - // last resort, go to welcome conversation - conversationId ?? localStorageLastConversationId ?? WELCOME_CONVERSATION_TITLE - : WELCOME_CONVERSATION_TITLE + isAssistantEnabled ? getConversationId(conversationId) : WELCOME_CONVERSATION_TITLE ); useEffect(() => { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx index cb1050c895b8e..fc62c00a99727 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/select_system_prompt/index.test.tsx @@ -48,6 +48,10 @@ const mockUseAssistantContext = { }, ], setAllSystemPrompts: jest.fn(), + knowledgeBase: { + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, + }, }; jest.mock('../../../../assistant_context', () => { const original = jest.requireActual('../../../../assistant_context'); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx index 517d52667c45a..46e5ecfb76f39 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.test.tsx @@ -26,7 +26,7 @@ const mockUseAssistantContext = { promptContexts: {}, allQuickPrompts: MOCK_QUICK_PROMPTS, knowledgeBase: { - assistantLangChain: true, + isEnabledKnowledgeBase: true, }, }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx index f475f052f180b..a4731ef54f801 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/quick_prompts/quick_prompts.tsx @@ -41,7 +41,7 @@ export const QuickPrompts: React.FC = React.memo( const contextFilteredQuickPrompts = useMemo(() => { const registeredPromptContextTitles = Object.values(promptContexts).map((pc) => pc.category); // If KB is enabled, include KNOWLEDGE_BASE_CATEGORY so KB dependent quick prompts are shown - if (knowledgeBase.assistantLangChain) { + if (knowledgeBase.isEnabledKnowledgeBase) { registeredPromptContextTitles.push(KNOWLEDGE_BASE_CATEGORY); } return allQuickPrompts.filter((quickPrompt) => { @@ -54,7 +54,7 @@ export const QuickPrompts: React.FC = React.memo( }); } }); - }, [allQuickPrompts, knowledgeBase.assistantLangChain, promptContexts]); + }, [allQuickPrompts, knowledgeBase.isEnabledKnowledgeBase, promptContexts]); // Overflow state const [isOverflowPopoverOpen, setIsOverflowPopoverOpen] = useState(false); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx index 975e5c8e27db7..af73fa31293b3 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.test.tsx @@ -33,15 +33,18 @@ const setConversationsMock = jest.fn(); const setDefaultAllowMock = jest.fn(); const setDefaultAllowReplacementMock = jest.fn(); const setKnowledgeBaseMock = jest.fn(); - +const reportAssistantSettingToggled = jest.fn(); const mockValues = { + assistantTelemetry: { reportAssistantSettingToggled }, conversations: mockConversations, allSystemPrompts: mockSystemPrompts, allQuickPrompts: mockQuickPrompts, defaultAllow: initialDefaultAllow, defaultAllowReplacement: initialDefaultAllowReplacement, knowledgeBase: { - assistantLangChain: true, + isEnabledRAGAlerts: true, + isEnabledKnowledgeBase: true, + latestAlerts: DEFAULT_LATEST_ALERTS, }, setAllQuickPrompts: setAllQuickPromptsMock, setConversations: setConversationsMock, @@ -58,8 +61,8 @@ const updatedValues = { defaultAllow: ['allow2'], defaultAllowReplacement: ['replacement2'], knowledgeBase: { - alerts: false, - assistantLangChain: false, + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }, }; @@ -73,6 +76,9 @@ jest.mock('../../../assistant_context', () => { }); describe('useSettingsUpdater', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); it('should set all state variables to their initial values when resetSettings is called', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => useSettingsUpdater()); @@ -144,4 +150,46 @@ describe('useSettingsUpdater', () => { expect(setKnowledgeBaseMock).toHaveBeenCalledWith(updatedValues.knowledgeBase); }); }); + it('should track which toggles have been updated when saveSettings is called', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useSettingsUpdater()); + await waitForNextUpdate(); + const { setUpdatedKnowledgeBaseSettings } = result.current; + + setUpdatedKnowledgeBaseSettings(updatedValues.knowledgeBase); + + result.current.saveSettings(); + expect(reportAssistantSettingToggled).toHaveBeenCalledWith({ + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: false, + }); + }); + }); + it('should track only toggles that updated', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useSettingsUpdater()); + await waitForNextUpdate(); + const { setUpdatedKnowledgeBaseSettings } = result.current; + + setUpdatedKnowledgeBaseSettings({ + ...updatedValues.knowledgeBase, + isEnabledKnowledgeBase: true, + }); + result.current.saveSettings(); + expect(reportAssistantSettingToggled).toHaveBeenCalledWith({ + isEnabledRAGAlerts: false, + }); + }); + }); + it('if no toggles update, do not track anything', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useSettingsUpdater()); + await waitForNextUpdate(); + const { setUpdatedKnowledgeBaseSettings } = result.current; + + setUpdatedKnowledgeBaseSettings(mockValues.knowledgeBase); + result.current.saveSettings(); + expect(reportAssistantSettingToggled).not.toHaveBeenCalledWith(); + }); + }); }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx index 0dfd6ebe2904c..63c9d7217e947 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/use_settings_updater/use_settings_updater.tsx @@ -34,6 +34,7 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { const { allQuickPrompts, allSystemPrompts, + assistantTelemetry, conversations, defaultAllow, defaultAllowReplacement, @@ -92,10 +93,27 @@ export const useSettingsUpdater = (): UseSettingsUpdater => { setAllQuickPrompts(updatedQuickPromptSettings); setAllSystemPrompts(updatedSystemPromptSettings); setConversations(updatedConversationSettings); + const didUpdateKnowledgeBase = + knowledgeBase.isEnabledKnowledgeBase !== updatedKnowledgeBaseSettings.isEnabledKnowledgeBase; + const didUpdateRAGAlerts = + knowledgeBase.isEnabledRAGAlerts !== updatedKnowledgeBaseSettings.isEnabledRAGAlerts; + if (didUpdateKnowledgeBase || didUpdateRAGAlerts) { + assistantTelemetry?.reportAssistantSettingToggled({ + ...(didUpdateKnowledgeBase + ? { isEnabledKnowledgeBase: updatedKnowledgeBaseSettings.isEnabledKnowledgeBase } + : {}), + ...(didUpdateRAGAlerts + ? { isEnabledRAGAlerts: updatedKnowledgeBaseSettings.isEnabledRAGAlerts } + : {}), + }); + } setKnowledgeBase(updatedKnowledgeBaseSettings); setDefaultAllow(updatedDefaultAllow); setDefaultAllowReplacement(updatedDefaultAllowReplacement); }, [ + assistantTelemetry, + knowledgeBase.isEnabledRAGAlerts, + knowledgeBase.isEnabledKnowledgeBase, setAllQuickPrompts, setAllSystemPrompts, setConversations, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts index 303aae0f6ff9c..e7cb6f79f243a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/types.ts @@ -17,7 +17,7 @@ export interface Prompt { } export interface KnowledgeBaseConfig { - alerts: boolean; - assistantLangChain: boolean; + isEnabledRAGAlerts: boolean; + isEnabledKnowledgeBase: boolean; latestAlerts: number; } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx index 562a252bf8111..be94a164364aa 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx @@ -36,6 +36,9 @@ const mockConvo = { }; describe('useConversation', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); it('should append a message to an existing conversation when called with valid conversationId and message', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => useConversation(), { @@ -63,6 +66,43 @@ describe('useConversation', () => { }); }); + it('should report telemetry when a message has been sent', async () => { + await act(async () => { + const reportAssistantMessageSent = jest.fn(); + const { result, waitForNextUpdate } = renderHook(() => useConversation(), { + wrapper: ({ children }) => ( + ({ + [alertConvo.id]: alertConvo, + [welcomeConvo.id]: welcomeConvo, + }), + assistantTelemetry: { + reportAssistantInvoked: () => {}, + reportAssistantQuickPrompt: () => {}, + reportAssistantSettingToggled: () => {}, + reportAssistantMessageSent, + }, + }} + > + {children} + + ), + }); + await waitForNextUpdate(); + result.current.appendMessage({ + conversationId: welcomeConvo.id, + message, + }); + expect(reportAssistantMessageSent).toHaveBeenCalledWith({ + conversationId: 'Welcome', + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: false, + role: 'user', + }); + }); + }); + it('should create a new conversation when called with valid conversationId and message', async () => { await act(async () => { const { result, waitForNextUpdate } = renderHook(() => useConversation(), { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.tsx index 3bd9f3fcbff71..11a21641b1bd4 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.tsx @@ -75,7 +75,12 @@ interface UseConversation { } export const useConversation = (): UseConversation => { - const { allSystemPrompts, assistantTelemetry, setConversations } = useAssistantContext(); + const { + allSystemPrompts, + assistantTelemetry, + knowledgeBase: { isEnabledKnowledgeBase, isEnabledRAGAlerts }, + setConversations, + } = useAssistantContext(); /** * Removes the last message of conversation[] for a given conversationId @@ -140,7 +145,12 @@ export const useConversation = (): UseConversation => { */ const appendMessage = useCallback( ({ conversationId, message }: AppendMessageProps): Message[] => { - assistantTelemetry?.reportAssistantMessageSent({ conversationId, role: message.role }); + assistantTelemetry?.reportAssistantMessageSent({ + conversationId, + role: message.role, + isEnabledKnowledgeBase, + isEnabledRAGAlerts, + }); let messages: Message[] = []; setConversations((prev: Record) => { const prevConversation: Conversation | undefined = prev[conversationId]; @@ -161,7 +171,7 @@ export const useConversation = (): UseConversation => { }); return messages; }, - [assistantTelemetry, setConversations] + [isEnabledKnowledgeBase, isEnabledRAGAlerts, assistantTelemetry, setConversations] ); const appendReplacements = useCallback( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx index fcfbadb574bbd..eae7d7914e6a1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_send_messages/index.tsx @@ -37,7 +37,6 @@ export const useSendMessages = (): UseSendMessages => { assistantStreamingEnabled, defaultAllow, defaultAllowReplacement, - ragOnAlerts, knowledgeBase, } = useAssistantContext(); const [isLoading, setIsLoading] = useState(false); @@ -48,15 +47,14 @@ export const useSendMessages = (): UseSendMessages => { try { return await fetchConnectorExecuteAction({ - alerts: knowledgeBase.alerts, // settings toggle + isEnabledRAGAlerts: knowledgeBase.isEnabledRAGAlerts, // settings toggle alertsIndexPattern, allow: defaultAllow, allowReplacement: defaultAllowReplacement, apiConfig, - assistantLangChain: knowledgeBase.assistantLangChain, + isEnabledKnowledgeBase: knowledgeBase.isEnabledKnowledgeBase, assistantStreamingEnabled, http, - ragOnAlerts, // feature flag replacements, messages, size: knowledgeBase.latestAlerts, @@ -71,10 +69,9 @@ export const useSendMessages = (): UseSendMessages => { assistantStreamingEnabled, defaultAllow, defaultAllowReplacement, - knowledgeBase.alerts, - knowledgeBase.assistantLangChain, + knowledgeBase.isEnabledRAGAlerts, + knowledgeBase.isEnabledKnowledgeBase, knowledgeBase.latestAlerts, - ragOnAlerts, ] ); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx index 780a2a04a9728..cc747a705b851 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/constants.tsx @@ -17,7 +17,7 @@ export const KNOWLEDGE_BASE_LOCAL_STORAGE_KEY = 'knowledgeBase'; export const DEFAULT_LATEST_ALERTS = 20; export const DEFAULT_KNOWLEDGE_BASE_SETTINGS: KnowledgeBaseConfig = { - alerts: false, - assistantLangChain: false, + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx index 61f8352e0d325..84a2ac40a6f24 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.test.tsx @@ -12,7 +12,11 @@ import { AssistantProvider, useAssistantContext } from '.'; import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { actionTypeRegistryMock } from '@kbn/triggers-actions-ui-plugin/public/application/action_type_registry.mock'; import { AssistantAvailability } from '../..'; +import { useLocalStorage } from 'react-use'; +jest.mock('react-use', () => ({ + useLocalStorage: jest.fn().mockReturnValue(['456', jest.fn()]), +})); const actionTypeRegistry = actionTypeRegistryMock.create(); const mockGetInitialConversations = jest.fn(() => ({})); const mockGetComments = jest.fn(() => []); @@ -70,4 +74,23 @@ describe('AssistantContext', () => { expect(mockHttp.fetch).toBeCalledWith(path); }); + + test('getConversationId defaults to provided id', async () => { + const { result } = renderHook(useAssistantContext, { wrapper: ContextWrapper }); + const id = result.current.getConversationId('123'); + expect(id).toEqual('123'); + }); + + test('getConversationId uses local storage id when no id is provided ', async () => { + const { result } = renderHook(useAssistantContext, { wrapper: ContextWrapper }); + const id = result.current.getConversationId(); + expect(id).toEqual('456'); + }); + + test('getConversationId defaults to Welcome when no local storage id and no id is provided ', async () => { + (useLocalStorage as jest.Mock).mockReturnValue([undefined, jest.fn()]); + const { result } = renderHook(useAssistantContext, { wrapper: ContextWrapper }); + const id = result.current.getConversationId(); + expect(id).toEqual('Welcome'); + }); }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx index 4d0eec97f2639..50a3211f74f3c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx @@ -13,6 +13,7 @@ import type { IToasts } from '@kbn/core-notifications-browser'; import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; import { useLocalStorage } from 'react-use'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; +import { WELCOME_CONVERSATION_TITLE } from '../assistant/use_conversation/translations'; import { updatePromptContexts } from './helpers'; import type { PromptContext, @@ -88,7 +89,6 @@ export interface AssistantProviderProps { getInitialConversations: () => Record; modelEvaluatorEnabled?: boolean; nameSpace?: string; - ragOnAlerts?: boolean; setConversations: React.Dispatch>>; setDefaultAllow: React.Dispatch>; setDefaultAllowReplacement: React.Dispatch>; @@ -136,11 +136,10 @@ export interface UseAssistantContext { }) => EuiCommentProps[]; http: HttpSetup; knowledgeBase: KnowledgeBaseConfig; - localStorageLastConversationId: string | undefined; + getConversationId: (id?: string) => string; promptContexts: Record; modelEvaluatorEnabled: boolean; nameSpace: string; - ragOnAlerts: boolean; registerPromptContext: RegisterPromptContext; selectedSettingsTab: SettingsTabs; setAllQuickPrompts: React.Dispatch>; @@ -182,7 +181,6 @@ export const AssistantProvider: React.FC = ({ getInitialConversations, modelEvaluatorEnabled = false, nameSpace = DEFAULT_ASSISTANT_NAMESPACE, - ragOnAlerts = false, setConversations, setDefaultAllow, setDefaultAllowReplacement, @@ -292,6 +290,14 @@ export const AssistantProvider: React.FC = ({ [setConversations] ); + const getConversationId = useCallback( + // if a conversationId has been provided, use that + // if not, check local storage + // last resort, go to welcome conversation + (id?: string) => id ?? localStorageLastConversationId ?? WELCOME_CONVERSATION_TITLE, + [localStorageLastConversationId] + ); + const value = useMemo( () => ({ actionTypeRegistry, @@ -315,11 +321,10 @@ export const AssistantProvider: React.FC = ({ docLinks, getComments, http, - knowledgeBase: localStorageKnowledgeBase ?? DEFAULT_KNOWLEDGE_BASE_SETTINGS, + knowledgeBase: { ...DEFAULT_KNOWLEDGE_BASE_SETTINGS, ...localStorageKnowledgeBase }, modelEvaluatorEnabled, promptContexts, nameSpace, - ragOnAlerts, registerPromptContext, selectedSettingsTab, setAllQuickPrompts: setLocalStorageQuickPrompts, @@ -334,7 +339,7 @@ export const AssistantProvider: React.FC = ({ title, toasts, unRegisterPromptContext, - localStorageLastConversationId, + getConversationId, setLastConversationId: setLocalStorageLastConversationId, }), [ @@ -358,14 +363,13 @@ export const AssistantProvider: React.FC = ({ getComments, http, localStorageKnowledgeBase, - localStorageLastConversationId, + getConversationId, localStorageQuickPrompts, localStorageSystemPrompts, modelEvaluatorEnabled, nameSpace, onConversationsUpdated, promptContexts, - ragOnAlerts, registerPromptContext, selectedSettingsTab, setDefaultAllow, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx index 982b74faabf8d..bf95b7d400240 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant_context/types.tsx @@ -67,8 +67,17 @@ export interface Conversation { export interface AssistantTelemetry { reportAssistantInvoked: (params: { invokedBy: string; conversationId: string }) => void; - reportAssistantMessageSent: (params: { conversationId: string; role: string }) => void; + reportAssistantMessageSent: (params: { + conversationId: string; + role: string; + isEnabledKnowledgeBase: boolean; + isEnabledRAGAlerts: boolean; + }) => void; reportAssistantQuickPrompt: (params: { conversationId: string; promptTitle: string }) => void; + reportAssistantSettingToggled: (params: { + isEnabledKnowledgeBase?: boolean; + isEnabledRAGAlerts?: boolean; + }) => void; } export interface AssistantAvailability { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx index 06c1b33bfda85..20ab3aab4a26f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.test.tsx @@ -22,7 +22,6 @@ const mockUseAssistantContext = { prepend: jest.fn(), }, }, - ragOnAlerts: true, setAllSystemPrompts: jest.fn(), setConversations: jest.fn(), }; @@ -39,8 +38,8 @@ jest.mock('../assistant_context', () => { const setUpdatedKnowledgeBaseSettings = jest.fn(); const defaultProps = { knowledgeBase: { - assistantLangChain: true, - alerts: false, + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: false, latestAlerts: DEFAULT_LATEST_ALERTS, }, setUpdatedKnowledgeBaseSettings, @@ -118,16 +117,16 @@ describe('Knowledge base settings', () => { fireEvent.click(getByTestId('esqlEnableButton')); expect(mockSetup).toHaveBeenCalledWith('esql'); }); - it('On disable lang chain, set assistantLangChain to false', () => { + it('On disable lang chain, set isEnabledKnowledgeBase to false', () => { const { getByTestId } = render( ); - fireEvent.click(getByTestId('assistantLangChainSwitch')); + fireEvent.click(getByTestId('isEnabledKnowledgeBaseSwitch')); expect(setUpdatedKnowledgeBaseSettings).toHaveBeenCalledWith({ - alerts: false, - assistantLangChain: false, + isEnabledRAGAlerts: false, + isEnabledKnowledgeBase: false, latestAlerts: DEFAULT_LATEST_ALERTS, }); @@ -139,17 +138,17 @@ describe('Knowledge base settings', () => { ); - fireEvent.click(getByTestId('assistantLangChainSwitch')); + fireEvent.click(getByTestId('isEnabledKnowledgeBaseSwitch')); expect(setUpdatedKnowledgeBaseSettings).toHaveBeenCalledWith({ - assistantLangChain: true, - alerts: false, + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: false, latestAlerts: DEFAULT_LATEST_ALERTS, }); @@ -210,7 +209,7 @@ describe('Knowledge base settings', () => { expect(queryByTestId('knowledgeBaseActionButton')).not.toBeInTheDocument(); }); - it('renders the alerts settings when ragOnAlerts is true', () => { + it('renders the alerts settings', () => { const { getByTestId } = render( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx index bd41f5b888c93..f30215eaac521 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/knowledge_base_settings.tsx @@ -47,7 +47,7 @@ interface Props { */ export const KnowledgeBaseSettings: React.FC = React.memo( ({ knowledgeBase, setUpdatedKnowledgeBaseSettings }) => { - const { http, ragOnAlerts } = useAssistantContext(); + const { http } = useAssistantContext(); const { data: kbStatus, isLoading, @@ -63,11 +63,11 @@ export const KnowledgeBaseSettings: React.FC = React.memo( // Resource availability state const isLoadingKb = isLoading || isFetching || isSettingUpKB || isDeletingUpKB; - const isKnowledgeBaseAvailable = knowledgeBase.assistantLangChain && kbStatus?.elser_exists; + const isKnowledgeBaseAvailable = knowledgeBase.isEnabledKnowledgeBase && kbStatus?.elser_exists; const isESQLAvailable = - knowledgeBase.assistantLangChain && isKnowledgeBaseAvailable && isKnowledgeBaseEnabled; + knowledgeBase.isEnabledKnowledgeBase && isKnowledgeBaseAvailable && isKnowledgeBaseEnabled; // Prevent enabling if elser doesn't exist, but always allow to disable - const isSwitchDisabled = !kbStatus?.elser_exists && !knowledgeBase.assistantLangChain; + const isSwitchDisabled = !kbStatus?.elser_exists && !knowledgeBase.isEnabledKnowledgeBase; // Calculated health state for EuiHealth component const elserHealth = isElserEnabled ? 'success' : 'subdued'; @@ -75,13 +75,13 @@ export const KnowledgeBaseSettings: React.FC = React.memo( const esqlHealth = isESQLEnabled ? 'success' : 'subdued'; ////////////////////////////////////////////////////////////////////////////////////////// - // Main `Knowledge Base` switch, which toggles the `assistantLangChain` UI feature toggle + // Main `Knowledge Base` switch, which toggles the `isEnabledKnowledgeBase` UI feature toggle // setting that is saved to localstorage const onEnableAssistantLangChainChange = useCallback( (event: EuiSwitchEvent) => { setUpdatedKnowledgeBaseSettings({ ...knowledgeBase, - assistantLangChain: event.target.checked, + isEnabledKnowledgeBase: event.target.checked, }); // If enabling and ELSER exists, try to set up automatically @@ -92,16 +92,16 @@ export const KnowledgeBaseSettings: React.FC = React.memo( [kbStatus?.elser_exists, knowledgeBase, setUpdatedKnowledgeBaseSettings, setupKB] ); - const assistantLangChainSwitch = useMemo(() => { + const isEnabledKnowledgeBaseSwitch = useMemo(() => { return isLoadingKb ? ( ) : ( = React.memo( }, [ isLoadingKb, isSwitchDisabled, - knowledgeBase.assistantLangChain, + knowledgeBase.isEnabledKnowledgeBase, onEnableAssistantLangChainChange, ]); @@ -221,7 +221,7 @@ export const KnowledgeBaseSettings: React.FC = React.memo( } `} > - {assistantLangChainSwitch} + {isEnabledKnowledgeBaseSwitch} @@ -303,12 +303,10 @@ export const KnowledgeBaseSettings: React.FC = React.memo( - {ragOnAlerts && ( - - )} + ); } diff --git a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/translations.ts index 03e989ab6a055..e1b176e9dcaa7 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/knowledge_base/translations.ts @@ -21,25 +21,27 @@ export const ASK_QUESTIONS_ABOUT = i18n.translate( } ); -export const LATEST_AND_RISKIEST_OPEN_ALERTS = i18n.translate( - 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.latestAndRiskiestOpenAlertsLabel', - { - defaultMessage: 'latest and riskiest open and acknowledged alerts in your environment.', - } -); +export const LATEST_AND_RISKIEST_OPEN_ALERTS = (alertsCount: number) => + i18n.translate( + 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.latestAndRiskiestOpenAlertsLabel', + { + defaultMessage: + 'Send AI Assistant information about your {alertsCount} newest and riskiest open or acknowledged alerts.', + values: { alertsCount }, + } + ); export const YOUR_ANONYMIZATION_SETTINGS = i18n.translate( 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.yourAnonymizationSettingsLabel', { - defaultMessage: 'Your Anonymization settings will be applied to the alerts.', + defaultMessage: 'Your anonymization settings will apply to these alerts.', } ); export const SELECT_FEWER_ALERTS = i18n.translate( 'xpack.elasticAssistant.assistant.settings.knowledgeBaseSettings.selectFewerAlertsLabel', { - defaultMessage: - "Select fewer alerts if the model's maximum context length is frequently exceeded.", + defaultMessage: "Send fewer alerts if the model's context window is too small.", } ); diff --git a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx index 1f7495e431298..40a9256f9ba07 100644 --- a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx +++ b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/index.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiRange, EuiText, useEuiTheme } from '@elastic/eui'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { TooltipWrapper } from './tooltip_wrapper'; +import { TooltipWrapper } from '@kbn/visualization-utils'; export interface ControlSliderProps { /** Allowed values to show on the Control Slider */ diff --git a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx b/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx deleted file mode 100644 index 5ab7800e05349..0000000000000 --- a/x-pack/packages/kbn-random-sampling/src/ui/slider_control/tooltip_wrapper.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiToolTip, EuiToolTipProps } from '@elastic/eui'; - -export type TooltipWrapperProps = Partial> & { - tooltipContent: string; - /** When the condition is truthy, the tooltip will be shown */ - condition: boolean; -}; - -export const TooltipWrapper: React.FunctionComponent = ({ - children, - condition, - tooltipContent, - ...tooltipProps -}) => { - return ( - <> - {condition ? ( - - <>{children} - - ) : ( - children - )} - - ); -}; diff --git a/x-pack/packages/kbn-random-sampling/tsconfig.json b/x-pack/packages/kbn-random-sampling/tsconfig.json index 5c5673e4b6787..b4b34fcb94036 100644 --- a/x-pack/packages/kbn-random-sampling/tsconfig.json +++ b/x-pack/packages/kbn-random-sampling/tsconfig.json @@ -13,6 +13,7 @@ ], "kbn_references": [ "@kbn/i18n-react", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/x-pack/performance/journeys/apm_service_inventory.ts b/x-pack/performance/journeys/apm_service_inventory.ts index 84f2518575df8..cbef53858eea6 100644 --- a/x-pack/performance/journeys/apm_service_inventory.ts +++ b/x-pack/performance/journeys/apm_service_inventory.ts @@ -11,8 +11,6 @@ import { SynthtraceClient } from '../services/synthtrace'; import { generateData } from '../synthtrace_data/apm_data'; export const journey = new Journey({ - // FAILING VERSION BUMP: https://github.com/elastic/kibana/issues/172757 - skipped: true, beforeSteps: async ({ kbnUrl, log, auth, es }) => { // Install APM Package const synthClient = new SynthtraceClient({ diff --git a/x-pack/plugins/actions/common/connector_feature_config.ts b/x-pack/plugins/actions/common/connector_feature_config.ts index 61a67087da9fa..fb61ff35da6b7 100644 --- a/x-pack/plugins/actions/common/connector_feature_config.ts +++ b/x-pack/plugins/actions/common/connector_feature_config.ts @@ -26,6 +26,7 @@ export const CasesConnectorFeatureId = 'cases'; export const UptimeConnectorFeatureId = 'uptime'; export const SecurityConnectorFeatureId = 'siem'; export const GenerativeAIConnectorFeatureId = 'generativeAI'; +export const GenerativeAIForObservabilityConnectorFeatureId = 'generativeAIForObservability'; const compatibilityGenerativeAI = i18n.translate( 'xpack.actions.availableConnectorFeatures.compatibility.generativeAI', @@ -34,6 +35,13 @@ const compatibilityGenerativeAI = i18n.translate( } ); +const compatibilityGenerativeAIForObservability = i18n.translate( + 'xpack.actions.availableConnectorFeatures.compatibility.generativeAIForObservability', + { + defaultMessage: 'Generative AI For Observability', + } +); + const compatibilityAlertingRules = i18n.translate( 'xpack.actions.availableConnectorFeatures.compatibility.alertingRules', { @@ -86,12 +94,19 @@ export const GenerativeAIFeature: ConnectorFeatureConfig = { compatibility: compatibilityGenerativeAI, }; +export const GenerativeAIForObservabilityFeature: ConnectorFeatureConfig = { + id: GenerativeAIForObservabilityConnectorFeatureId, + name: compatibilityGenerativeAIForObservability, + compatibility: compatibilityGenerativeAIForObservability, +}; + const AllAvailableConnectorFeatures = { [AlertingConnectorFeature.id]: AlertingConnectorFeature, [CasesConnectorFeature.id]: CasesConnectorFeature, [UptimeConnectorFeature.id]: UptimeConnectorFeature, [SecuritySolutionFeature.id]: SecuritySolutionFeature, [GenerativeAIFeature.id]: GenerativeAIFeature, + [GenerativeAIForObservabilityFeature.id]: GenerativeAIForObservabilityFeature, }; export function areValidFeatures(ids: string[]) { diff --git a/x-pack/plugins/actions/common/types.ts b/x-pack/plugins/actions/common/types.ts index 44d7516595d19..2560cbae3f7e7 100644 --- a/x-pack/plugins/actions/common/types.ts +++ b/x-pack/plugins/actions/common/types.ts @@ -6,6 +6,7 @@ */ import { LicenseType } from '@kbn/licensing-plugin/common/types'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; export { AlertingConnectorFeatureId, @@ -47,6 +48,7 @@ export interface ActionTypeExecutorResult { serviceMessage?: string; data?: Data; retry?: null | boolean | Date; + errorSource?: TaskErrorSource; } export type ActionTypeExecutorRawResult = ActionTypeExecutorResult & { diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index c58e16a11aa4a..9af58047878d1 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -23,6 +23,8 @@ import { securityMock } from '@kbn/security-plugin/server/mocks'; import { finished } from 'stream/promises'; import { PassThrough } from 'stream'; import { SecurityConnectorFeatureId } from '../../common'; +import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; const actionExecutor = new ActionExecutor({ isESOCanEncrypt: true }); const services = actionsMock.createServices(); @@ -720,6 +722,7 @@ test('successfully executes with system connector', async () => { secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); expect(loggerMock.debug).toBeCalledWith( @@ -812,6 +815,75 @@ test('successfully executes with system connector', async () => { `); }); +test('passes the Kibana request on the executor of a system action', async () => { + const actionType: jest.Mocked = { + id: '.cases', + name: 'Cases', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['alerting'], + isSystemActionType: true, + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn(), + }; + + actionTypeRegistry.get.mockReturnValueOnce(actionType); + await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); + + expect(actionType.executor).toHaveBeenCalledWith({ + actionId: 'system-connector-.cases', + services: expect.anything(), + config: {}, + secrets: {}, + params: { foo: true }, + logger: loggerMock, + request: {}, + }); +}); + +test('does not pass the Kibana request on the executor if the action is not a system action', async () => { + const actionType: jest.Mocked = { + id: 'test', + name: 'Test', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.object({ bar: schema.boolean() }) }, + secrets: { schema: schema.object({ baz: schema.boolean() }) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + }, + executor: jest.fn(), + }; + + const actionSavedObject = { + id: '1', + type: 'action', + attributes: { + name: '1', + actionTypeId: 'test', + config: { + bar: true, + }, + secrets: { + baz: true, + }, + isMissingSecrets: false, + }, + references: [], + }; + + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); + actionTypeRegistry.get.mockReturnValueOnce(actionType); + await actionExecutor.execute(executeParams); + + const args = actionType.executor.mock.calls[0][0]; + + expect(args.request).toBeUndefined(); +}); + test('successfully authorize system actions', async () => { const actionType: jest.Mocked = { id: '.cases', @@ -841,6 +913,53 @@ test('successfully authorize system actions', async () => { }); }); +test('actionType Executor returns status "error" and an error message', async () => { + const actionType: jest.Mocked = { + id: 'test', + name: 'Test', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn().mockReturnValue({ + actionId: 'test', + status: 'error', + message: 'test error message', + retry: true, + }), + }; + const actionSavedObject = { + id: '1', + type: 'action', + attributes: { + name: '1', + actionTypeId: 'test', + config: { + bar: true, + }, + secrets: { + baz: true, + }, + isMissingSecrets: false, + }, + references: [], + }; + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); + actionTypeRegistry.get.mockReturnValueOnce(actionType); + const result = await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: 'test', + errorSource: TaskErrorSource.USER, + message: 'test error message', + retry: true, + status: 'error', + }); +}); + test('Execute of SentinelOne sub-actions require create privilege', async () => { const actionType: jest.Mocked = { id: '.sentinelone', @@ -1060,6 +1179,7 @@ test('throws an error when config is invalid', async () => { status: 'error', retry: false, message: `error validating action type config: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1099,6 +1219,7 @@ test('returns an error when connector is invalid', async () => { status: 'error', retry: false, message: `error validating action type connector: config must be defined`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1137,6 +1258,7 @@ test('throws an error when params is invalid', async () => { status: 'error', retry: false, message: `error validating action params: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, }); }); @@ -1144,9 +1266,13 @@ test('throws an error when failing to load action through savedObjectsClient', a encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce( new Error('No access') ); - await expect(actionExecutor.execute(executeParams)).rejects.toThrowErrorMatchingInlineSnapshot( - `"No access"` - ); + + try { + await actionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe('No access'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } }); test('throws an error if actionType is not enabled', async () => { @@ -1176,9 +1302,13 @@ test('throws an error if actionType is not enabled', async () => { actionTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { throw new Error('not enabled for test'); }); - await expect(actionExecutor.execute(executeParams)).rejects.toThrowErrorMatchingInlineSnapshot( - `"not enabled for test"` - ); + + try { + await actionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe('not enabled for test'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } expect(actionTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledWith('test'); }); @@ -1278,6 +1408,7 @@ test('should not throws an error if actionType is system action', async () => { secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); }); @@ -1293,11 +1424,15 @@ test('throws an error when passing isESOCanEncrypt with value of false', async ( inMemoryConnectors: [], getActionsAuthorizationWithRequest, }); - await expect( - customActionExecutor.execute(executeParams) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command."` - ); + + try { + await customActionExecutor.execute(executeParams); + } catch (e) { + expect(e.message).toBe( + 'Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.' + ); + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); + } }); test('should not throw error if action is preconfigured and isESOCanEncrypt is false', async () => { @@ -1510,6 +1645,7 @@ test('should not throw error if action is system action and isESOCanEncrypt is f secrets: {}, params: { foo: true }, logger: loggerMock, + request: {}, }); expect(loggerMock.debug).toBeCalledWith( diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index 69aab56e4e5b3..afcb96bbde8be 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -6,7 +6,7 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; -import { Logger, KibanaRequest } from '@kbn/core/server'; +import { KibanaRequest, Logger } from '@kbn/core/server'; import { cloneDeep } from 'lodash'; import { set } from '@kbn/safer-lodash-set'; import { withSpan } from '@kbn/apm-utils'; @@ -14,24 +14,25 @@ import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin import { SpacesServiceStart } from '@kbn/spaces-plugin/server'; import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; import { SecurityPluginStart } from '@kbn/security-plugin/server'; +import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { getGenAiTokenTracking, shouldTrackGenAiToken } from './gen_ai_token_tracking'; import { - validateParams, validateConfig, - validateSecrets, validateConnector, + validateParams, + validateSecrets, } from './validate_with_schema'; import { ActionType, - ActionTypeExecutorResult, + ActionTypeConfig, ActionTypeExecutorRawResult, + ActionTypeExecutorResult, ActionTypeRegistryContract, + ActionTypeSecrets, GetServicesFunction, InMemoryConnector, RawAction, ValidatorServices, - ActionTypeSecrets, - ActionTypeConfig, } from '../types'; import { EVENT_LOG_ACTIONS } from '../constants/event_log'; import { ActionExecutionSource } from './action_execution_source'; @@ -147,7 +148,11 @@ export class ActionExecutor { } if (!actionTypeRegistry.isActionExecutable(actionId, actionTypeId, { notifyUsage: true })) { - actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + try { + actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } } const actionType = actionTypeRegistry.get(actionTypeId); const configurationUtilities = actionTypeRegistry.getUtils(); @@ -259,12 +264,14 @@ export class ActionExecutor { configurationUtilities, logger, source, + ...(actionType.isSystemActionType ? { request } : {}), }); + + if (rawResult && rawResult.status === 'error') { + rawResult.errorSource = TaskErrorSource.USER; + } } catch (err) { - if ( - err.reason === ActionExecutionErrorReason.Validation || - err.reason === ActionExecutionErrorReason.Authorization - ) { + if (err.reason === ActionExecutionErrorReason.Authorization) { rawResult = err.result; } else { rawResult = { @@ -274,6 +281,7 @@ export class ActionExecutor { serviceMessage: err.message, error: err, retry: true, + errorSource: TaskErrorSource.USER, }; } } @@ -450,31 +458,37 @@ export class ActionExecutor { } if (!this.isESOCanEncrypt) { - throw new Error( - `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` + throw createTaskRunError( + new Error( + `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` + ), + TaskErrorSource.USER ); } - const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( - 'action', - actionId, - { - namespace: namespace === 'default' ? undefined : namespace, - } - ); - - const { - attributes: { secrets, actionTypeId, config, name }, - } = rawAction; + try { + const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( + 'action', + actionId, + { + namespace: namespace === 'default' ? undefined : namespace, + } + ); + const { + attributes: { secrets, actionTypeId, config, name }, + } = rawAction; - return { - actionTypeId, - name, - config, - secrets, - actionId, - rawAction: rawAction.attributes, - }; + return { + actionTypeId, + name, + config, + secrets, + actionId, + rawAction: rawAction.attributes, + }; + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } } } @@ -539,6 +553,7 @@ function validateAction( status: 'error', message: err.message, retry: !!taskInfo, + errorSource: TaskErrorSource.FRAMEWORK, }); } } @@ -584,6 +599,7 @@ const ensureAuthorizedToExecute = async ({ status: 'error', message: error.message, retry: false, + errorSource: TaskErrorSource.USER, }); } }; diff --git a/x-pack/plugins/actions/server/lib/get_token_count_from_openai_stream.ts b/x-pack/plugins/actions/server/lib/get_token_count_from_openai_stream.ts index 0091faca468e3..0aa5fca22d0ff 100644 --- a/x-pack/plugins/actions/server/lib/get_token_count_from_openai_stream.ts +++ b/x-pack/plugins/actions/server/lib/get_token_count_from_openai_stream.ts @@ -9,7 +9,7 @@ import { encode } from 'gpt-tokenizer'; import { isEmpty, omitBy } from 'lodash'; import { Readable } from 'stream'; import { finished } from 'stream/promises'; -import { CreateChatCompletionRequest } from 'openai'; +import type OpenAI from 'openai'; import { Logger } from '@kbn/logging'; export async function getTokenCountFromOpenAIStream({ @@ -25,7 +25,9 @@ export async function getTokenCountFromOpenAIStream({ prompt: number; completion: number; }> { - const chatCompletionRequest = JSON.parse(body) as CreateChatCompletionRequest; + const chatCompletionRequest = JSON.parse( + body + ) as OpenAI.ChatCompletionCreateParams.ChatCompletionCreateParamsStreaming; // per https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb const tokensFromMessages = encode( @@ -33,9 +35,9 @@ export async function getTokenCountFromOpenAIStream({ .map( (msg) => `<|start|>${msg.role}\n${msg.content}\n${ - msg.name + 'name' in msg ? msg.name - : msg.function_call + : 'function_call' in msg && msg.function_call ? msg.function_call.name + '\n' + msg.function_call.arguments : '' }<|end|>` diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index e8c66cff784c9..ecb3f75fc7794 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -7,7 +7,7 @@ import sinon from 'sinon'; import { ActionExecutor } from './action_executor'; -import { ConcreteTaskInstance, TaskStatus } from '@kbn/task-manager-plugin/server'; +import { ConcreteTaskInstance, TaskErrorSource, TaskStatus } from '@kbn/task-manager-plugin/server'; import { TaskRunnerFactory } from './task_runner_factory'; import { actionTypeRegistryMock } from '../action_type_registry.mock'; import { actionExecutorMock } from './action_executor.mock'; @@ -25,6 +25,7 @@ import { inMemoryMetricsMock } from '../monitoring/in_memory_metrics.mock'; import { IN_MEMORY_METRICS } from '../monitoring'; import { pick } from 'lodash'; import { + getErrorSource, isRetryableError, isUnrecoverableError, } from '@kbn/task-manager-plugin/server/task_running'; @@ -544,12 +545,13 @@ describe('Task Runner Factory', () => { message: 'Error message', data: { foo: true }, retry: false, + errorSource: TaskErrorSource.USER, }); try { await taskRunner.run(); - throw new Error('Should have thrown'); } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); expect(isRetryableError(e)).toEqual(false); } }); @@ -853,6 +855,7 @@ describe('Task Runner Factory', () => { throw new Error('Should have thrown'); } catch (e) { expect(isUnrecoverableError(e)).toEqual(true); + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); } }); @@ -887,6 +890,7 @@ describe('Task Runner Factory', () => { message: 'Error message', data: { foo: true }, retry: false, + errorSource: TaskErrorSource.FRAMEWORK, }); let err; @@ -900,6 +904,47 @@ describe('Task Runner Factory', () => { expect(taskRunnerFactoryInitializerParams.logger.error as jest.Mock).toHaveBeenCalledWith( `Action '2' failed: Error message` ); + expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); + }); + + test(`fallbacks to FRAMEWORK error if ActionExecutor does not return any type of source'`, async () => { + const taskRunner = taskRunnerFactory.create({ + taskInstance: { + ...mockedTaskInstance, + attempts: 0, + }, + }); + + mockedEncryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '3', + type: 'action_task_params', + attributes: { + actionId: '2', + params: { baz: true }, + executionId: '123abc', + apiKey: Buffer.from('123:abc').toString('base64'), + }, + references: [ + { + id: '2', + name: 'actionRef', + type: 'action', + }, + ], + }); + mockedActionExecutor.execute.mockResolvedValueOnce({ + status: 'error', + actionId: '2', + message: 'Error message', + data: { foo: true }, + retry: false, + }); + + try { + await taskRunner.run(); + } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } }); test('will rethrow the error if the error is thrown instead of returned', async () => { @@ -941,6 +986,7 @@ describe('Task Runner Factory', () => { `Action '2' failed: Fail` ); expect(thrownError).toEqual(err); + expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); }); test('increments monitoring metrics after execution', async () => { @@ -1158,6 +1204,11 @@ describe('Task Runner Factory', () => { ], }); - await expect(taskRunner.run()).rejects.toThrow('test'); + try { + await taskRunner.run(); + } catch (e) { + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + expect(e).toEqual(error); + } }); }); diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.ts index 22dc57d7dc0d3..cd22ea324ba5c 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.ts @@ -19,13 +19,16 @@ import { SavedObjectReference, } from '@kbn/core/server'; import { + createTaskRunError, LoadIndirectParamsResult, RunContext, + TaskErrorSource, throwRetryableError, throwUnrecoverableError, } from '@kbn/task-manager-plugin/server'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import { LoadedIndirectParams } from '@kbn/task-manager-plugin/server/task'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; import { ActionExecutorContract, ActionInfo } from './action_executor'; import { ActionTaskExecutorParams, @@ -44,7 +47,7 @@ import { } from './action_execution_source'; import { RelatedSavedObjects, validatedRelatedSavedObjects } from './related_saved_objects'; import { injectSavedObjectReferences } from './action_task_params_utils'; -import { InMemoryMetrics, IN_MEMORY_METRICS } from '../monitoring'; +import { IN_MEMORY_METRICS, InMemoryMetrics } from '../monitoring'; import { ActionTypeDisabledError } from './errors'; export interface TaskRunnerContext { @@ -135,7 +138,8 @@ export class TaskRunnerFactory { }, }; return actionData; - } catch (error) { + } catch (err) { + const error = createTaskRunError(err, getErrorSource(err) || TaskErrorSource.FRAMEWORK); actionData = { error }; return { error }; } @@ -187,9 +191,9 @@ export class TaskRunnerFactory { logger.error(`Action '${actionId}' failed: ${e.message}`); if (e instanceof ActionTypeDisabledError) { // We'll stop re-trying due to action being forbidden - throwUnrecoverableError(e); + throwUnrecoverableError(createTaskRunError(e, TaskErrorSource.USER)); } - throw e; + throw createTaskRunError(e, getErrorSource(e) || TaskErrorSource.FRAMEWORK); } inMemoryMetrics.increment(IN_MEMORY_METRICS.ACTION_EXECUTIONS); @@ -199,7 +203,7 @@ export class TaskRunnerFactory { // Task manager error handler only kicks in when an error thrown (at this time) // So what we have to do is throw when the return status is `error`. throw throwRetryableError( - new Error(executorResult.message), + createTaskRunError(new Error(executorResult.message), executorResult.errorSource), executorResult.retry as boolean | Date ); } diff --git a/x-pack/plugins/actions/server/types.ts b/x-pack/plugins/actions/server/types.ts index 6a038d5092363..0d9cc99ac6186 100644 --- a/x-pack/plugins/actions/server/types.ts +++ b/x-pack/plugins/actions/server/types.ts @@ -76,6 +76,7 @@ export interface ActionTypeExecutorOptions< taskInfo?: TaskInfo; configurationUtilities: ActionsConfigurationUtilities; source?: ActionExecutionSource; + request?: KibanaRequest; } export type ActionResult = Connector; diff --git a/x-pack/plugins/alerting/public/application/maintenance_windows.tsx b/x-pack/plugins/alerting/public/application/maintenance_windows.tsx index 6bbe3a080943e..bb2ba1847abac 100644 --- a/x-pack/plugins/alerting/public/application/maintenance_windows.tsx +++ b/x-pack/plugins/alerting/public/application/maintenance_windows.tsx @@ -78,7 +78,7 @@ export const renderApp = ({ }) => { const { element, history, theme$ } = mountParams; const i18nCore = core.i18n; - const isDarkMode = core.uiSettings.get('theme:darkMode'); + const isDarkMode = core.theme.getTheme().darkMode; const queryClient = new QueryClient(); diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts new file mode 100644 index 0000000000000..e553618ea921d --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client_error.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export class AlertsClientError extends Error { + constructor() { + super( + `Expected alertsClient not to be null! There may have been an issue installing alert resources.` + ); + Object.setPrototypeOf(this, AlertsClientError.prototype); + } +} diff --git a/x-pack/plugins/alerting/server/alerts_client/index.ts b/x-pack/plugins/alerting/server/alerts_client/index.ts index a1c0a309e0dc4..c141ac8167e9b 100644 --- a/x-pack/plugins/alerting/server/alerts_client/index.ts +++ b/x-pack/plugins/alerting/server/alerts_client/index.ts @@ -9,3 +9,4 @@ export { type LegacyAlertsClientParams, LegacyAlertsClient } from './legacy_aler export { AlertsClient } from './alerts_client'; export type { AlertRuleData } from './types'; export { sanitizeBulkErrorResponse } from './lib'; +export { AlertsClientError } from './alerts_client_error'; diff --git a/x-pack/plugins/alerting/server/index.ts b/x-pack/plugins/alerting/server/index.ts index 5be648354e61f..916d1bd11a384 100644 --- a/x-pack/plugins/alerting/server/index.ts +++ b/x-pack/plugins/alerting/server/index.ts @@ -69,7 +69,7 @@ export { isValidAlertIndexName, InstallShutdownError, } from './alerts_service'; -export { sanitizeBulkErrorResponse } from './alerts_client'; +export { sanitizeBulkErrorResponse, AlertsClientError } from './alerts_client'; export { getDataStreamAdapter } from './alerts_service/lib/data_stream_adapter'; export const plugin = async (initContext: PluginInitializerContext) => { diff --git a/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.test.ts b/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.test.ts index 5f5a120252b2a..e1febe893d4d6 100644 --- a/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.test.ts +++ b/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.test.ts @@ -13,6 +13,17 @@ import { createWrappedScopedClusterClientFactory } from './wrap_scoped_cluster_c const esQuery = { body: { query: { bool: { filter: { range: { '@timestamp': { gte: 0 } } } } } }, }; +const eqlQuery = { + index: 'foo', + query: 'process where process.name == "regsvr32.exe"', +}; +const esqlQueryRequest = { + method: 'POST', + path: '/_esql', + body: { + query: 'from .kibana_task_manager', + }, +}; const logger = loggingSystemMock.create().get(); @@ -36,180 +47,358 @@ describe('wrapScopedClusterClient', () => { jest.resetAllMocks(); }); - test('searches with asInternalUser when specified', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); - - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - const asInternalUserWrappedSearchFn = childClient.search; - - const wrappedSearchClient = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, - }).client(); - await wrappedSearchClient.asInternalUser.search(esQuery); - - expect(asInternalUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { - signal: abortController.signal, + describe('search', () => { + test('uses asInternalUser when specified', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + const asInternalUserWrappedSearchFn = childClient.search; + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + await wrappedSearchClient.asInternalUser.search(esQuery); + + expect(asInternalUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { + signal: abortController.signal, + }); + expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); }); - expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); - expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); - }); - test('searches with asCurrentUser when specified', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + test('uses asCurrentUser when specified', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(true); - scopedClusterClient.asCurrentUser.child.mockReturnValue(childClient as unknown as Client); - const asCurrentUserWrappedSearchFn = childClient.search; - - const wrappedSearchClient = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, - }).client(); - await wrappedSearchClient.asCurrentUser.search(esQuery); - - expect(asCurrentUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { - signal: abortController.signal, + const asCurrentUserWrappedSearchFn = childClient.search; + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + await wrappedSearchClient.asCurrentUser.search(esQuery); + + expect(asCurrentUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { + signal: abortController.signal, + }); + expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); }); - expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); - expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); - }); - test('uses search options when specified', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + test('uses search options when specified', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + const asInternalUserWrappedSearchFn = childClient.search; + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + await wrappedSearchClient.asInternalUser.search(esQuery, { ignore: [404] }); + + expect(asInternalUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { + ignore: [404], + signal: abortController.signal, + }); + expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); + }); - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - const asInternalUserWrappedSearchFn = childClient.search; - - const wrappedSearchClient = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, - }).client(); - await wrappedSearchClient.asInternalUser.search(esQuery, { ignore: [404] }); - - expect(asInternalUserWrappedSearchFn).toHaveBeenCalledWith(esQuery, { - ignore: [404], - signal: abortController.signal, + test('re-throws error when an error is thrown', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + childClient.search.mockRejectedValueOnce(new Error('something went wrong!')); + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + wrappedSearchClient.asInternalUser.search + ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); }); - expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); - expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); - }); - test('re-throws error when search throws error', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + test('handles empty search result object', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - const asInternalUserWrappedSearchFn = childClient.search; - - asInternalUserWrappedSearchFn.mockRejectedValueOnce(new Error('something went wrong!')); - const wrappedSearchClient = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, - }).client(); - - await expect( - wrappedSearchClient.asInternalUser.search - ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); - }); + const asInternalUserWrappedSearchFn = childClient.search; + // @ts-ignore incomplete return type + asInternalUserWrappedSearchFn.mockResolvedValue({}); - test('handles empty search result object', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }); - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - const asInternalUserWrappedSearchFn = childClient.search; - // @ts-ignore incomplete return type - asInternalUserWrappedSearchFn.mockResolvedValue({}); - - const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, + const wrappedSearchClient = wrappedSearchClientFactory.client(); + await wrappedSearchClient.asInternalUser.search(esQuery); + + expect(asInternalUserWrappedSearchFn).toHaveBeenCalledTimes(1); + expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); + + const stats = wrappedSearchClientFactory.getMetrics(); + expect(stats.numSearches).toEqual(1); + expect(stats.esSearchDurationMs).toEqual(0); + }); + + test('keeps track of number of queries', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + const asInternalUserWrappedSearchFn = childClient.search; + // @ts-ignore incomplete return type + asInternalUserWrappedSearchFn.mockResolvedValue({ took: 333 }); + + const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }); + const wrappedSearchClient = wrappedSearchClientFactory.client(); + await wrappedSearchClient.asInternalUser.search(esQuery); + await wrappedSearchClient.asInternalUser.search(esQuery); + await wrappedSearchClient.asInternalUser.search(esQuery); + + expect(asInternalUserWrappedSearchFn).toHaveBeenCalledTimes(3); + expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); + + const stats = wrappedSearchClientFactory.getMetrics(); + expect(stats.numSearches).toEqual(3); + expect(stats.esSearchDurationMs).toEqual(999); + + expect(logger.debug).toHaveBeenCalledWith( + `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` + ); }); - const wrappedSearchClient = wrappedSearchClientFactory.client(); - await wrappedSearchClient.asInternalUser.search(esQuery); + test('throws error when search throws abort error', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); - expect(asInternalUserWrappedSearchFn).toHaveBeenCalledTimes(1); - expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); - expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); + abortController.abort(); + childClient.search.mockRejectedValueOnce(new Error('Request has been aborted by the user')); - const stats = wrappedSearchClientFactory.getMetrics(); - expect(stats.numSearches).toEqual(1); - expect(stats.esSearchDurationMs).toEqual(0); + const abortableSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + abortableSearchClient.asInternalUser.search + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Search has been aborted due to cancelled execution"` + ); + }); }); - test('keeps track of number of queries', async () => { - const abortController = new AbortController(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + describe('eql.search', () => { + test('re-throws error when an error is thrown', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - const asInternalUserWrappedSearchFn = childClient.search; - // @ts-ignore incomplete return type - asInternalUserWrappedSearchFn.mockResolvedValue({ took: 333 }); - - const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, + childClient.eql.search.mockRejectedValueOnce(new Error('something went wrong!')); + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + wrappedSearchClient.asInternalUser.eql.search + ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); + }); + + test('keeps track of number of queries', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + const asInternalUserWrappedEqlSearchFn = childClient.eql.search; + // @ts-ignore incomplete return type + asInternalUserWrappedEqlSearchFn.mockResolvedValue({ took: 333 }); + + const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }); + const wrappedSearchClient = wrappedSearchClientFactory.client(); + await wrappedSearchClient.asInternalUser.eql.search(eqlQuery); + await wrappedSearchClient.asInternalUser.eql.search(eqlQuery); + await wrappedSearchClient.asInternalUser.eql.search(eqlQuery); + + expect(asInternalUserWrappedEqlSearchFn).toHaveBeenCalledTimes(3); + expect(scopedClusterClient.asInternalUser.eql.search).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.eql.search).not.toHaveBeenCalled(); + + const stats = wrappedSearchClientFactory.getMetrics(); + expect(stats.numSearches).toEqual(3); + expect(stats.esSearchDurationMs).toEqual(999); + + expect(logger.debug).toHaveBeenCalledWith( + `executing eql query for rule .test-rule-type:abcdefg in space my-space - {\"index\":\"foo\",\"query\":\"process where process.name == \\\"regsvr32.exe\\\"\"} - with options {}` + ); + }); + + test('throws error when eql search throws abort error', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + abortController.abort(); + childClient.eql.search.mockRejectedValueOnce( + new Error('Request has been aborted by the user') + ); + + const abortableSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + abortableSearchClient.asInternalUser.eql.search + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"EQL search has been aborted due to cancelled execution"` + ); }); - const wrappedSearchClient = wrappedSearchClientFactory.client(); - await wrappedSearchClient.asInternalUser.search(esQuery); - await wrappedSearchClient.asInternalUser.search(esQuery); - await wrappedSearchClient.asInternalUser.search(esQuery); - - expect(asInternalUserWrappedSearchFn).toHaveBeenCalledTimes(3); - expect(scopedClusterClient.asInternalUser.search).not.toHaveBeenCalled(); - expect(scopedClusterClient.asCurrentUser.search).not.toHaveBeenCalled(); - - const stats = wrappedSearchClientFactory.getMetrics(); - expect(stats.numSearches).toEqual(3); - expect(stats.esSearchDurationMs).toEqual(999); - - expect(logger.debug).toHaveBeenCalledWith( - `executing query for rule .test-rule-type:abcdefg in space my-space - {\"body\":{\"query\":{\"bool\":{\"filter\":{\"range\":{\"@timestamp\":{\"gte\":0}}}}}}} - with options {}` - ); }); - test('throws error when search throws abort error', async () => { - const abortController = new AbortController(); - abortController.abort(); - const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); - const childClient = elasticsearchServiceMock.createElasticsearchClient(); + describe('transport.request', () => { + describe('ES|QL', () => { + test('re-throws error when an error is thrown', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + childClient.transport.request.mockRejectedValueOnce(new Error('something went wrong!')); + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + wrappedSearchClient.asInternalUser.transport.request({ method: 'POST', path: '/_esql' }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); + }); + + test('keeps track of number of queries', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + const asInternalUserWrappedRequestFn = childClient.transport.request; + // @ts-ignore incomplete return type + asInternalUserWrappedRequestFn.mockResolvedValue({}); + + const wrappedSearchClientFactory = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }); + const wrappedSearchClient = wrappedSearchClientFactory.client(); + await wrappedSearchClient.asInternalUser.transport.request(esqlQueryRequest); + await wrappedSearchClient.asInternalUser.transport.request(esqlQueryRequest); + await wrappedSearchClient.asInternalUser.transport.request(esqlQueryRequest); + + expect(asInternalUserWrappedRequestFn).toHaveBeenCalledTimes(3); + expect(scopedClusterClient.asInternalUser.transport.request).not.toHaveBeenCalled(); + expect(scopedClusterClient.asCurrentUser.transport.request).not.toHaveBeenCalled(); + + const stats = wrappedSearchClientFactory.getMetrics(); + expect(stats.numSearches).toEqual(3); + expect(stats.totalSearchDurationMs).toBeGreaterThan(-1); + + expect(logger.debug).toHaveBeenCalledWith( + `executing ES|QL query for rule .test-rule-type:abcdefg in space my-space - {\"method\":\"POST\",\"path\":\"/_esql\",\"body\":{\"query\":\"from .kibana_task_manager\"}} - with options {}` + ); + }); + + test('throws error when es|ql search throws abort error', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + abortController.abort(); + childClient.transport.request.mockRejectedValueOnce( + new Error('Request has been aborted by the user') + ); + + const abortableSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + abortableSearchClient.asInternalUser.transport.request({ method: 'POST', path: '/_esql' }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"ES|QL search has been aborted due to cancelled execution"` + ); + }); + }); - scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); - childClient.search.mockRejectedValueOnce(new Error('Request has been aborted by the user')); - - const abortableSearchClient = createWrappedScopedClusterClientFactory({ - scopedClusterClient, - rule, - logger, - abortController, - }).client(); - - await expect( - abortableSearchClient.asInternalUser.search - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Search has been aborted due to cancelled execution"` - ); + test('re-throws error when an error is thrown', async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + childClient.transport.request.mockRejectedValueOnce(new Error('something went wrong!')); + + const wrappedSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + wrappedSearchClient.asInternalUser.transport.request({ method: '', path: '' }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"something went wrong!"`); + }); + + test(`doesn't throw error when non es|ql request throws an error`, async () => { + const { abortController, scopedClusterClient, childClient } = getMockClusterClients(); + + abortController.abort(); + childClient.transport.request.mockRejectedValueOnce(new Error('Some other error')); + + const abortableSearchClient = createWrappedScopedClusterClientFactory({ + scopedClusterClient, + rule, + logger, + abortController, + }).client(); + + await expect( + abortableSearchClient.asInternalUser.transport.request({ + method: 'GET', + path: '/_cat/indices', + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Some other error"`); + }); }); }); + +function getMockClusterClients(asCurrentUser: boolean = false) { + const abortController = new AbortController(); + const scopedClusterClient = elasticsearchServiceMock.createScopedClusterClient(); + const childClient = elasticsearchServiceMock.createElasticsearchClient(); + + if (asCurrentUser) { + scopedClusterClient.asCurrentUser.child.mockReturnValue(childClient as unknown as Client); + } else { + scopedClusterClient.asInternalUser.child.mockReturnValue(childClient as unknown as Client); + } + + return { abortController, scopedClusterClient, childClient }; +} diff --git a/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.ts b/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.ts index e1156d177116c..9ddd22a292b4a 100644 --- a/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.ts +++ b/x-pack/plugins/alerting/server/lib/wrap_scoped_cluster_client.ts @@ -10,15 +10,19 @@ import { TransportResult, TransportRequestOptionsWithMeta, TransportRequestOptionsWithOutMeta, + TransportRequestParams, } from '@elastic/elasticsearch'; import type { SearchRequest, SearchResponse, AggregateName, + EqlSearchRequest, + EqlSearchResponse, } from '@elastic/elasticsearch/lib/api/types'; import type { SearchRequest as SearchRequestWithBody, AggregationsAggregate, + EqlSearchRequest as EqlSearchRequestWithBody, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IScopedClusterClient, ElasticsearchClient, Logger } from '@kbn/core/server'; import { SearchMetrics, RuleInfo } from './types'; @@ -89,11 +93,133 @@ function wrapEsClient(opts: WrapEsClientOpts): ElasticsearchClient { const wrappedClient = esClient.child({}); // Mutating the functions we want to wrap + wrappedClient.transport.request = getWrappedTransportRequestFn({ + esClient: wrappedClient, + ...rest, + }); wrappedClient.search = getWrappedSearchFn({ esClient: wrappedClient, ...rest }); + wrappedClient.eql.search = getWrappedEqlSearchFn({ esClient: wrappedClient, ...rest }); return wrappedClient; } +function getWrappedTransportRequestFn(opts: WrapEsClientOpts) { + const originalRequestFn = opts.esClient.transport.request; + + // A bunch of overloads to make TypeScript happy + async function request( + params: TransportRequestParams, + options?: TransportRequestOptionsWithOutMeta + ): Promise; + async function request( + params: TransportRequestParams, + options?: TransportRequestOptionsWithMeta + ): Promise>; + async function request( + params: TransportRequestParams, + options?: TransportRequestOptions + ): Promise; + async function request( + params: TransportRequestParams, + options?: TransportRequestOptions + ): Promise> { + // Wrap ES|QL requests with an abort signal + if (params.method === 'POST' && params.path === '/_esql') { + try { + const requestOptions = options ?? {}; + const start = Date.now(); + opts.logger.debug( + `executing ES|QL query for rule ${opts.rule.alertTypeId}:${opts.rule.id} in space ${ + opts.rule.spaceId + } - ${JSON.stringify(params)} - with options ${JSON.stringify(requestOptions)}` + ); + const result = (await originalRequestFn.call(opts.esClient.transport, params, { + ...requestOptions, + signal: opts.abortController.signal, + })) as Promise | TransportResult; + + const end = Date.now(); + const durationMs = end - start; + + opts.logMetricsFn({ esSearchDuration: 0, totalSearchDuration: durationMs }); + return result; + } catch (e) { + if (opts.abortController.signal.aborted) { + throw new Error('ES|QL search has been aborted due to cancelled execution'); + } + throw e; + } + } + + // No wrap + return (await originalRequestFn.call( + opts.esClient.transport, + params, + options + )) as Promise; + } + + return request; +} + +function getWrappedEqlSearchFn(opts: WrapEsClientOpts) { + const originalEqlSearch = opts.esClient.eql.search; + + // A bunch of overloads to make TypeScript happy + async function search( + params: EqlSearchRequest | EqlSearchRequestWithBody, + options?: TransportRequestOptionsWithOutMeta + ): Promise>; + async function search( + params: EqlSearchRequest | EqlSearchRequestWithBody, + options?: TransportRequestOptionsWithMeta + ): Promise, unknown>>; + async function search( + params: EqlSearchRequest | EqlSearchRequestWithBody, + options?: TransportRequestOptions + ): Promise>; + async function search( + params: EqlSearchRequest | EqlSearchRequestWithBody, + options?: TransportRequestOptions + ): Promise | TransportResult, unknown>> { + try { + const searchOptions = options ?? {}; + const start = Date.now(); + opts.logger.debug( + `executing eql query for rule ${opts.rule.alertTypeId}:${opts.rule.id} in space ${ + opts.rule.spaceId + } - ${JSON.stringify(params)} - with options ${JSON.stringify(searchOptions)}` + ); + const result = (await originalEqlSearch.call(opts.esClient, params, { + ...searchOptions, + signal: opts.abortController.signal, + })) as TransportResult, unknown> | EqlSearchResponse; + + const end = Date.now(); + const durationMs = end - start; + + let took: number | undefined = 0; + if (searchOptions.meta) { + // when meta: true, response is TransportResult, unknown> + took = (result as TransportResult, unknown>).body.took; + } else { + // when meta: false, response is EqlSearchResponse + took = (result as EqlSearchResponse).took; + } + + opts.logMetricsFn({ esSearchDuration: took ?? 0, totalSearchDuration: durationMs }); + return result; + } catch (e) { + if (opts.abortController.signal.aborted) { + throw new Error('EQL search has been aborted due to cancelled execution'); + } + throw e; + } + } + + return search; +} + function getWrappedSearchFn(opts: WrapEsClientOpts) { const originalSearch = opts.esClient.search; diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts index 29f56b630eaf8..3a464c8f30521 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts @@ -9,7 +9,11 @@ import type { PublicMethodsOf } from '@kbn/utility-types'; import { Logger } from '@kbn/core/server'; import { ALERT_UUID, getRuleDetailsRoute, triggersActionsRoute } from '@kbn/rule-data-utils'; import { asSavedObjectExecutionSource } from '@kbn/actions-plugin/server'; -import { isEphemeralTaskRejectedDueToCapacityError } from '@kbn/task-manager-plugin/server'; +import { + createTaskRunError, + isEphemeralTaskRejectedDueToCapacityError, + TaskErrorSource, +} from '@kbn/task-manager-plugin/server'; import { ExecuteOptions as EnqueueExecutionOptions, ExecutionResponseItem, @@ -360,10 +364,15 @@ export class ExecutionHandler< if (!!bulkActions.length) { for (const c of chunk(bulkActions, CHUNK_SIZE)) { - const response = await this.actionsClient!.bulkEnqueueExecution(c); - if (response.errors) { + let enqueueResponse; + try { + enqueueResponse = await this.actionsClient!.bulkEnqueueExecution(c); + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } + if (enqueueResponse.errors) { bulkActionsResponse = bulkActionsResponse.concat( - response.items.filter( + enqueueResponse.items.filter( (i) => i.response === ExecutionResponseType.QUEUED_ACTIONS_LIMIT_ERROR ) ); @@ -730,7 +739,13 @@ export class ExecutionHandler< executionUuid: this.executionId, }; } - const alerts = await this.alertsClient.getSummarizedAlerts!(options); + + let alerts; + try { + alerts = await this.alertsClient.getSummarizedAlerts!(options); + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } /** * We need to remove all new alerts with maintenance windows retrieved from diff --git a/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts b/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts index 380d436c95e65..f3417312881e8 100644 --- a/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts @@ -19,6 +19,7 @@ import { ErrorWithReason, getReasonFromError } from '../lib/error_with_reason'; import { alertingEventLoggerMock } from '../lib/alerting_event_logger/alerting_event_logger.mock'; import { mockedRawRuleSO, mockedRule } from './fixtures'; import { RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; +import { getErrorSource, TaskErrorSource } from '@kbn/task-manager-plugin/server/task_running'; // create mocks const rulesClient = rulesClientMock.create(); @@ -142,6 +143,7 @@ describe('rule_loader', () => { } catch (err) { outcome = 'failure'; expect(getReasonFromError(err)).toBe(RuleExecutionStatusErrorReasons.Disabled); + expect(getErrorSource(err)).toBe(TaskErrorSource.FRAMEWORK); } expect(outcome).toBe('failure'); }); @@ -162,6 +164,7 @@ describe('rule_loader', () => { outcome = 'failure'; expect(err.message).toBe('rule-type-not-enabled: 2112'); expect(getReasonFromError(err)).toBe(RuleExecutionStatusErrorReasons.License); + expect(getErrorSource(err)).toBe(TaskErrorSource.USER); } expect(outcome).toBe('failure'); }); @@ -178,6 +181,7 @@ describe('rule_loader', () => { outcome = 'failure'; expect(err.message).toMatch('[bar]: expected value of type [boolean] but got [string]'); expect(getReasonFromError(err)).toBe(RuleExecutionStatusErrorReasons.Validate); + expect(getErrorSource(err)).toBe(TaskErrorSource.USER); } expect(outcome).toBe('failure'); }); @@ -229,8 +233,12 @@ describe('rule_loader', () => { } ); - const promise = getRuleAttributes(context, ruleId, spaceId); - await expect(promise).rejects.toThrow('wops'); + try { + await getRuleAttributes(context, ruleId, spaceId); + } catch (e) { + expect(e.message).toMatch('wops'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } }); }); diff --git a/x-pack/plugins/alerting/server/task_runner/rule_loader.ts b/x-pack/plugins/alerting/server/task_runner/rule_loader.ts index fb037b802ec9b..ccf40adbf0920 100644 --- a/x-pack/plugins/alerting/server/task_runner/rule_loader.ts +++ b/x-pack/plugins/alerting/server/task_runner/rule_loader.ts @@ -6,12 +6,13 @@ */ import { addSpaceIdToPath } from '@kbn/spaces-plugin/server'; -import { CoreKibanaRequest, FakeRawRequest, Headers } from '@kbn/core/server'; +import { CoreKibanaRequest, FakeRawRequest, Headers, SavedObject } from '@kbn/core/server'; import { PublicMethodsOf } from '@kbn/utility-types'; import { LoadedIndirectParams, LoadIndirectParamsResult, } from '@kbn/task-manager-plugin/server/task'; +import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { TaskRunnerContext } from './task_runner_factory'; import { ErrorWithReason, validateRuleTypeParams } from '../lib'; import { @@ -70,23 +71,33 @@ export function validateRule( const { enabled, apiKey } = indirectParams; if (!enabled) { - throw new ErrorWithReason( - RuleExecutionStatusErrorReasons.Disabled, - new Error(`Rule failed to execute because rule ran after it was disabled.`) + throw createTaskRunError( + new ErrorWithReason( + RuleExecutionStatusErrorReasons.Disabled, + new Error(`Rule failed to execute because rule ran after it was disabled.`) + ), + TaskErrorSource.FRAMEWORK ); } + alertingEventLogger.setRuleName(rule.name); try { ruleTypeRegistry.ensureRuleTypeEnabled(rule.alertTypeId); } catch (err) { - throw new ErrorWithReason(RuleExecutionStatusErrorReasons.License, err); + throw createTaskRunError( + new ErrorWithReason(RuleExecutionStatusErrorReasons.License, err), + TaskErrorSource.USER + ); } let validatedParams: Params; try { validatedParams = validateRuleTypeParams(rule.params, paramValidator); } catch (err) { - throw new ErrorWithReason(RuleExecutionStatusErrorReasons.Validate, err); + throw createTaskRunError( + new ErrorWithReason(RuleExecutionStatusErrorReasons.Validate, err), + TaskErrorSource.USER + ); } if (rule.monitoring) { @@ -114,11 +125,17 @@ export async function getRuleAttributes( ): Promise> { const namespace = context.spaceIdToNamespace(spaceId); - const rawRule = await context.encryptedSavedObjectsClient.getDecryptedAsInternalUser( - RULE_SAVED_OBJECT_TYPE, - ruleId, - { namespace } - ); + let rawRule: SavedObject; + + try { + rawRule = await context.encryptedSavedObjectsClient.getDecryptedAsInternalUser( + RULE_SAVED_OBJECT_TYPE, + ruleId, + { namespace } + ); + } catch (e) { + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } const fakeRequest = getFakeKibanaRequest(context, spaceId, rawRule.attributes.apiKey); const rulesClient = context.getRulesClientWithRequest(fakeRequest); 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 23d5d5f576ce3..d395ff3364cd7 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 @@ -18,7 +18,11 @@ import { RuleAction, RuleAlertData, } from '../types'; -import { ConcreteTaskInstance, isUnrecoverableError } from '@kbn/task-manager-plugin/server'; +import { + ConcreteTaskInstance, + isUnrecoverableError, + TaskErrorSource, +} from '@kbn/task-manager-plugin/server'; import { TaskRunnerContext } from './task_runner_factory'; import { TaskRunner } from './task_runner'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; @@ -83,6 +87,7 @@ import { getMockMaintenanceWindow } from '../data/maintenance_window/test_helper import { alertsClientMock } from '../alerts_client/alerts_client.mock'; import { MaintenanceWindow } from '../application/maintenance_window/types'; import { RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; jest.mock('uuid', () => ({ v4: () => '5f6aa57d-3e22-484e-bae8-cbed868f4d28', @@ -1942,6 +1947,7 @@ describe('Task Runner', () => { expect(loggerMeta?.tags).toEqual(['test', '1', 'rule-run-failed']); expect(loggerMeta?.error?.stack_trace).toBeDefined(); expect(logger.error).toBeCalledTimes(1); + expect(getErrorSource(runnerResult.taskRunError as Error)).toBe(TaskErrorSource.USER); }); test('recovers gracefully when the Rule Task Runner throws an exception when loading rule to prepare for run', async () => { @@ -3326,6 +3332,7 @@ describe('Task Runner', () => { expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledTimes(1); expect(result).toEqual({ error }); + expect(getErrorSource(result.error as Error)).toBe(TaskErrorSource.FRAMEWORK); }); function testAlertingEventLogCalls({ 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 532dd7b1e12ba..208e46b88a1f6 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -12,12 +12,13 @@ import { v4 as uuidv4 } from 'uuid'; import { Logger } from '@kbn/core/server'; import { ConcreteTaskInstance, - throwUnrecoverableError, createTaskRunError, TaskErrorSource, + throwUnrecoverableError, } from '@kbn/task-manager-plugin/server'; import { nanosToMillis } from '@kbn/event-log-plugin/server'; import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; import { ExecutionHandler, RunResult } from './execution_handler'; import { TaskRunnerContext } from './task_runner_factory'; import { @@ -25,20 +26,20 @@ import { ErrorWithReason, executionStatusFromError, executionStatusFromState, - ruleExecutionStatusToRaw, + getNextRun, isRuleSnoozed, lastRunFromError, - getNextRun, + ruleExecutionStatusToRaw, } from '../lib'; import { - RuleExecutionStatus, - RuleExecutionStatusErrorReasons, IntervalSchedule, RawRuleExecutionStatus, + RawRuleLastRun, RawRuleMonitoring, + RuleExecutionStatus, + RuleExecutionStatusErrorReasons, RuleTaskState, RuleTypeRegistry, - RawRuleLastRun, } from '../types'; import { asErr, asOk, isErr, isOk, map, resolveErr, Result } from '../lib/result_type'; import { taskInstanceToAlertTaskInstance } from './alert_task_instance'; @@ -47,18 +48,18 @@ import { partiallyUpdateRule, RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; import { AlertInstanceContext, AlertInstanceState, - RuleTypeParams, - RuleTypeState, parseDuration, RawAlertInstance, - RuleLastRunOutcomeOrderMap, RuleAlertData, - SanitizedRule, + RuleLastRunOutcomeOrderMap, RuleNotifyWhen, + RuleTypeParams, + RuleTypeState, + SanitizedRule, } from '../../common'; import { NormalizedRuleType, UntypedNormalizedRuleType } from '../rule_type_registry'; import { getEsErrorMessage } from '../lib/errors'; -import { InMemoryMetrics, IN_MEMORY_METRICS } from '../monitoring'; +import { IN_MEMORY_METRICS, InMemoryMetrics } from '../monitoring'; import { RuleTaskInstance, RuleTaskRunResult, @@ -552,7 +553,10 @@ export class TaskRunner< message: err, stackTrace: err.stack, }; - throw new ErrorWithReason(RuleExecutionStatusErrorReasons.Execute, err); + throw createTaskRunError( + new ErrorWithReason(RuleExecutionStatusErrorReasons.Execute, err), + TaskErrorSource.USER + ); } } @@ -838,7 +842,10 @@ export class TaskRunner< const data = await getRuleAttributes(this.context, ruleId, spaceId); this.ruleData = { data }; } catch (err) { - const error = new ErrorWithReason(RuleExecutionStatusErrorReasons.Decrypt, err); + const error = createTaskRunError( + new ErrorWithReason(RuleExecutionStatusErrorReasons.Decrypt, err), + getErrorSource(err) + ); this.ruleData = { error }; } return this.ruleData; @@ -930,6 +937,14 @@ export class TaskRunner< timings: this.timer.toJson(), }); + const getTaskRunError = (state: Result) => { + return isErr(state) + ? { + taskRunError: createTaskRunError(state.error, getErrorSource(state.error)), + } + : {}; + }; + return { state: map( stateWithMetrics, @@ -977,9 +992,7 @@ export class TaskRunner< return { interval: retryInterval }; }), monitoring: this.ruleMonitoring.getMonitoring(), - ...(isErr(schedule) - ? { taskRunError: createTaskRunError(schedule.error, TaskErrorSource.FRAMEWORK) } - : {}), + ...getTaskRunError(stateWithMetrics), }; } diff --git a/x-pack/plugins/apm/public/components/routing/app_root/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx index b4ff66d12629d..0a18ebb584898 100644 --- a/x-pack/plugins/apm/public/components/routing/app_root/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx @@ -8,7 +8,7 @@ import { APP_WRAPPER_CLASS } from '@kbn/core/public'; import { KibanaContextProvider, - useUiSetting$, + useDarkMode, } from '@kbn/kibana-react-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Storage } from '@kbn/kibana-utils-plugin/public'; @@ -137,7 +137,7 @@ function MountApmHeaderActionMenu() { } export function ApmThemeProvider({ children }: { children: React.ReactNode }) { - const [darkMode] = useUiSetting$('theme:darkMode'); + const darkMode = useDarkMode(false); return ( = ({ useFetchAlertData: () => [false, {}], permissions: userCapabilities.generalCases, basePath: '/', - features: { alerts: { enabled: false } }, + features: { alerts: { enabled: true, sync: false } }, })} ); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx index 0ba1f2214bfc0..1c579eaf08848 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx @@ -89,15 +89,6 @@ export const CaseViewActivity = ({ const { data: currentUserProfile, isFetching: isLoadingCurrentUserProfile } = useGetCurrentUserProfile(); - const onShowAlertDetails = useCallback( - (alertId: string, index: string) => { - if (showAlertDetails) { - showAlertDetails(alertId, index); - } - }, - [showAlertDetails] - ); - const { onUpdateField, isLoading, loadingKey } = useOnUpdateField({ caseData, }); @@ -221,7 +212,7 @@ export const CaseViewActivity = ({ data={caseData} casesConfiguration={casesConfiguration} actionsNavigation={actionsNavigation} - onShowAlertDetails={onShowAlertDetails} + onShowAlertDetails={showAlertDetails} onUpdateField={onUpdateField} statusActionButton={ permissions.update ? ( diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.test.tsx index b85dbe7564cf9..165f974e8be2e 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.test.tsx @@ -14,6 +14,7 @@ import { createAppMockRenderer } from '../../../common/mock'; import type { CaseUI } from '../../../../common'; import { CaseViewAlerts } from './case_view_alerts'; import * as api from '../../../containers/api'; +import type { FeatureIdsResponse } from '../../../containers/types'; jest.mock('../../../containers/api'); @@ -30,6 +31,13 @@ describe('CaseUI View Page activity tab', () => { appMockRender = createAppMockRenderer(); appMockRender.coreStart.triggersActionsUi.getAlertsStateTable = getAlertsStateTableMock.mockReturnValue(
    ); + appMockRender.coreStart.triggersActionsUi.alertsTableConfigurationRegistry.register({ + id: 'case-details-alerts-observability', + columns: [], + ruleTypeIds: ['log-threshold'], + }); + }); + afterEach(() => { jest.clearAllMocks(); }); @@ -46,7 +54,7 @@ describe('CaseUI View Page activity tab', () => { expect(getAlertsStateTableMock).toHaveBeenCalledWith({ alertsTableConfigurationRegistry: expect.anything(), configurationId: 'securitySolution-case', - featureIds: ['siem', 'observability'], + featureIds: ['siem'], id: 'case-details-alerts-securitySolution', query: { ids: { @@ -60,7 +68,13 @@ describe('CaseUI View Page activity tab', () => { it('should call the alerts table with correct props for observability', async () => { const getFeatureIdsMock = jest.spyOn(api, 'getFeatureIds'); - getFeatureIdsMock.mockResolvedValueOnce(['observability']); + getFeatureIdsMock.mockResolvedValueOnce({ + aggregations: { + consumer: { buckets: [{ doc_count: 1, key: 'observability' }] }, + producer: { buckets: [] }, + ruleTypeIds: { buckets: [{ doc_count: 1, key: 'log-threshold' }] }, + }, + } as unknown as FeatureIdsResponse); appMockRender.render( { await waitFor(async () => { expect(getAlertsStateTableMock).toHaveBeenCalledWith({ alertsTableConfigurationRegistry: expect.anything(), - configurationId: 'observability', + configurationId: 'case-details-alerts-observability', featureIds: ['observability'], id: 'case-details-alerts-observability', query: { @@ -86,12 +100,23 @@ describe('CaseUI View Page activity tab', () => { }); }); - it('should call the getFeatureIds with the correct registration context', async () => { + it('should call the getFeatureIds with the correct alert ID', async () => { const getFeatureIdsMock = jest.spyOn(api, 'getFeatureIds'); - appMockRender.render(); + appMockRender.render( + + ); await waitFor(async () => { expect(getFeatureIdsMock).toHaveBeenCalledWith({ - query: { registrationContext: ['matchme'] }, + query: { + ids: { + values: ['alert-id-1'], + }, + }, signal: expect.anything(), }); }); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.tsx index 44487fe4f4a0e..59914fcae85a2 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_alerts.tsx @@ -8,10 +8,12 @@ import React, { useMemo } from 'react'; import { EuiFlexItem, EuiFlexGroup, EuiProgress } from '@elastic/eui'; +import type { ValidFeatureId } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; +import { AlertConsumers } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; import { SECURITY_SOLUTION_OWNER } from '../../../../common/constants'; import type { CaseUI } from '../../../../common'; import { useKibana } from '../../../common/lib/kibana'; -import { getManualAlertIds, getRegistrationContextFromAlerts } from './helpers'; +import { getManualAlertIds } from './helpers'; import { useGetFeatureIds } from '../../../containers/use_get_feature_ids'; import { CaseViewAlertsEmpty } from './case_view_alerts_empty'; import { CaseViewTabs } from '../case_view_tabs'; @@ -22,34 +24,49 @@ interface CaseViewAlertsProps { export const CaseViewAlerts = ({ caseData }: CaseViewAlertsProps) => { const { triggersActionsUi } = useKibana().services; + const alertIds = getManualAlertIds(caseData.comments); const alertIdsQuery = useMemo( () => ({ ids: { - values: getManualAlertIds(caseData.comments), + values: alertIds, }, }), - [caseData.comments] + [alertIds] ); - const alertRegistrationContexts = useMemo( - () => getRegistrationContextFromAlerts(caseData.comments), - [caseData.comments] + const { isLoading: isLoadingAlertFeatureIds, data: alertData } = useGetFeatureIds( + alertIds, + caseData.owner !== SECURITY_SOLUTION_OWNER ); - const { isLoading: isLoadingAlertFeatureIds, data: alertFeatureIds } = - useGetFeatureIds(alertRegistrationContexts); - const configId = - caseData.owner === SECURITY_SOLUTION_OWNER ? `${caseData.owner}-case` : caseData.owner; + caseData.owner === SECURITY_SOLUTION_OWNER + ? `${caseData.owner}-case` + : !isLoadingAlertFeatureIds + ? triggersActionsUi.alertsTableConfigurationRegistry.getAlertConfigIdPerRuleTypes( + alertData?.ruleTypeIds ?? [] + ) + : ''; - const alertStateProps = { - alertsTableConfigurationRegistry: triggersActionsUi.alertsTableConfigurationRegistry, - configurationId: configId, - id: `case-details-alerts-${caseData.owner}`, - featureIds: alertFeatureIds ?? [], - query: alertIdsQuery, - showAlertStatusWithFlapping: caseData.owner !== SECURITY_SOLUTION_OWNER, - }; + const alertStateProps = useMemo( + () => ({ + alertsTableConfigurationRegistry: triggersActionsUi.alertsTableConfigurationRegistry, + configurationId: configId, + id: `case-details-alerts-${caseData.owner}`, + featureIds: (caseData.owner === SECURITY_SOLUTION_OWNER + ? [AlertConsumers.SIEM] + : alertData?.featureIds ?? []) as ValidFeatureId[], + query: alertIdsQuery, + showAlertStatusWithFlapping: caseData.owner !== SECURITY_SOLUTION_OWNER, + }), + [ + triggersActionsUi.alertsTableConfigurationRegistry, + configId, + caseData.owner, + alertData?.featureIds, + alertIdsQuery, + ] + ); if (alertIdsQuery.ids.values.length === 0) { return ( diff --git a/x-pack/plugins/cases/public/components/case_view/components/helpers.test.ts b/x-pack/plugins/cases/public/components/case_view/components/helpers.test.ts index fba878ef1061a..b9905635f3944 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/helpers.test.ts +++ b/x-pack/plugins/cases/public/components/case_view/components/helpers.test.ts @@ -6,7 +6,7 @@ */ import { alertComment } from '../../../containers/mock'; -import { getManualAlertIds, getRegistrationContextFromAlerts } from './helpers'; +import { getManualAlertIds } from './helpers'; const comment = { ...alertComment, @@ -24,62 +24,7 @@ const comment3 = { alertId: ['nested1', 'nested2', 'nested3'], }; -const commentSiemSignal = { - ...alertComment, - alertId: 'alert-id-siem', - index: '.siem-signals-default-000008', -}; - -const commentIsBad = { - ...alertComment, - alertId: 'alert-id-bad', - index: 'bad-siem-signals-default-000008', -}; - -const multipleIndices = { - ...alertComment, - alertId: ['test-id-1', 'test-id-2', 'test-id-3', 'test-id-4', 'test-id-5', 'test-id-6'], - index: [ - '.internal.alerts-security.alerts-default-000001', - '.internal.alerts-observability.logs.alerts-default-000001', - '.internal.alerts-observability.uptime.alerts-default-000001', - '.internal.alerts-observability.metrics.alerts-default-000001', - '.internal.alerts-observability.apm.alerts-space2-000001', - '.internal.alerts-observability.logs.alerts-space1-000001', - ], -}; - describe('Case view helpers', () => { - describe('getRegistrationContextFromAlerts', () => { - it('returns the correct registration context', () => { - const result = getRegistrationContextFromAlerts([comment, comment2, multipleIndices]); - expect(result).toEqual([ - 'matchme', - 'another', - 'security', - 'observability.logs', - 'observability.uptime', - 'observability.metrics', - 'observability.apm', - ]); - }); - - it('dedupes contexts', () => { - const result = getRegistrationContextFromAlerts([comment, comment]); - expect(result).toEqual(['matchme']); - }); - - it('returns the correct registration when find a .siem-signals* index', () => { - const result = getRegistrationContextFromAlerts([commentSiemSignal, comment2]); - expect(result).toEqual(['security', 'another']); - }); - - it('returns empty when the index is not formatted as expected', () => { - const result = getRegistrationContextFromAlerts([commentIsBad]); - expect(result).toEqual([]); - }); - }); - describe('getManualAlertIds', () => { it('returns the alert ids', () => { const result = getManualAlertIds([comment, comment2]); diff --git a/x-pack/plugins/cases/public/components/case_view/components/helpers.ts b/x-pack/plugins/cases/public/components/case_view/components/helpers.ts index d393054e30f78..73778f0348f06 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/helpers.ts +++ b/x-pack/plugins/cases/public/components/case_view/components/helpers.ts @@ -19,36 +19,3 @@ export const getManualAlertIds = (comments: AttachmentUI[]): string[] => { }, new Set()); return Array.from(dedupeAlerts); }; - -export const getRegistrationContextFromAlerts = (comments: AttachmentUI[]): string[] => { - const dedupeRegistrationContext = comments.reduce( - (registrationContexts, comment: AttachmentUI) => { - if (comment.type === AttachmentType.alert) { - const indices = Array.isArray(comment.index) ? comment.index : [comment.index]; - indices.forEach((index) => { - // That's legacy code, we created some index alias so everything should work as expected - if (index.startsWith('.siem-signals')) { - registrationContexts.add('security'); - } else { - const registrationContext = getRegistrationContextFromIndex(index); - if (registrationContext) { - registrationContexts.add(registrationContext); - } - } - }); - return registrationContexts; - } - return registrationContexts; - }, - new Set() - ); - return Array.from(dedupeRegistrationContext); -}; - -export const getRegistrationContextFromIndex = (indexName: string): string | null => { - const found = indexName.match(/\.alerts-(.*?).alerts/); - if (found && found.length > 1) { - return `${found[1]}`; - } - return null; -}; diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx b/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx index dd6b9f08c0d09..f4ac54c1eb925 100644 --- a/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx +++ b/x-pack/plugins/cases/public/components/connectors/resilient/case_fields_preview.test.tsx @@ -81,7 +81,7 @@ describe('Jira Fields: Preview', () => { const getByText = createQueryWithMarkup(screen.getByText); - expect(getByText('Incident Types: Malware, Denial of Service')).toBeInTheDocument(); + expect(getByText('Incident types: Malware, Denial of Service')).toBeInTheDocument(); expect(getByText('Severity: Medium')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts b/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts index 1b63a5098e92a..132234f0d2d57 100644 --- a/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts +++ b/x-pack/plugins/cases/public/components/connectors/resilient/translations.ts @@ -31,7 +31,7 @@ export const INCIDENT_TYPES_PLACEHOLDER = i18n.translate( export const INCIDENT_TYPES_LABEL = i18n.translate( 'xpack.cases.connectors.resilient.incidentTypesLabel', { - defaultMessage: 'Incident Types', + defaultMessage: 'Incident types', } ); diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.test.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.test.tsx index 2e26b0f03ea82..3fea0295740d2 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.test.tsx @@ -9,6 +9,7 @@ import React from 'react'; import type { ReactWrapper } from 'enzyme'; import { mount } from 'enzyme'; import { UserActionShowAlert } from './show_alert'; +import { useCaseViewNavigation, useCaseViewParams } from '../../../common/navigation'; const props = { id: 'action-id', @@ -17,12 +18,25 @@ const props = { onShowAlertDetails: jest.fn(), }; +jest.mock('../../../common/lib/kibana'); +jest.mock('../../../common/navigation/hooks'); + +const useCaseViewParamsMock = useCaseViewParams as jest.Mock; +const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock; + describe('UserActionShowAlert ', () => { let wrapper: ReactWrapper; const onShowAlertDetails = jest.fn(); + const navigateToCaseView = jest.fn(); beforeAll(() => { wrapper = mount(); + useCaseViewParamsMock.mockReturnValue({ detailName: 'case-id' }); + useCaseViewNavigationMock.mockReturnValue({ navigateToCaseView }); + }); + + beforeEach(() => { + jest.clearAllMocks(); }); it('it renders', async () => { @@ -31,8 +45,16 @@ describe('UserActionShowAlert ', () => { ).toBeTruthy(); }); - it('it calls onClick', async () => { + it('it calls onShowAlertDetails onClick when is defined', async () => { wrapper.find('button[data-test-subj="comment-action-show-alert-action-id"]').simulate('click'); expect(onShowAlertDetails).toHaveBeenCalledWith('alert-id', 'alert-index'); + expect(navigateToCaseView).toBeCalledTimes(0); + }); + + it('it calls navigateToCaseView onClick when onShowAlertDetails is undefined', async () => { + wrapper = mount(); + wrapper.find('button[data-test-subj="comment-action-show-alert-action-id"]').simulate('click'); + expect(navigateToCaseView).toHaveBeenCalledWith({ detailName: 'case-id', tabId: 'alerts' }); + expect(onShowAlertDetails).toBeCalledTimes(0); }); }); diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.tsx index 48a6bff3fd557..a0a5c7d24bec9 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/show_alert.tsx @@ -8,12 +8,14 @@ import React, { memo, useCallback } from 'react'; import { EuiToolTip, EuiButtonIcon } from '@elastic/eui'; import * as i18n from '../translations'; +import { useCaseViewNavigation, useCaseViewParams } from '../../../common/navigation'; +import { CASE_VIEW_PAGE_TABS } from '../../../../common/types'; interface UserActionShowAlertProps { id: string; alertId: string; index: string; - onShowAlertDetails: (alertId: string, index: string) => void; + onShowAlertDetails?: (alertId: string, index: string) => void; } const UserActionShowAlertComponent = ({ @@ -22,10 +24,16 @@ const UserActionShowAlertComponent = ({ index, onShowAlertDetails, }: UserActionShowAlertProps) => { - const onClick = useCallback( - () => onShowAlertDetails(alertId, index), - [alertId, index, onShowAlertDetails] - ); + const { navigateToCaseView } = useCaseViewNavigation(); + const { detailName } = useCaseViewParams(); + + const onClick = useCallback(() => { + if (onShowAlertDetails) { + onShowAlertDetails(alertId, index); + } else { + navigateToCaseView({ detailName, tabId: CASE_VIEW_PAGE_TABS.ALERTS }); + } + }, [alertId, detailName, index, navigateToCaseView, onShowAlertDetails]); return ( {i18n.SHOW_ALERT_TOOLTIP}

    }> diff --git a/x-pack/plugins/cases/public/components/user_actions/types.ts b/x-pack/plugins/cases/public/components/user_actions/types.ts index 8e1377c4f0f28..cafbedf9c2cb5 100644 --- a/x-pack/plugins/cases/public/components/user_actions/types.ts +++ b/x-pack/plugins/cases/public/components/user_actions/types.ts @@ -36,7 +36,7 @@ export interface UserActionTreeProps { getRuleDetailsHref?: RuleDetailsNavigation['href']; actionsNavigation?: ActionsNavigation; onRuleDetailsClick?: RuleDetailsNavigation['onClick']; - onShowAlertDetails: (alertId: string, index: string) => void; + onShowAlertDetails?: (alertId: string, index: string) => void; onUpdateField: ({ key, value, onSuccess, onError }: OnUpdateFields) => void; statusActionButton: JSX.Element | null; useFetchAlertData: UseFetchAlertData; @@ -76,7 +76,7 @@ export interface UserActionBuilderArgs { handleSaveComment: ({ id, version }: { id: string; version: string }, content: string) => void; handleDeleteComment: (id: string, successToasterTitle: string) => void; handleManageQuote: (quote: string) => void; - onShowAlertDetails: (alertId: string, index: string) => void; + onShowAlertDetails?: (alertId: string, index: string) => void; getRuleDetailsHref?: RuleDetailsNavigation['href']; onRuleDetailsClick?: RuleDetailsNavigation['onClick']; } diff --git a/x-pack/plugins/cases/public/containers/api.test.tsx b/x-pack/plugins/cases/public/containers/api.test.tsx index 5b00fabbbbf50..e2e0897d75ada 100644 --- a/x-pack/plugins/cases/public/containers/api.test.tsx +++ b/x-pack/plugins/cases/public/containers/api.test.tsx @@ -84,7 +84,8 @@ const mockKibanaServices = KibanaServices.get as jest.Mock; jest.mock('../common/lib/kibana'); const fetchMock = jest.fn(); -mockKibanaServices.mockReturnValue({ http: { fetch: fetchMock } }); +const postMock = jest.fn(); +mockKibanaServices.mockReturnValue({ http: { fetch: fetchMock, post: postMock } }); describe('Cases API', () => { describe('deleteCases', () => { @@ -1051,22 +1052,43 @@ describe('Cases API', () => { describe('getFeatureIds', () => { beforeEach(() => { - fetchMock.mockClear(); - fetchMock.mockResolvedValue(['siem', 'observability']); + postMock.mockClear(); + postMock.mockResolvedValue({ + consumer: { + buckets: [{ key: 'observability', doc_count: 1 }], + }, + producer: { + buckets: [], + }, + ruleTypeIds: { + buckets: [{ key: 'apm.threshold', doc_count: 1 }], + }, + }); }); it('should be called with correct check url, method, signal', async () => { const resp = await getFeatureIds({ - query: { registrationContext: ['security', 'observability.logs'] }, + query: { ids: { values: ['alert_id_1', 'alert_id_2'] } }, signal: abortCtrl.signal, }); - expect(fetchMock).toHaveBeenCalledWith(`${BASE_RAC_ALERTS_API_PATH}/_feature_ids`, { - query: { registrationContext: ['security', 'observability.logs'] }, + expect(postMock).toHaveBeenCalledWith(`${BASE_RAC_ALERTS_API_PATH}/find`, { + body: '{"aggs":{"consumer":{"terms":{"field":"kibana.alert.rule.consumer","size":100}},"producer":{"terms":{"field":"kibana.alert.rule.producer","size":100}},"ruleTypeIds":{"terms":{"field":"kibana.alert.rule.rule_type_id","size":100}}},"query":{"ids":{"values":["alert_id_1","alert_id_2"]}}}', + method: 'POST', signal: abortCtrl.signal, }); - expect(resp).toEqual(['siem', 'observability']); + expect(resp).toEqual({ + consumer: { + buckets: [{ key: 'observability', doc_count: 1 }], + }, + producer: { + buckets: [], + }, + ruleTypeIds: { + buckets: [{ key: 'apm.threshold', doc_count: 1 }], + }, + }); }); }); diff --git a/x-pack/plugins/cases/public/containers/api.ts b/x-pack/plugins/cases/public/containers/api.ts index c15b41cb458a7..eeeffc6f4e424 100644 --- a/x-pack/plugins/cases/public/containers/api.ts +++ b/x-pack/plugins/cases/public/containers/api.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { ValidFeatureId } from '@kbn/rule-data-utils'; +import { ALERT_RULE_CONSUMER, ALERT_RULE_PRODUCER, ALERT_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { BASE_RAC_ALERTS_API_PATH } from '@kbn/rule-registry-plugin/common/constants'; import type { User } from '../../common/types/domain'; import { AttachmentType } from '../../common/types/domain'; @@ -73,6 +73,7 @@ import { import type { ActionLicense, CaseUI, + FeatureIdsResponse, SingleCaseMetrics, SingleCaseMetricsFeature, UserActionUI, @@ -511,16 +512,40 @@ export const getFeatureIds = async ({ query, signal, }: { - query: { registrationContext: string[] }; + query: { + ids: { + values: string[]; + }; + }; signal?: AbortSignal; -}): Promise => { - return KibanaServices.get().http.fetch( - `${BASE_RAC_ALERTS_API_PATH}/_feature_ids`, - { - signal, +}): Promise => { + return KibanaServices.get().http.post(`${BASE_RAC_ALERTS_API_PATH}/find`, { + method: 'POST', + body: JSON.stringify({ + aggs: { + consumer: { + terms: { + field: ALERT_RULE_CONSUMER, + size: 100, + }, + }, + producer: { + terms: { + field: ALERT_RULE_PRODUCER, + size: 100, + }, + }, + ruleTypeIds: { + terms: { + field: ALERT_RULE_TYPE_ID, + size: 100, + }, + }, + }, query, - } - ); + }), + signal, + }); }; export const getCaseConnectors = async ( diff --git a/x-pack/plugins/cases/public/containers/constants.ts b/x-pack/plugins/cases/public/containers/constants.ts index 224ea2c8bd04c..76d95a8bd0375 100644 --- a/x-pack/plugins/cases/public/containers/constants.ts +++ b/x-pack/plugins/cases/public/containers/constants.ts @@ -46,8 +46,8 @@ export const casesQueriesKeys = { license: () => [...casesQueriesKeys.connectors, 'license'] as const, tags: () => [...casesQueriesKeys.all, 'tags'] as const, categories: () => [...casesQueriesKeys.all, 'categories'] as const, - alertFeatureIds: (alertRegistrationContexts: string[]) => - [...casesQueriesKeys.alerts, 'features', alertRegistrationContexts] as const, + alertFeatureIds: (alertIds: string[]) => + [...casesQueriesKeys.alerts, 'features', alertIds] as const, configuration: (params: unknown) => [...casesQueriesKeys.all, 'configuration', params] as const, }; diff --git a/x-pack/plugins/cases/public/containers/types.ts b/x-pack/plugins/cases/public/containers/types.ts index 62a5f9299498e..d23d18c6e7896 100644 --- a/x-pack/plugins/cases/public/containers/types.ts +++ b/x-pack/plugins/cases/public/containers/types.ts @@ -5,4 +5,21 @@ * 2.0. */ +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + export * from '../../common/ui'; + +export type FeatureIdsResponse = estypes.SearchResponse< + unknown, + { + consumer: { + buckets: Array<{ key: string; doc_count: number }>; + }; + producer: { + buckets: Array<{ key: string; doc_count: number }>; + }; + ruleTypeIds: { + buckets: Array<{ key: string; doc_count: number }>; + }; + } +>; diff --git a/x-pack/plugins/cases/public/containers/use_get_feature_ids.test.tsx b/x-pack/plugins/cases/public/containers/use_get_feature_ids.test.tsx index 298abb5d133e7..9446007e367d5 100644 --- a/x-pack/plugins/cases/public/containers/use_get_feature_ids.test.tsx +++ b/x-pack/plugins/cases/public/containers/use_get_feature_ids.test.tsx @@ -32,7 +32,7 @@ describe('useGetFeaturesIds', () => { it('returns the features ids correctly', async () => { const spy = jest.spyOn(api, 'getFeatureIds').mockRejectedValue([]); - const { waitForNextUpdate } = renderHook(() => useGetFeatureIds(['context1']), { + const { waitForNextUpdate } = renderHook(() => useGetFeatureIds(['alert-id-1'], true), { wrapper: appMockRender.AppWrapper, }); @@ -40,12 +40,26 @@ describe('useGetFeaturesIds', () => { await waitFor(() => { expect(spy).toHaveBeenCalledWith({ - query: { registrationContext: ['context1'] }, + query: { + ids: { + values: ['alert-id-1'], + }, + }, signal: expect.any(AbortSignal), }); }); }); + it('never call API if disable', async () => { + const spyMock = jest.spyOn(api, 'getFeatureIds'); + + renderHook(() => useGetFeatureIds(['alert-id-1'], false), { + wrapper: appMockRender.AppWrapper, + }); + + expect(spyMock).toHaveBeenCalledTimes(0); + }); + it('shows a toast error when the api return an error', async () => { (useToasts as jest.Mock).mockReturnValue({ addError }); @@ -53,7 +67,7 @@ describe('useGetFeaturesIds', () => { .spyOn(api, 'getFeatureIds') .mockRejectedValue(new Error('Something went wrong')); - const { waitForNextUpdate } = renderHook(() => useGetFeatureIds(['context1']), { + const { waitForNextUpdate } = renderHook(() => useGetFeatureIds(['alert-id-1'], true), { wrapper: appMockRender.AppWrapper, }); @@ -61,7 +75,11 @@ describe('useGetFeaturesIds', () => { await waitFor(() => { expect(spy).toHaveBeenCalledWith({ - query: { registrationContext: ['context1'] }, + query: { + ids: { + values: ['alert-id-1'], + }, + }, signal: expect.any(AbortSignal), }); expect(addError).toHaveBeenCalled(); diff --git a/x-pack/plugins/cases/public/containers/use_get_feature_ids.tsx b/x-pack/plugins/cases/public/containers/use_get_feature_ids.tsx index 2c4df495b33d1..07d52edfd319a 100644 --- a/x-pack/plugins/cases/public/containers/use_get_feature_ids.tsx +++ b/x-pack/plugins/cases/public/containers/use_get_feature_ids.tsx @@ -6,28 +6,75 @@ */ import { useQuery } from '@tanstack/react-query'; -import type { ValidFeatureId } from '@kbn/rule-data-utils'; +import { isValidFeatureId } from '@kbn/rule-data-utils'; +import { useMemo } from 'react'; import type { ServerError } from '../types'; import { useCasesToast } from '../common/use_cases_toast'; import * as i18n from './translations'; import { getFeatureIds } from './api'; import { casesQueriesKeys } from './constants'; +import type { FeatureIdsResponse } from './types'; -export const useGetFeatureIds = (alertRegistrationContexts: string[]) => { - const { showErrorToast } = useCasesToast(); +interface UseGetFeatureIdsResponse { + featureIds: string[]; + ruleTypeIds: string[]; +} + +const transformResponseToFeatureIds = (data: FeatureIdsResponse): UseGetFeatureIdsResponse => { + const localFeatureIds = new Set(); + data?.aggregations?.consumer?.buckets?.forEach( + ({ key, doc_count: docCount }: { key: string; doc_count: number }) => { + if (docCount > 0 && isValidFeatureId(key)) { + localFeatureIds.add(key); + } + } + ); + data?.aggregations?.producer?.buckets?.forEach( + ({ key, doc_count: docCount }: { key: string; doc_count: number }) => { + if (docCount > 0 && isValidFeatureId(key)) { + localFeatureIds.add(key); + } + } + ); + const ruleTypeIds = + data?.aggregations?.ruleTypeIds?.buckets + ?.filter(({ doc_count: docCount }: { doc_count: number }) => docCount > 0) + .map(({ key }: { key: string }) => key) ?? []; - return useQuery( - casesQueriesKeys.alertFeatureIds(alertRegistrationContexts), + return { featureIds: [...localFeatureIds], ruleTypeIds }; +}; + +export const useGetFeatureIds = (alertIds: string[], enabled: boolean) => { + const { showErrorToast } = useCasesToast(); + const { data, isInitialLoading, isLoading } = useQuery< + FeatureIdsResponse, + ServerError, + UseGetFeatureIdsResponse + >( + casesQueriesKeys.alertFeatureIds(alertIds), ({ signal }) => { - const query = { registrationContext: alertRegistrationContexts }; - return getFeatureIds({ query, signal }); + return getFeatureIds({ + query: { + ids: { + values: alertIds, + }, + }, + signal, + }); }, { + select: transformResponseToFeatureIds, + enabled, onError: (error: ServerError) => { showErrorToast(error, { title: i18n.ERROR_TITLE }); }, } ); + + return useMemo( + () => ({ data, isLoading: (isInitialLoading || isLoading) && enabled }), + [data, enabled, isInitialLoading, isLoading] + ); }; export type UseGetFeatureIds = typeof useGetFeatureIds; diff --git a/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts b/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts index 3a194645c3fca..f55c1c78b1108 100644 --- a/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts +++ b/x-pack/plugins/cases/server/common/models/case_with_comments.test.ts @@ -6,11 +6,15 @@ */ import type { AlertAttachmentAttributes } from '../../../common/types/domain'; +import { AttachmentType } from '../../../common/types/domain'; import type { SavedObject } from '@kbn/core-saved-objects-api-server'; import { createCasesClientMockArgs } from '../../client/mocks'; import { alertComment, comment, mockCaseComments, mockCases, multipleAlert } from '../../mocks'; import { CaseCommentModel } from './case_with_comments'; -import { MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES } from '../../../common/constants'; +import { + MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES, + SECURITY_SOLUTION_OWNER, +} from '../../../common/constants'; import { commentExternalReference, commentFileExternalReference, @@ -25,6 +29,7 @@ describe('CaseCommentModel', () => { clientArgs.services.caseService.getCase.mockResolvedValue(theCase); clientArgs.services.caseService.patchCase.mockResolvedValue(theCase); clientArgs.services.attachmentService.create.mockResolvedValue(mockCaseComments[0]); + clientArgs.services.attachmentService.update.mockResolvedValue(mockCaseComments[0]); clientArgs.services.attachmentService.bulkCreate.mockResolvedValue({ saved_objects: mockCaseComments, }); @@ -274,6 +279,18 @@ describe('CaseCommentModel', () => { expect(clientArgs.services.attachmentService.create).not.toHaveBeenCalled(); }); + it('partial updates the case', async () => { + await model.createComment({ + id: 'comment-1', + commentReq: comment, + createdDate, + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + describe('validation', () => { clientArgs.services.attachmentService.countPersistableStateAndExternalReferenceAttachments.mockResolvedValue( MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES @@ -579,6 +596,21 @@ describe('CaseCommentModel', () => { expect(multipleAlertsCall.attributes.index).toEqual(['test-index-3', 'test-index-5']); }); + it('partial updates the case', async () => { + await model.bulkCreate({ + attachments: [ + { + id: 'comment-1', + ...comment, + }, + ], + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + describe('validation', () => { clientArgs.services.attachmentService.countPersistableStateAndExternalReferenceAttachments.mockResolvedValue( MAX_PERSISTABLE_STATE_AND_EXTERNAL_REFERENCES @@ -619,4 +651,24 @@ describe('CaseCommentModel', () => { }); }); }); + + describe('updateComment', () => { + it('partial updates the case', async () => { + await model.updateComment({ + updateRequest: { + id: 'comment-id', + version: 'comment-version', + type: AttachmentType.user, + comment: 'my updated comment', + owner: SECURITY_SOLUTION_OWNER, + }, + updatedAt: createdDate, + owner: SECURITY_SOLUTION_OWNER, + }); + + const args = clientArgs.services.caseService.patchCase.mock.calls[0][0]; + + expect(args.version).toBeUndefined(); + }); + }); }); diff --git a/x-pack/plugins/cases/server/common/models/case_with_comments.ts b/x-pack/plugins/cases/server/common/models/case_with_comments.ts index e1b89d7af791e..a1eb5cbfdb8b5 100644 --- a/x-pack/plugins/cases/server/common/models/case_with_comments.ts +++ b/x-pack/plugins/cases/server/common/models/case_with_comments.ts @@ -129,7 +129,7 @@ export class CaseCommentModel { }, options, }), - this.updateCaseUserAndDateSkipRefresh(updatedAt), + this.partialUpdateCaseUserAndDateSkipRefresh(updatedAt), ]); await commentableCase.createUpdateCommentUserAction(comment, updateRequest, owner); @@ -144,11 +144,11 @@ export class CaseCommentModel { } } - private async updateCaseUserAndDateSkipRefresh(date: string) { - return this.updateCaseUserAndDate(date, false); + private async partialUpdateCaseUserAndDateSkipRefresh(date: string) { + return this.partialUpdateCaseUserAndDate(date, false); } - private async updateCaseUserAndDate( + private async partialUpdateCaseUserAndDate( date: string, refresh: RefreshSetting ): Promise { @@ -160,7 +160,6 @@ export class CaseCommentModel { updated_at: date, updated_by: { ...this.params.user }, }, - version: this.caseInfo.version, refresh, }); @@ -242,7 +241,7 @@ export class CaseCommentModel { id, refresh: false, }), - this.updateCaseUserAndDateSkipRefresh(createdDate), + this.partialUpdateCaseUserAndDateSkipRefresh(createdDate), ]); await Promise.all([ @@ -502,7 +501,7 @@ export class CaseCommentModel { }), refresh: false, }), - this.updateCaseUserAndDateSkipRefresh(new Date().toISOString()), + this.partialUpdateCaseUserAndDateSkipRefresh(new Date().toISOString()), ]); const savedObjectsWithoutErrors = newlyCreatedAttachments.saved_objects.filter( diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.test.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.test.ts index ed43cc40649c6..2ed37837f5100 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.test.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.test.ts @@ -254,7 +254,7 @@ describe('user action migrations', () => { const log = context.log as jest.Mocked; expect(log.error.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token a in JSON at position 1", + "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Expected property name or '}' in JSON at position 1", Object { "migrations": Object { "userAction": Object { @@ -448,7 +448,7 @@ describe('user action migrations', () => { const log = context.log as jest.Mocked; expect(log.error.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token b in JSON at position 1", + "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Expected property name or '}' in JSON at position 1", Object { "migrations": Object { "userAction": Object { @@ -644,7 +644,7 @@ describe('user action migrations', () => { const log = context.log as jest.Mocked; expect(log.error.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token e in JSON at position 1", + "Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token 'e', \\"new json value\\" is not valid JSON", Object { "migrations": Object { "userAction": Object { diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 7f4f8c796f4c1..77e2dd38f326d 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -30,6 +30,10 @@ export const CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH = '/internal/cloud_security_posture/rules/_bulk_action'; export const CSP_BENCHMARK_RULES_BULK_ACTION_API_CURRENT_VERSION = '1'; +export const CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH = + '/internal/cloud_security_posture/rules/_get_states'; +export const CSP_GET_BENCHMARK_RULES_STATE_API_CURRENT_VERSION = '1'; + export const GET_DETECTION_RULE_ALERTS_STATUS_PATH = '/internal/cloud_security_posture/detection_engine_rules/alerts/_status'; export const DETECTION_RULE_ALERTS_STATUS_API_CURRENT_VERSION = '1'; diff --git a/x-pack/plugins/cloud_security_posture/common/types/index.ts b/x-pack/plugins/cloud_security_posture/common/types/index.ts index d6e804c33f017..e53f34d5cf919 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/index.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/index.ts @@ -8,6 +8,7 @@ export * as rulesV1 from './rules/v1'; export * as rulesV2 from './rules/v2'; export * as rulesV3 from './rules/v3'; +export * as rulesV4 from './rules/v4'; export * as benchmarkV1 from './benchmarks/v1'; export * as benchmarkV2 from './benchmarks/v2'; @@ -22,4 +23,5 @@ export type { BenchmarkScore, Benchmark, GetBenchmarkResponse, + BenchmarkRuleSelectParams, } from './latest'; diff --git a/x-pack/plugins/cloud_security_posture/common/types/latest.ts b/x-pack/plugins/cloud_security_posture/common/types/latest.ts index 9951c7a418ecc..73d86e76db250 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/latest.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/latest.ts @@ -5,5 +5,5 @@ * 2.0. */ -export * from './rules/v3'; +export * from './rules/v4'; export * from './benchmarks/v2'; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts index cef3e445b91a8..c2b70352aef9f 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts @@ -6,7 +6,7 @@ */ import { schema, TypeOf } from '@kbn/config-schema'; - +import type { SavedObjectsUpdateResponse } from '@kbn/core-saved-objects-api-server'; import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '../../constants'; const DEFAULT_BENCHMARK_RULES_PER_PAGE = 25; @@ -107,9 +107,14 @@ export const findCspBenchmarkRuleRequestSchema = schema.object({ * benchmark id */ benchmarkId: schema.maybe( - schema.oneOf([schema.literal('cis_k8s'), schema.literal('cis_eks'), schema.literal('cis_aws')]) + schema.oneOf([ + schema.literal('cis_k8s'), + schema.literal('cis_eks'), + schema.literal('cis_aws'), + schema.literal('cis_azure'), + schema.literal('cis_gcp'), + ]) ), - /** * package_policy_id */ @@ -130,8 +135,11 @@ export interface FindCspBenchmarkRuleResponse { perPage: number; } -export const cspBenchmarkRules = schema.arrayOf( +export type PageUrlParams = Record<'policyId' | 'packagePolicyId', string>; + +export const rulesToUpdate = schema.arrayOf( schema.object({ + rule_id: schema.string(), benchmark_id: schema.string(), benchmark_version: schema.string(), rule_number: schema.string(), @@ -140,10 +148,10 @@ export const cspBenchmarkRules = schema.arrayOf( export const cspBenchmarkRulesBulkActionRequestSchema = schema.object({ action: schema.oneOf([schema.literal('mute'), schema.literal('unmute')]), - rules: cspBenchmarkRules, + rules: rulesToUpdate, }); -export type CspBenchmarkRules = TypeOf; +export type RulesToUpdate = TypeOf; export type CspBenchmarkRulesBulkActionRequestSchema = TypeOf< typeof cspBenchmarkRulesBulkActionRequestSchema @@ -153,6 +161,10 @@ const rulesStates = schema.recordOf( schema.string(), schema.object({ muted: schema.boolean(), + benchmark_id: schema.string(), + benchmark_version: schema.string(), + rule_number: schema.string(), + rule_id: schema.string(), }) ); @@ -162,3 +174,8 @@ export const cspSettingsSchema = schema.object({ export type CspBenchmarkRulesStates = TypeOf; export type CspSettings = TypeOf; + +export interface BulkActionBenchmarkRulesResponse { + newCspSettings: SavedObjectsUpdateResponse; + disabledRulesCounter: number; +} diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts new file mode 100644 index 0000000000000..1ee8c584be770 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts @@ -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 { schema, TypeOf } from '@kbn/config-schema'; +import { BenchmarksCisId } from '../latest'; + +export type { + cspBenchmarkRuleMetadataSchema, + CspBenchmarkRuleMetadata, + cspBenchmarkRuleSchema, + CspBenchmarkRule, + FindCspBenchmarkRuleResponse, + CspSettings, + CspBenchmarkRulesStates, +} from './v3'; + +const DEFAULT_BENCHMARK_RULES_PER_PAGE = 25; + +export const findCspBenchmarkRuleRequestSchema = schema.object({ + /** + * An Elasticsearch simple_query_string + */ + search: schema.maybe(schema.string()), + + /** + * The page of objects to return + */ + page: schema.number({ defaultValue: 1, min: 1 }), + + /** + * The number of objects to include in each page + */ + perPage: schema.number({ defaultValue: DEFAULT_BENCHMARK_RULES_PER_PAGE, min: 0 }), + + /** + * Fields to retrieve from CspBenchmarkRule saved object + */ + fields: schema.maybe(schema.arrayOf(schema.string())), + + /** + * The fields to perform the parsed query against. + * Valid fields are fields which mapped to 'text' in cspBenchmarkRuleSavedObjectMapping + */ + searchFields: schema.arrayOf( + schema.oneOf([schema.literal('metadata.name.text'), schema.literal('metadata.section.text')]), + { defaultValue: ['metadata.name.text'] } + ), + + /** + * Sort Field + */ + sortField: schema.oneOf( + [ + schema.literal('metadata.name'), + schema.literal('metadata.section'), + schema.literal('metadata.id'), + schema.literal('metadata.version'), + schema.literal('metadata.benchmark.id'), + schema.literal('metadata.benchmark.name'), + schema.literal('metadata.benchmark.posture_type'), + schema.literal('metadata.benchmark.version'), + schema.literal('metadata.benchmark.rule_number'), + ], + { + defaultValue: 'metadata.benchmark.rule_number', + } + ), + + /** + * The order to sort by + */ + sortOrder: schema.oneOf([schema.literal('asc'), schema.literal('desc')], { + defaultValue: 'asc', + }), + + /** + * benchmark id + */ + benchmarkId: schema.maybe( + schema.oneOf([ + schema.literal('cis_k8s'), + schema.literal('cis_eks'), + schema.literal('cis_aws'), + schema.literal('cis_azure'), + schema.literal('cis_gcp'), + ]) + ), + + /** + * benchmark version + */ + benchmarkVersion: schema.maybe(schema.string()), + + /** + * rule section + */ + section: schema.maybe(schema.string()), + ruleNumber: schema.maybe(schema.string()), +}); + +export type FindCspBenchmarkRuleRequest = TypeOf; + +export interface BenchmarkRuleSelectParams { + section?: string; + ruleNumber?: string; +} + +export interface PageUrlParams { + benchmarkId: BenchmarksCisId; + benchmarkVersion: string; +} diff --git a/x-pack/plugins/cloud_security_posture/common/types_old.ts b/x-pack/plugins/cloud_security_posture/common/types_old.ts index d3706c51469f8..617f9dce122e8 100644 --- a/x-pack/plugins/cloud_security_posture/common/types_old.ts +++ b/x-pack/plugins/cloud_security_posture/common/types_old.ts @@ -181,7 +181,7 @@ export interface CnvmStatistics { highCount: number | undefined; mediumCount: number | undefined; resourcesScanned: number | undefined; - cloudRegions: number | undefined; + cloudAccounts: number | undefined; } export interface CnvmDashboardData { diff --git a/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.test.ts b/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.test.ts new file mode 100644 index 0000000000000..f2a35944f0825 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.test.ts @@ -0,0 +1,113 @@ +/* + * Copyright 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 { CspBenchmarkRuleMetadata } from '../types'; +import { + convertRuleTagsToKQL, + generateBenchmarkRuleTags, + getFindingsDetectionRuleSearchTags, +} from './detection_rules'; + +describe('Detection rules utils', () => { + it('should convert tags to KQL format', () => { + const inputTags = ['tag1', 'tag2', 'tag3']; + + const result = convertRuleTagsToKQL(inputTags); + + const expectedKQL = 'alert.attributes.tags:("tag1" AND "tag2" AND "tag3")'; + expect(result).toBe(expectedKQL); + }); + + it('Should convert tags to KQL format', () => { + const inputTags = [] as string[]; + + const result = convertRuleTagsToKQL(inputTags); + + const expectedKQL = 'alert.attributes.tags:()'; + expect(result).toBe(expectedKQL); + }); + + it('Should generate search tags for a CSP benchmark rule', () => { + const cspBenchmarkRule = { + benchmark: { + id: 'cis_gcp', + rule_number: '1.1', + }, + } as unknown as CspBenchmarkRuleMetadata; + + const result = getFindingsDetectionRuleSearchTags(cspBenchmarkRule); + + const expectedTags = ['CIS', 'GCP', 'CIS GCP 1.1']; + expect(result).toEqual(expectedTags); + }); + + it('Should handle undefined benchmark object gracefully', () => { + const cspBenchmarkRule = { benchmark: {} } as any; + const expectedTags: string[] = []; + const result = getFindingsDetectionRuleSearchTags(cspBenchmarkRule); + expect(result).toEqual(expectedTags); + }); + + it('Should handle undefined rule number gracefully', () => { + const cspBenchmarkRule = { + benchmark: { + id: 'cis_gcp', + }, + } as unknown as CspBenchmarkRuleMetadata; + const result = getFindingsDetectionRuleSearchTags(cspBenchmarkRule); + const expectedTags = ['CIS', 'GCP', 'CIS GCP']; + expect(result).toEqual(expectedTags); + }); + + it('Should generate tags for a CSPM benchmark rule', () => { + const cspBenchmarkRule = { + benchmark: { + id: 'cis_gcp', + rule_number: '1.1', + posture_type: 'cspm', + }, + } as unknown as CspBenchmarkRuleMetadata; + + const result = generateBenchmarkRuleTags(cspBenchmarkRule); + + const expectedTags = [ + 'Cloud Security', + 'Use Case: Configuration Audit', + 'CIS', + 'GCP', + 'CIS GCP 1.1', + 'CSPM', + 'Data Source: CSPM', + 'Domain: Cloud', + ]; + expect(result).toEqual(expectedTags); + }); + + it('Should generate tags for a KSPM benchmark rule', () => { + const cspBenchmarkRule = { + benchmark: { + id: 'cis_gcp', + rule_number: '1.1', + posture_type: 'kspm', + }, + } as unknown as CspBenchmarkRuleMetadata; + + const result = generateBenchmarkRuleTags(cspBenchmarkRule); + + const expectedTags = [ + 'Cloud Security', + 'Use Case: Configuration Audit', + 'CIS', + 'GCP', + 'CIS GCP 1.1', + 'KSPM', + 'Data Source: KSPM', + 'Domain: Container', + ]; + expect(result).toEqual(expectedTags); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.ts b/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.ts new file mode 100644 index 0000000000000..42ea7561286c1 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/utils/detection_rules.ts @@ -0,0 +1,58 @@ +/* + * Copyright 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 { CspBenchmarkRuleMetadata } from '../types/latest'; + +const CSP_RULE_TAG = 'Cloud Security'; +const CSP_RULE_TAG_USE_CASE = 'Use Case: Configuration Audit'; +const CSP_RULE_TAG_DATA_SOURCE_PREFIX = 'Data Source: '; + +const STATIC_RULE_TAGS = [CSP_RULE_TAG, CSP_RULE_TAG_USE_CASE]; + +export const convertRuleTagsToKQL = (tags: string[]): string => { + const TAGS_FIELD = 'alert.attributes.tags'; + return `${TAGS_FIELD}:(${tags.map((tag) => `"${tag}"`).join(' AND ')})`; +}; + +/* + * Returns an array of CspFinding tags that can be used to search and filter a detection rule + */ +export const getFindingsDetectionRuleSearchTags = ( + cspBenchmarkRule: CspBenchmarkRuleMetadata +): string[] => { + if (!cspBenchmarkRule.benchmark || !cspBenchmarkRule.benchmark.id) { + // Return an empty array if benchmark ID is undefined + return []; + } + + // ex: cis_gcp to ['CIS', 'GCP'] + const benchmarkIdTags = cspBenchmarkRule.benchmark.id.split('_').map((tag) => tag.toUpperCase()); + + // ex: 'CIS GCP 1.1' + const benchmarkRuleNumberTag = cspBenchmarkRule.benchmark.rule_number + ? `${cspBenchmarkRule.benchmark.id.replace('_', ' ').toUpperCase()} ${ + cspBenchmarkRule.benchmark.rule_number + }` + : cspBenchmarkRule.benchmark.id.replace('_', ' ').toUpperCase(); + + return benchmarkIdTags.concat([benchmarkRuleNumberTag]); +}; + +export const generateBenchmarkRuleTags = (rule: CspBenchmarkRuleMetadata) => { + return [STATIC_RULE_TAGS] + .concat(getFindingsDetectionRuleSearchTags(rule)) + .concat( + rule.benchmark.posture_type + ? [ + rule.benchmark.posture_type.toUpperCase(), + `${CSP_RULE_TAG_DATA_SOURCE_PREFIX}${rule.benchmark.posture_type.toUpperCase()}`, + ] + : [] + ) + .concat(rule.benchmark.posture_type === 'cspm' ? ['Domain: Cloud'] : ['Domain: Container']) + .flat(); +}; diff --git a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts index 2f7706705da45..3c70b3a7964b9 100644 --- a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts +++ b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts @@ -31,7 +31,7 @@ import type { AzureCredentialsType, RuleSection, } from '../types_old'; -import type { BenchmarksCisId } from '../types/latest'; +import type { BenchmarkRuleSelectParams, BenchmarksCisId } from '../types/latest'; /** * @example @@ -187,7 +187,6 @@ export const getBenchmarkCisName = (benchmarkId: BenchmarksCisId) => { case 'cis_gcp': return 'CIS GCP'; } - return null; }; export const getBenchmarkApplicableTo = (benchmarkId: BenchmarksCisId) => { @@ -203,5 +202,19 @@ export const getBenchmarkApplicableTo = (benchmarkId: BenchmarksCisId) => { case 'cis_gcp': return 'Google Cloud Provider'; } - return null; +}; + +export const getBenchmarkFilterQuery = ( + id: BenchmarkId, + version?: string, + selectParams?: BenchmarkRuleSelectParams +): string => { + const baseQuery = `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.id:${id} AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.version:"v${version}"`; + const sectionQuery = selectParams?.section + ? ` AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.section: "${selectParams.section}"` + : ''; + const ruleNumberQuery = selectParams?.ruleNumber + ? ` AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.rule_number: "${selectParams.ruleNumber}"` + : ''; + return baseQuery + sectionQuery + ruleNumberQuery; }; diff --git a/x-pack/plugins/cloud_security_posture/kibana.jsonc b/x-pack/plugins/cloud_security_posture/kibana.jsonc index 9237ed70104ad..56ea8549629ac 100644 --- a/x-pack/plugins/cloud_security_posture/kibana.jsonc +++ b/x-pack/plugins/cloud_security_posture/kibana.jsonc @@ -21,7 +21,8 @@ "cloud", "licensing", "share", - "kibanaUtils" + "kibanaUtils", + "alerting" ], "optionalPlugins": ["usageCollection"], "requiredBundles": ["kibanaReact", "usageCollection"] diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_fetch_detection_rules_by_tags.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_fetch_detection_rules_by_tags.ts index 309698f4219d9..dfd6f13e38692 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/api/use_fetch_detection_rules_by_tags.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_fetch_detection_rules_by_tags.ts @@ -11,6 +11,7 @@ import { useQuery } from '@tanstack/react-query'; import { DETECTION_RULE_RULES_API_CURRENT_VERSION } from '../../../common/constants'; import { RuleResponse } from '../types'; import { DETECTION_ENGINE_RULES_KEY } from '../constants'; +import { convertRuleTagsToKQL } from '../../../common/utils/detection_rules'; /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one @@ -26,16 +27,10 @@ export interface FetchRulesResponse { data: RuleResponse[]; } -export const TAGS_FIELD = 'alert.attributes.tags'; - const DETECTION_ENGINE_URL = '/api/detection_engine' as const; const DETECTION_ENGINE_RULES_URL = `${DETECTION_ENGINE_URL}/rules` as const; export const DETECTION_ENGINE_RULES_URL_FIND = `${DETECTION_ENGINE_RULES_URL}/_find` as const; -export function convertRuleTagsToKQL(tags: string[]): string { - return `${TAGS_FIELD}:(${tags.map((tag) => `"${tag}"`).join(' AND ')})`; -} - export const useFetchDetectionRulesByTags = (tags: string[]) => { const { http } = useKibana().services; diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts index 86b9692cbfc43..c8e98703cdbf0 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_latest_findings_data_view.ts @@ -62,15 +62,19 @@ export const useLatestFindingsDataView = (dataView: string) => { } if (dataView === LATEST_FINDINGS_INDEX_PATTERN) { + let shouldUpdate = false; Object.entries(cloudSecurityFieldLabels).forEach(([field, label]) => { if ( !dataViewObj.getFieldAttrs()[field]?.customLabel || dataViewObj.getFieldAttrs()[field]?.customLabel === field ) { dataViewObj.setFieldCustomLabel(field, label); + shouldUpdate = true; } }); - await dataViews.updateSavedObject(dataViewObj); + if (shouldUpdate) { + await dataViews.updateSavedObject(dataViewObj); + } } return dataViewObj; diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index 404ea0f036017..833f941c95292 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -49,6 +49,8 @@ export const LOCAL_STORAGE_DASHBOARD_BENCHMARK_SORT_KEY = 'cloudPosture:complianceDashboard:benchmarkSort'; export const LOCAL_STORAGE_FINDINGS_LAST_SELECTED_TAB_KEY = 'cloudPosture:findings:lastSelectedTab'; +export const SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED = 'cloudPosture:fieldsModal:showSelected'; + export type CloudPostureIntegrations = Record< CloudSecurityPolicyTemplate, CloudPostureIntegrationProps diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts index 0becb56e6ec22..d06e29a95e46d 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/use_cloud_posture_table.ts @@ -40,9 +40,9 @@ export interface CloudPostureTableResult { getRowsFromPages: (data: Array<{ page: DataTableRecord[] }> | undefined) => DataTableRecord[]; } -/* - Hook for managing common table state and methods for Cloud Posture -*/ +/** + * @deprecated will be replaced by useCloudPostureDataTable + */ export const useCloudPostureTable = ({ defaultQuery = getDefaultQuery, dataView, diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts index 6182a0b47f54e..674a28f34e97c 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts @@ -63,7 +63,7 @@ export const cloudPosturePages: Record = { export const benchmarksNavigation: Record = { rules: { name: NAV_ITEMS_NAMES.RULES, - path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/benchmarks/:packagePolicyId/:policyId/rules`, + path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/benchmarks/:benchmarkId/:benchmarkVersion/rules`, id: 'cloud_security_posture-benchmarks-rules', }, }; diff --git a/x-pack/plugins/cloud_security_posture/public/common/types.ts b/x-pack/plugins/cloud_security_posture/public/common/types.ts index a4c26643293fd..ac483445407e4 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/types.ts @@ -22,6 +22,8 @@ export interface FindingsBaseURLQuery { export interface FindingsBaseProps { dataView: DataView; + dataViewRefetch?: () => void; + dataViewIsRefetching?: boolean; } export interface FindingsBaseESQueryConfig { diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx index ff411d2dcd9e0..ea9b276339f6a 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/additional_controls.tsx @@ -4,13 +4,14 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useState } from 'react'; -import { i18n } from '@kbn/i18n'; +import React from 'react'; import { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; import { type DataView } from '@kbn/data-views-plugin/common'; -import { FieldsSelectorModal } from './fields_selector'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { FieldsSelectorModal, useFieldsModal } from './fields_selector'; import { useStyles } from './use_styles'; import { getAbbreviatedNumber } from '../../common/utils/get_abbreviated_number'; +import { CSP_FIELDS_SELECTOR_OPEN_BUTTON } from '../test_subjects'; const GroupSelectorWrapper: React.FC = ({ children }) => { const styles = useStyles(); @@ -30,6 +31,7 @@ export const AdditionalControls = ({ onAddColumn, onRemoveColumn, groupSelectorComponent, + onResetColumns, }: { total: number; title: string; @@ -38,11 +40,10 @@ export const AdditionalControls = ({ onAddColumn: (column: string) => void; onRemoveColumn: (column: string) => void; groupSelectorComponent?: JSX.Element; + onResetColumns: () => void; }) => { - const [isFieldSelectorModalVisible, setIsFieldSelectorModalVisible] = useState(false); - - const closeModal = () => setIsFieldSelectorModalVisible(false); - const showModal = () => setIsFieldSelectorModalVisible(true); + const { isFieldSelectorModalVisible, closeFieldsSelectorModal, openFieldsSelectorModal } = + useFieldsModal(); return ( <> @@ -50,9 +51,10 @@ export const AdditionalControls = ({ )} @@ -62,13 +64,12 @@ export const AdditionalControls = ({ - {i18n.translate('xpack.csp.dataTable.fields', { - defaultMessage: 'Fields', - })} + {groupSelectorComponent && ( diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.test.tsx new file mode 100644 index 0000000000000..7ddbe28a7da07 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.test.tsx @@ -0,0 +1,102 @@ +/* + * Copyright 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 { render } from '@testing-library/react'; +import React from 'react'; +import { TestProvider } from '../../test/test_provider'; +import { CloudSecurityDataTable, CloudSecurityDataTableProps } from './cloud_security_data_table'; + +const mockDataView = { + fields: { + getAll: () => [ + { id: 'field1', name: 'field1', customLabel: 'Label 1', visualizable: true }, + { id: 'field2', name: 'field2', customLabel: 'Label 2', visualizable: true }, + ], + getByName: (name: string) => ({ id: name }), + }, + getFieldByName: (name: string) => ({ id: name }), + getFormatterForField: (name: string) => ({ + convert: (value: string) => value, + }), +} as any; + +const mockDefaultColumns = [{ id: 'field1' }, { id: 'field2' }]; + +const mockCloudPostureDataTable = { + setUrlQuery: jest.fn(), + columnsLocalStorageKey: 'test', + filters: [], + onSort: jest.fn(), + sort: [], + query: {}, + queryError: undefined, + pageIndex: 0, + urlQuery: {}, + setTableOptions: jest.fn(), + handleUpdateQuery: jest.fn(), + pageSize: 10, + setPageSize: jest.fn(), + onChangeItemsPerPage: jest.fn(), + onChangePage: jest.fn(), + onResetFilters: jest.fn(), + getRowsFromPages: jest.fn(), +} as any; + +const renderDataTable = (props: Partial = {}) => { + const defaultProps: CloudSecurityDataTableProps = { + dataView: mockDataView, + isLoading: false, + defaultColumns: mockDefaultColumns, + rows: [], + total: 0, + flyoutComponent: () => <>, + cloudPostureDataTable: mockCloudPostureDataTable, + loadMore: jest.fn(), + title: 'Test Table', + }; + + return render( + + + + ); +}; + +describe('CloudSecurityDataTable', () => { + it('renders loading state', () => { + const { getByTestId } = renderDataTable({ isLoading: true }); + expect(getByTestId('unifiedDataTableLoading')).toBeInTheDocument(); + }); + + it('renders empty state when no rows are present', () => { + const { getByTestId } = renderDataTable(); + expect(getByTestId('csp:empty-state')).toBeInTheDocument(); + }); + + it('renders data table with rows', async () => { + const mockRows = [ + { + id: '1', + raw: { + field1: 'Label 1', + field2: 'Label 2', + }, + flattened: { + field1: 'Label 1', + field2: 'Label 2', + }, + }, + ] as any; + const { getByTestId, getByText } = renderDataTable({ + rows: mockRows, + total: mockRows.length, + }); + + expect(getByTestId('discoverDocTable')).toBeInTheDocument(); + expect(getByText('Label 1')).toBeInTheDocument(); + expect(getByText('Label 2')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx index 50e81a0a0c7ec..3f0c3da73a986 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx @@ -17,7 +17,7 @@ import { generateFilters } from '@kbn/data-plugin/public'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import useLocalStorage from 'react-use/lib/useLocalStorage'; import { useKibana } from '../../common/hooks/use_kibana'; -import { CloudPostureTableResult } from '../../common/hooks/use_cloud_posture_table'; +import { CloudPostureDataTableResult } from '../../common/hooks/use_cloud_posture_data_table'; import { EmptyState } from '../empty_state'; import { MAX_FINDINGS_TO_LOAD } from '../../common/constants'; import { useStyles } from './use_styles'; @@ -40,7 +40,7 @@ const useNewFieldsApi = true; // Hide Checkbox, enable open details Flyout const controlColumnIds = ['openDetails']; -interface CloudSecurityDataGridProps { +export interface CloudSecurityDataTableProps { dataView: DataView; isLoading: boolean; defaultColumns: CloudSecurityDefaultColumn[]; @@ -52,10 +52,10 @@ interface CloudSecurityDataGridProps { */ flyoutComponent: (hit: DataTableRecord, onCloseFlyout: () => void) => JSX.Element; /** - * This is the object that contains all the data and functions from the useCloudPostureTable hook. + * This is the object that contains all the data and functions from the useCloudPostureDataTable hook. * This is also used to manage the table state from the parent component. */ - cloudPostureTable: CloudPostureTableResult; + cloudPostureDataTable: CloudPostureDataTableResult; title: string; /** * This is a function that returns a map of column ids to custom cell renderers. @@ -78,6 +78,16 @@ interface CloudSecurityDataGridProps { * Height override for the data grid. */ height?: number; + /** + * Callback Function when the DataView field is edited. + * Required to enable editing of the field in the data grid. + */ + dataViewRefetch?: () => void; + /** + * Flag to indicate if the data view is refetching. + * Required for smoothing re-rendering the DataTable columns. + */ + dataViewIsRefetching?: boolean; } export const CloudSecurityDataTable = ({ @@ -87,14 +97,16 @@ export const CloudSecurityDataTable = ({ rows, total, flyoutComponent, - cloudPostureTable, + cloudPostureDataTable, loadMore, title, customCellRenderer, groupSelectorComponent, height, + dataViewRefetch, + dataViewIsRefetching, ...rest -}: CloudSecurityDataGridProps) => { +}: CloudSecurityDataTableProps) => { const { columnsLocalStorageKey, pageSize, @@ -104,7 +116,7 @@ export const CloudSecurityDataTable = ({ onResetFilters, filters, sort, - } = cloudPostureTable; + } = cloudPostureDataTable; const [columns, setColumns] = useLocalStorage( columnsLocalStorageKey, @@ -208,6 +220,10 @@ export const CloudSecurityDataTable = ({ return customCellRenderer(rows); }, [customCellRenderer, rows]); + const onResetColumns = () => { + setColumns(defaultColumns.map((c) => c.id)); + }; + if (!isLoading && !rows.length) { return ; } @@ -221,6 +237,7 @@ export const CloudSecurityDataTable = ({ onAddColumn={onAddColumn} onRemoveColumn={onRemoveColumn} groupSelectorComponent={groupSelectorComponent} + onResetColumns={onResetColumns} /> ); @@ -237,6 +254,9 @@ export const CloudSecurityDataTable = ({ opacity: isLoading ? 1 : 0, }; + const loadingState = + isLoading || dataViewIsRefetching ? DataLoadingState.loading : DataLoadingState.loaded; + return (
    diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx deleted file mode 100644 index 85d00612651eb..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.test.tsx +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; -import { FieldsSelectorTable, FieldsSelectorCommonProps } from './fields_selector'; -import { TestProvider } from '../../test/test_provider'; - -const mockDataView = { - fields: { - getAll: () => [ - { id: 'field1', name: 'field1', customLabel: 'Label 1', visualizable: true }, - { id: 'field2', name: 'field2', customLabel: 'Label 2', visualizable: true }, - ], - }, -} as any; - -const renderFieldsTable = (props: Partial = {}) => { - const defaultProps: FieldsSelectorCommonProps = { - dataView: mockDataView, - columns: [], - onAddColumn: jest.fn(), - onRemoveColumn: jest.fn(), - }; - - return render( - - - - ); -}; - -describe('FieldsSelectorTable', () => { - it('renders the table with data correctly', () => { - const { getByText } = renderFieldsTable(); - - expect(getByText('Label 1')).toBeInTheDocument(); - expect(getByText('Label 2')).toBeInTheDocument(); - }); - - it('calls onAddColumn when a checkbox is checked', () => { - const onAddColumn = jest.fn(); - const { getAllByRole } = renderFieldsTable({ - onAddColumn, - }); - - const checkbox = getAllByRole('checkbox')[0]; - fireEvent.click(checkbox); - - expect(onAddColumn).toHaveBeenCalledWith('field1'); - }); - - it('calls onRemoveColumn when a checkbox is unchecked', () => { - const onRemoveColumn = jest.fn(); - const { getAllByRole } = renderFieldsTable({ - columns: ['field1', 'field2'], - onRemoveColumn, - }); - - const checkbox = getAllByRole('checkbox')[1]; - fireEvent.click(checkbox); - - expect(onRemoveColumn).toHaveBeenCalledWith('field2'); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_modal.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_modal.tsx new file mode 100644 index 0000000000000..862fe219afa14 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_modal.tsx @@ -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 React, { useCallback } from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { type DataView } from '@kbn/data-views-plugin/common'; +import useSessionStorage from 'react-use/lib/useSessionStorage'; +import { SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED } from '../../../common/constants'; +import { FieldsSelectorTable } from './fields_selector_table'; +import { + CSP_FIELDS_SELECTOR_CLOSE_BUTTON, + CSP_FIELDS_SELECTOR_MODAL, + CSP_FIELDS_SELECTOR_RESET_BUTTON, +} from '../../test_subjects'; + +interface FieldsSelectorModalProps { + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; + closeModal: () => void; + onResetColumns: () => void; +} + +const title = i18n.translate('xpack.csp.dataTable.fieldsModalTitle', { + defaultMessage: 'Fields', +}); + +export const FieldsSelectorModal = ({ + closeModal, + dataView, + columns, + onAddColumn, + onRemoveColumn, + onResetColumns, +}: FieldsSelectorModalProps) => { + const [isFilterSelectedEnabled, setIsFilterSelectedEnabled] = useSessionStorage( + SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED, + false + ); + + const onFilterSelectedChange = useCallback( + (enabled: boolean) => { + setIsFilterSelectedEnabled(enabled); + }, + [setIsFilterSelectedEnabled] + ); + + return ( + + + {title} + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.test.tsx new file mode 100644 index 0000000000000..58caad6e26f82 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.test.tsx @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; +import { TestProvider } from '../../../test/test_provider'; +import { FieldsSelectorTable, FieldsSelectorTableProps } from './fields_selector_table'; + +const mockDataView = { + fields: { + getAll: () => [ + { id: 'field1', name: 'field1', customLabel: 'Label 1', visualizable: true }, + { id: 'field2', name: 'field2', customLabel: 'Label 2', visualizable: true }, + ], + }, +} as any; + +const mockOnFilterSelectedChange = jest.fn(); + +const renderFieldsTable = (props: Partial = {}) => { + const defaultProps: FieldsSelectorTableProps = { + dataView: mockDataView, + columns: [], + onAddColumn: jest.fn(), + onRemoveColumn: jest.fn(), + title: 'title', + onFilterSelectedChange: mockOnFilterSelectedChange, + isFilterSelectedEnabled: false, + }; + + return render( + + + + ); +}; + +describe('FieldsSelectorTable', () => { + it('renders the table with data correctly', () => { + const { getByText } = renderFieldsTable(); + + expect(getByText('Label 1')).toBeInTheDocument(); + expect(getByText('Label 2')).toBeInTheDocument(); + }); + + it('calls onAddColumn when a checkbox is checked', () => { + const onAddColumn = jest.fn(); + const { getAllByRole } = renderFieldsTable({ + onAddColumn, + }); + + const checkbox = getAllByRole('checkbox')[0]; + fireEvent.click(checkbox); + + expect(onAddColumn).toHaveBeenCalledWith('field1'); + }); + + it('calls onRemoveColumn when a checkbox is unchecked', () => { + const onRemoveColumn = jest.fn(); + const { getAllByRole } = renderFieldsTable({ + columns: ['field1', 'field2'], + onRemoveColumn, + }); + + const checkbox = getAllByRole('checkbox')[1]; + fireEvent.click(checkbox); + + expect(onRemoveColumn).toHaveBeenCalledWith('field2'); + }); + + describe('View selected', () => { + beforeEach(() => { + mockOnFilterSelectedChange.mockClear(); + }); + + it('should render "view all" option when filterSelected is not enabled', () => { + const { getByTestId } = renderFieldsTable({ isFilterSelectedEnabled: false }); + + expect(getByTestId('viewSelectorButton').textContent).toBe('View: all'); + }); + + it('should render "view selected" option when filterSelected is not enabled', () => { + const { getByTestId } = renderFieldsTable({ isFilterSelectedEnabled: true }); + + expect(getByTestId('viewSelectorButton').textContent).toBe('View: selected'); + }); + + it('should open the view selector with button click', async () => { + const { queryByTestId, getByTestId } = renderFieldsTable(); + + expect(queryByTestId('viewSelectorMenu')).not.toBeInTheDocument(); + expect(queryByTestId('viewSelectorOption-all')).not.toBeInTheDocument(); + expect(queryByTestId('viewSelectorOption-selected')).not.toBeInTheDocument(); + + getByTestId('viewSelectorButton').click(); + await waitForEuiPopoverOpen(); + + expect(getByTestId('viewSelectorMenu')).toBeInTheDocument(); + expect(getByTestId('viewSelectorOption-all')).toBeInTheDocument(); + expect(getByTestId('viewSelectorOption-selected')).toBeInTheDocument(); + }); + + it('should callback when "view all" option is clicked', async () => { + const { getByTestId } = renderFieldsTable({ isFilterSelectedEnabled: false }); + + getByTestId('viewSelectorButton').click(); + await waitForEuiPopoverOpen(); + getByTestId('viewSelectorOption-all').click(); + expect(mockOnFilterSelectedChange).toHaveBeenCalledWith(false); + }); + + it('should callback when "view selected" option is clicked', async () => { + const { getByTestId } = renderFieldsTable({ isFilterSelectedEnabled: false }); + + getByTestId('viewSelectorButton').click(); + await waitForEuiPopoverOpen(); + getByTestId('viewSelectorOption-selected').click(); + expect(mockOnFilterSelectedChange).toHaveBeenCalledWith(true); + }); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx similarity index 55% rename from x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx rename to x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx index 750e2eb8d8448..bae971749bc78 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/fields_selector_table.tsx @@ -4,25 +4,33 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useState, useMemo } from 'react'; + import { EuiBasicTableColumn, - EuiButton, + EuiButtonEmpty, EuiCheckbox, + EuiContextMenuItem, + EuiContextMenuPanel, EuiFlexGroup, EuiFlexItem, + EuiHorizontalRule, EuiInMemoryTable, - EuiModal, - EuiModalBody, - EuiModalFooter, - EuiModalHeader, - EuiModalHeaderTitle, + EuiPopover, EuiSearchBarProps, EuiText, } from '@elastic/eui'; +import { DataView } from '@kbn/data-views-plugin/common'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { type DataView } from '@kbn/data-views-plugin/common'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; + +const ACTION_COLUMN_WIDTH = '24px'; +const defaultSorting = { + sort: { + field: 'name', + direction: 'asc', + }, +} as const; interface Field { id: string; @@ -30,30 +38,37 @@ interface Field { displayName: string; } -export interface FieldsSelectorCommonProps { +const VIEW_LABEL = i18n.translate('xpack.csp.dataTable.fieldsModal.viewLabel', { + defaultMessage: 'View', +}); + +const VIEW_VALUE_SELECTED = i18n.translate('xpack.csp.dataTable.fieldsModal.viewSelected', { + defaultMessage: 'selected', +}); + +const VIEW_VALUE_ALL = i18n.translate('xpack.csp.dataTable.fieldsModal.viewAll', { + defaultMessage: 'all', +}); + +export interface FieldsSelectorTableProps { dataView: DataView; columns: string[]; onAddColumn: (column: string) => void; onRemoveColumn: (column: string) => void; + title: string; + onFilterSelectedChange: (enabled: boolean) => void; + isFilterSelectedEnabled: boolean; } -const ACTION_COLUMN_WIDTH = '24px'; -const defaultSorting = { - sort: { - field: 'name', - direction: 'asc', - }, -} as const; - export const FieldsSelectorTable = ({ title, dataView, columns, onAddColumn, onRemoveColumn, -}: FieldsSelectorCommonProps & { - title: string; -}) => { + isFilterSelectedEnabled, + onFilterSelectedChange, +}: FieldsSelectorTableProps) => { const dataViewFields = useMemo(() => { return dataView.fields .getAll() @@ -69,6 +84,25 @@ export const FieldsSelectorTable = ({ const [fields, setFields] = useState(dataViewFields); + useEffect(() => { + if (isFilterSelectedEnabled) { + const filteredItems = dataViewFields.filter((field) => { + return columns.includes(field.id); + }); + setFields(filteredItems); + } else { + setFields(dataViewFields); + } + }, [columns, dataViewFields, isFilterSelectedEnabled]); + + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + + const togglePopover = useCallback(() => { + setIsPopoverOpen((open) => !open); + }, []); + const closePopover = useCallback(() => { + setIsPopoverOpen(false); + }, []); let debounceTimeoutId: ReturnType; const onQueryChange: EuiSearchBarProps['onChange'] = ({ query }) => { @@ -85,8 +119,6 @@ export const FieldsSelectorTable = ({ }, 300); }; - const [fieldsSelected, setFieldsSelected] = useState(columns); - const tableColumns: Array> = [ { field: 'action', @@ -96,13 +128,11 @@ export const FieldsSelectorTable = ({ render: (_, { id }: Field) => { return ( { const isChecked = e.target.checked; - setFieldsSelected( - isChecked ? [...fieldsSelected, id] : fieldsSelected.filter((f) => f !== id) - ); return isChecked ? onAddColumn(id) : onRemoveColumn(id); }} /> @@ -164,9 +194,65 @@ export const FieldsSelectorTable = ({ /> + + + {`${VIEW_LABEL}: ${isFilterSelectedEnabled ? VIEW_VALUE_SELECTED : VIEW_VALUE_ALL}`} + + } + > + { + onFilterSelectedChange(false); + closePopover(); + }} + > + {`${VIEW_LABEL} ${VIEW_VALUE_ALL}`} + , + , + { + onFilterSelectedChange(true); + closePopover(); + }} + > + {`${VIEW_LABEL} ${VIEW_VALUE_SELECTED}`} + , + ]} + /> + + ); - }, [fields.length]); + }, [ + closePopover, + fields.length, + isFilterSelectedEnabled, + isPopoverOpen, + onFilterSelectedChange, + togglePopover, + ]); return ( ); }; - -export const FieldsSelectorModal = ({ - closeModal, - dataView, - columns, - onAddColumn, - onRemoveColumn, -}: FieldsSelectorCommonProps & { - closeModal: () => void; -}) => { - const title = i18n.translate('xpack.csp.dataTable.fieldsModalTitle', { - defaultMessage: 'Fields', - }); - - return ( - - - {title} - - - - - - - Close - - - - ); -}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/index.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/index.ts new file mode 100644 index 0000000000000..d097d5098a73c --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { FieldsSelectorModal } from './fields_selector_modal'; +export { FieldsSelectorTable } from './fields_selector_table'; +export { useFieldsModal } from './use_fields_modal'; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/use_fields_modal.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/use_fields_modal.ts new file mode 100644 index 0000000000000..9ca88d3d97b76 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/fields_selector/use_fields_modal.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 { useState } from 'react'; + +export const useFieldsModal = () => { + const [isFieldSelectorModalVisible, setIsFieldSelectorModalVisible] = useState(false); + + const closeFieldsSelectorModal = () => setIsFieldSelectorModalVisible(false); + const openFieldsSelectorModal = () => setIsFieldSelectorModalVisible(true); + + return { + isFieldSelectorModalVisible, + closeFieldsSelectorModal, + openFieldsSelectorModal, + }; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts index a2b923bf26b5b..7823698ebd5c8 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts @@ -70,6 +70,9 @@ export const useStyles = () => { & .unifiedDataTable__cellValue { font-family: ${euiTheme.font.family}; } + & .unifiedDataTable__inner .euiDataGrid__controls { + border-top: none; + } `; const groupBySelector = css` diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/get_azure_credentials_form_options.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/get_azure_credentials_form_options.tsx index d6044118f1afd..c4135ecaf2eb7 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/get_azure_credentials_form_options.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/azure_credentials_form/get_azure_credentials_form_options.tsx @@ -26,15 +26,17 @@ export const getAzureCredentialsFormManualOptions = (): Array<{ value: AzureCredentialsType; text: string; }> => { - return ( - Object.entries(getAzureCredentialsFormOptions()) - .map(([key, value]) => ({ - value: key as AzureCredentialsType, - text: value.label, - })) - // TODO: remove 'manual' for stack version 8.13 - .filter(({ value }) => value !== 'arm_template' && value !== 'manual') - ); + return Object.entries(getAzureCredentialsFormOptions()) + .map(([key, value]) => ({ + value: key as AzureCredentialsType, + text: value.label, + })) + .filter( + ({ value }) => + value !== 'arm_template' && // we remove this in order to hide it from the selectable options in the manual drop down + value !== 'manual' && // TODO: remove 'manual' for stack version 8.13 + value !== 'service_principal_with_client_username_and_password' // this option is temporarily hidden + ); }; export const getInputVarsFields = (input: NewPackagePolicyInput, fields: AzureCredentialsFields) => diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx index 3b549dcc9d9ed..c7413bdac83ba 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx @@ -1644,7 +1644,26 @@ describe('', () => { }); }); - it(`renders Service principal with Client Username and Password fields`, () => { + it(`should not render Service principal with Client Username and Password option`, () => { + let policy = getMockPolicyAzure(); + policy = getPosturePolicy(policy, CLOUDBEAT_AZURE, { + 'azure.credentials.type': { value: 'managed_identity' }, + }); + + const { queryByRole } = render( + + ); + + expect( + queryByRole('option', { + name: 'Service principal with Client Username and Password', + selected: false, + }) + ).not.toBeInTheDocument(); + }); + + // TODO: remove when service_principal_with_client_username_and_password is removed from the code base + it.skip(`renders Service principal with Client Username and Password fields`, () => { let policy = getMockPolicyAzure(); policy = getPosturePolicy(policy, CLOUDBEAT_AZURE, { 'azure.credentials.type': { value: 'service_principal_with_client_username_and_password' }, @@ -1666,7 +1685,8 @@ describe('', () => { expect(getByLabelText('Client Password')).toBeInTheDocument(); }); - it(`updates Service principal with Client Username and Password fields`, () => { + // TODO: remove when service_principal_with_client_username_and_password is removed from the code base + it.skip(`updates Service principal with Client Username and Password fields`, () => { let policy = getMockPolicyAzure(); policy = getPosturePolicy(policy, CLOUDBEAT_AZURE, { 'azure.credentials.type': { value: 'service_principal_with_client_username_and_password' }, diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx index f070b1e0ad345..ba7bf5071e7d4 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx @@ -31,10 +31,10 @@ import { import { CloudPosturePage, PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from './cloud_posture_page'; import { useCspSetupStatusApi } from '../common/api/use_setup_status_api'; import type { IndexDetails, PostureTypes } from '../../common/types_old'; -import { cspIntegrationDocsNavigation } from '../common/navigation/constants'; import noDataIllustration from '../assets/illustrations/no_data_illustration.svg'; import { useCspIntegrationLink } from '../common/navigation/use_csp_integration_link'; import { NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS } from '../common/constants'; +import { cspIntegrationDocsNavigation } from '../common/navigation/constants'; const NotDeployed = ({ postureType }: { postureType: PostureTypes }) => { const integrationPoliciesLink = useCISIntegrationPoliciesLink({ @@ -246,14 +246,14 @@ const ConfigurationFindingsInstalledEmptyPrompt = ({ * This component will return the render states based on cloud posture setup status API * since 'not-installed' is being checked globally by CloudPosturePage and 'indexed' is the pass condition, those states won't be handled here * */ -export const NoFindingsStates = ({ posturetype }: { posturetype: PostureTypes }) => { +export const NoFindingsStates = ({ postureType }: { postureType: PostureTypes }) => { const getSetupStatus = useCspSetupStatusApi({ refetchInterval: NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS, }); const statusKspm = getSetupStatus.data?.kspm?.status; const statusCspm = getSetupStatus.data?.cspm?.status; const indicesStatus = getSetupStatus.data?.indicesDetails; - const status = posturetype === 'cspm' ? statusCspm : statusKspm; + const status = postureType === 'cspm' ? statusCspm : statusKspm; const showConfigurationInstallPrompt = getSetupStatus.data?.kspm?.status === 'not-installed' && getSetupStatus.data?.cspm?.status === 'not-installed'; @@ -267,7 +267,7 @@ export const NoFindingsStates = ({ posturetype }: { posturetype: PostureTypes }) .map((idxDetails: IndexDetails) => idxDetails.index) .sort((a, b) => a.localeCompare(b)); const render = () => { - if (status === 'not-deployed') return ; // integration installed, but no agents added + if (status === 'not-deployed') return ; // integration installed, but no agents added if (status === 'indexing' || status === 'waiting_for_results') return ; // agent added, index timeout hasn't passed since installation if (status === 'index-timeout') return ; // agent added, index timeout has passed if (status === 'unprivileged') diff --git a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts index c51d562fec44a..250b5d01c82ce 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts @@ -44,6 +44,11 @@ export const CSP_GROUPING = 'cloudSecurityGrouping'; export const CSP_GROUPING_LOADING = 'cloudSecurityGroupingLoading'; export const CSP_FINDINGS_COMPLIANCE_SCORE = 'cloudSecurityFindingsComplianceScore'; +export const CSP_FIELDS_SELECTOR_MODAL = 'cloudSecurityFieldsSelectorModal'; +export const CSP_FIELDS_SELECTOR_OPEN_BUTTON = 'cloudSecurityFieldsSelectorOpenButton'; +export const CSP_FIELDS_SELECTOR_RESET_BUTTON = 'cloudSecurityFieldsSelectorResetButton'; +export const CSP_FIELDS_SELECTOR_CLOSE_BUTTON = 'cloudSecurityFieldsSelectorCloseButton'; + export const AWS_CREDENTIALS_TYPE_SELECTOR_TEST_SUBJ = 'aws-credentials-type-selector'; export const AWS_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ = { CLOUDFORMATION: 'aws-cloudformation-setup-option', diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx index 2f848868c54d3..bf2c38a54e377 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx @@ -31,9 +31,14 @@ import { } from './use_csp_benchmark_integrations'; import { extractErrorMessage, getBenchmarkCisName } from '../../../common/utils/helpers'; import * as TEST_SUBJ from './test_subjects'; -import { LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY } from '../../common/constants'; +import { + LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY, + NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS, +} from '../../common/constants'; import { usePageSize } from '../../common/hooks/use_page_size'; import { useKibana } from '../../common/hooks/use_kibana'; +import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; +import { NoFindingsStates } from '../../components/no_findings_states'; const SEARCH_DEBOUNCE_MS = 300; @@ -151,6 +156,14 @@ export const Benchmarks = () => { []; const totalItemCount = queryResult.data?.items.length || 0; + // Check if we have any CSP Integration or not + const getSetupStatus = useCspSetupStatusApi({ + refetchInterval: NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS, + }); + const showConfigurationInstallPrompt = + getSetupStatus.data?.kspm?.status === 'not-installed' && + getSetupStatus.data?.cspm?.status === 'not-installed'; + return ( { bottomBorder /> - setQuery((current) => ({ ...current, name }))} - /> - - - - { - setPageSize(page.size); - setQuery((current) => ({ - ...current, - page: page.index, - perPage: page.size, - sortField: - (sort?.field as UseCspBenchmarkIntegrationsProps['sortField']) || current.sortField, - sortOrder: sort?.direction || current.sortOrder, - })); - }} - noItemsMessage={ - queryResult.isSuccess ? : undefined - } - /> + {showConfigurationInstallPrompt ? ( + + ) : ( + <> + setQuery((current) => ({ ...current, name }))} + /> + + + + { + setPageSize(page.size); + setQuery((current) => ({ + ...current, + page: page.index, + perPage: page.size, + sortField: + (sort?.field as UseCspBenchmarkIntegrationsProps['sortField']) || + current.sortField, + sortOrder: sort?.direction || current.sortOrder, + })); + }} + noItemsMessage={ + queryResult.isSuccess ? : undefined + } + /> + + )} ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx index be04bcd48bce3..8eaac69ec4e78 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx @@ -14,10 +14,13 @@ import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, + EuiLink, } from '@elastic/eui'; import React from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { generatePath } from 'react-router-dom'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { BenchmarkScore, Benchmark, BenchmarksCisId } from '../../../common/types/latest'; import * as TEST_SUBJ from './test_subjects'; import { isCommonError } from '../../components/cloud_posture_page'; @@ -25,6 +28,7 @@ import { FullSizeCenteredPage } from '../../components/full_size_centered_page'; import { ComplianceScoreBar } from '../../components/compliance_score_bar'; import { getBenchmarkCisName, getBenchmarkApplicableTo } from '../../../common/utils/helpers'; import { CISBenchmarkIcon } from '../../components/cis_benchmark_icon'; +import { benchmarksNavigation } from '../../common/navigation/constants'; export const ERROR_STATE_TEST_SUBJECT = 'benchmark_page_error'; @@ -36,6 +40,28 @@ interface BenchmarksTableProps 'data-test-subj'?: string; } +const BenchmarkButtonLink = ({ + benchmarkId, + benchmarkVersion, +}: { + benchmarkId: BenchmarksCisId; + benchmarkVersion: string; +}) => { + const { application } = useKibana().services; + return ( + + {getBenchmarkCisName(benchmarkId)} + + ); +}; + export const getBenchmarkPlurals = (benchmarkId: string, accountEvaluation: number) => { switch (benchmarkId) { case 'cis_k8s': @@ -123,9 +149,12 @@ const BENCHMARKS_TABLE_COLUMNS: Array> = [ truncateText: true, width: '17.5%', sortable: true, - render: (benchmarkId: BenchmarksCisId) => { - return getBenchmarkCisName(benchmarkId); - }, + render: (benchmarkId: Benchmark['id'], benchmark: Benchmark) => ( + + ), 'data-test-subj': TEST_SUBJ.BENCHMARKS_TABLE_COLUMNS.CIS_NAME, }, { @@ -168,8 +197,8 @@ const BENCHMARKS_TABLE_COLUMNS: Array> = [ truncateText: true, width: '17.5%', 'data-test-subj': TEST_SUBJ.BENCHMARKS_TABLE_COLUMNS.EVALUATED, - render: (complianceScore: Benchmark['evaluation'], data) => { - return getBenchmarkPlurals(data.id, data.evaluation); + render: (benchmarkEvaluation: Benchmark['evaluation'], benchmark: Benchmark) => { + return getBenchmarkPlurals(benchmark.id, benchmarkEvaluation); }, }, { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx index 61a56ecd3187c..e8c8de2b7adbd 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx @@ -276,7 +276,7 @@ const TabContent = ({ posturetype }: { posturetype: PosturePolicyTemplate }) => } if (shouldRenderNoFindings) { - return ; + return ; } return ( @@ -384,7 +384,7 @@ export const ComplianceDashboard = () => { `} > {tabs.find((t) => t.isSelected)?.content} - {!isCloudSecurityPostureInstalled && } + {!isCloudSecurityPostureInstalled && }
    ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx index d1b35ab617a96..7b7bd42561204 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.test.tsx @@ -26,7 +26,6 @@ import { render } from '@testing-library/react'; import { expectIdsInDoc } from '../../test/utils'; import { PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../../components/cloud_posture_page'; import { useLicenseManagementLocatorApi } from '../../common/api/use_license_management_locator_api'; -import { useCloudPostureTable } from '../../common/hooks/use_cloud_posture_table'; jest.mock('../../common/api/use_latest_findings_data_view'); jest.mock('../../common/api/use_setup_status_api'); @@ -34,7 +33,6 @@ jest.mock('../../common/api/use_license_management_locator_api'); jest.mock('../../common/hooks/use_subscription_status'); jest.mock('../../common/navigation/use_navigate_to_cis_integration_policies'); jest.mock('../../common/navigation/use_csp_integration_link'); -jest.mock('../../common/hooks/use_cloud_posture_table'); const chance = new Chance(); @@ -54,13 +52,6 @@ beforeEach(() => { data: true, }) ); - - (useCloudPostureTable as jest.Mock).mockImplementation(() => ({ - getRowsFromPages: jest.fn(), - columnsLocalStorageKey: 'test', - filters: [], - sort: [], - })); }); const renderFindingsPage = () => { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.tsx index b94165c26c552..7e8bbfeedb832 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/configurations.tsx @@ -29,7 +29,7 @@ export const Configurations = () => { const noFindingsForPostureType = getSetupStatus?.cspm.status !== 'not-installed' ? 'cspm' : 'kspm'; - if (!hasConfigurationFindings) return ; + if (!hasConfigurationFindings) return ; return ( @@ -50,7 +50,11 @@ export const Configurations = () => { path={findingsNavigation.findings_default.path} render={() => ( - + )} /> diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_detection_rule_counter.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_detection_rule_counter.tsx index f39379f8c4ddd..24ef238cf5774 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_detection_rule_counter.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/findings_detection_rule_counter.tsx @@ -9,10 +9,8 @@ import type { HttpSetup } from '@kbn/core/public'; import React from 'react'; import { CspFinding } from '../../../../common/schemas/csp_finding'; import { DetectionRuleCounter } from '../../../components/detection_rule_counter'; -import { - createDetectionRuleFromFinding, - getFindingsDetectionRuleSearchTags, -} from '../utils/create_detection_rule_from_finding'; +import { createDetectionRuleFromFinding } from '../utils/create_detection_rule_from_finding'; +import { getFindingsDetectionRuleSearchTags } from '../../../../common/utils/detection_rules'; export const FindingsDetectionRuleCounter = ({ finding }: { finding: CspFinding }) => { const createMisconfigurationRuleFn = async (http: HttpSetup) => @@ -20,7 +18,7 @@ export const FindingsDetectionRuleCounter = ({ finding }: { finding: CspFinding return ( ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx index 9d536f0f0b180..e070847b6df55 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx @@ -18,7 +18,11 @@ import { groupPanelRenderer, groupStatsRenderer } from './latest_findings_group_ import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; import { ErrorCallout } from '../layout/error_callout'; -export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { +export const LatestFindingsContainer = ({ + dataView, + dataViewRefetch, + dataViewIsRefetching, +}: FindingsBaseProps) => { const renderChildComponent = useCallback( (groupFilters: Filter[]) => { return ( @@ -27,10 +31,12 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { nonPersistedFilters={groupFilters} height={DEFAULT_TABLE_HEIGHT} showDistributionBar={false} + dataViewRefetch={dataViewRefetch} + dataViewIsRefetching={dataViewIsRefetching} /> ); }, - [dataView] + [dataView, dataViewIsRefetching, dataViewRefetch] ); const { @@ -94,7 +100,12 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { return ( <> - + ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx index be6d34a1df933..3adb10259871d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx @@ -27,6 +27,8 @@ type LatestFindingsTableProps = FindingsBaseProps & { height?: number; showDistributionBar?: boolean; nonPersistedFilters?: Filter[]; + dataViewRefetch?: () => void; + dataViewIsRefetching?: boolean; }; /** @@ -87,9 +89,11 @@ export const LatestFindingsTable = ({ height, showDistributionBar = true, nonPersistedFilters, + dataViewRefetch, + dataViewIsRefetching, }: LatestFindingsTableProps) => { const { - cloudPostureTable, + cloudPostureDataTable, rows, error, isFetching, @@ -134,12 +138,14 @@ export const LatestFindingsTable = ({ rows={rows} total={total} flyoutComponent={flyoutComponent} - cloudPostureTable={cloudPostureTable} + cloudPostureDataTable={cloudPostureDataTable} loadMore={fetchNextPage} title={title} customCellRenderer={customCellRenderer} groupSelectorComponent={groupSelectorComponent} height={height} + dataViewRefetch={dataViewRefetch} + dataViewIsRefetching={dataViewIsRefetching} /> )} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_table.tsx index 50ebb01f363f0..b60eefac2ac81 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_table.tsx @@ -28,7 +28,7 @@ export const useLatestFindingsTable = ({ nonPersistedFilters?: Filter[]; showDistributionBar?: boolean; }) => { - const cloudPostureTable = useCloudPostureDataTable({ + const cloudPostureDataTable = useCloudPostureDataTable({ dataView, paginationLocalStorageKey: LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY, columnsLocalStorageKey, @@ -36,7 +36,7 @@ export const useLatestFindingsTable = ({ nonPersistedFilters, }); - const { query, sort, queryError, setUrlQuery, filters, getRowsFromPages } = cloudPostureTable; + const { query, sort, queryError, setUrlQuery, filters, getRowsFromPages } = cloudPostureDataTable; const { data, @@ -72,7 +72,7 @@ export const useLatestFindingsTable = ({ const canShowDistributionBar = showDistributionBar && total > 0; return { - cloudPostureTable, + cloudPostureDataTable, rows, error, isFetching, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/utils/create_detection_rule_from_finding.ts b/x-pack/plugins/cloud_security_posture/public/pages/configurations/utils/create_detection_rule_from_finding.ts index b06246e6605e9..ca0e03460c340 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/utils/create_detection_rule_from_finding.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/utils/create_detection_rule_from_finding.ts @@ -12,6 +12,7 @@ import { LATEST_FINDINGS_RETENTION_POLICY, } from '../../../../common/constants'; import { createDetectionRule } from '../../../common/api/create_detection_rule'; +import { generateBenchmarkRuleTags } from '../../../../common/utils/detection_rules'; const DEFAULT_RULE_RISK_SCORE = 0; const DEFAULT_RULE_SEVERITY = 'low'; @@ -47,43 +48,6 @@ const convertReferencesLinksToArray = (input: string | undefined) => { return matches.map((link) => link.replace(/^\d+\. /, '').replace(/\n/g, '')); }; -const CSP_RULE_TAG = 'Cloud Security'; -const CSP_RULE_TAG_USE_CASE = 'Use Case: Configuration Audit'; -const CSP_RULE_TAG_DATA_SOURCE_PREFIX = 'Data Source: '; - -const STATIC_RULE_TAGS = [CSP_RULE_TAG, CSP_RULE_TAG_USE_CASE]; - -/* - * Returns an array of CspFinding tags that can be used to search and filter a detection rule - */ -export const getFindingsDetectionRuleSearchTags = ({ rule }: CspFinding) => { - // ex: cis_gcp to ['CIS', 'GCP'] - const benchmarkIdTags = rule.benchmark.id.split('_').map((tag) => tag.toUpperCase()); - // ex: 'CIS GCP 1.1' - const benchmarkRuleNumberTag = `${rule.benchmark.id.replace('_', ' ').toUpperCase()} ${ - rule.benchmark.rule_number - }`; - - return benchmarkIdTags.concat([benchmarkRuleNumberTag]); -}; - -const generateFindingsTags = (finding: CspFinding) => { - return [STATIC_RULE_TAGS] - .concat(getFindingsDetectionRuleSearchTags(finding)) - .concat( - finding.rule.benchmark.posture_type - ? [ - finding.rule.benchmark.posture_type.toUpperCase(), - `${CSP_RULE_TAG_DATA_SOURCE_PREFIX}${finding.rule.benchmark.posture_type.toUpperCase()}`, - ] - : [] - ) - .concat( - finding.rule.benchmark.posture_type === 'cspm' ? ['Domain: Cloud'] : ['Domain: Container'] - ) - .flat(); -}; - const generateFindingsRuleQuery = (finding: CspFinding) => { const currentTimestamp = new Date().toISOString(); @@ -128,7 +92,7 @@ export const createDetectionRuleFromFinding = async (http: HttpSetup, finding: C references: convertReferencesLinksToArray(finding.rule.references), name: finding.rule.name, description: finding.rule.rationale, - tags: generateFindingsTags(finding), + tags: generateBenchmarkRuleTags(finding.rule), investigation_fields: DEFAULT_INVESTIGATION_FIELDS, note: finding.rule.remediation, }, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx index d498d7f0dc503..f4f2f0b5ed480 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx @@ -7,75 +7,25 @@ import React from 'react'; import { generatePath, Link, type RouteComponentProps } from 'react-router-dom'; -import { - EuiButtonEmpty, - type EuiDescriptionListProps, - EuiFlexGroup, - EuiPageHeader, - EuiSpacer, - EuiFlexItem, -} from '@elastic/eui'; +import { EuiButtonEmpty, EuiFlexGroup, EuiPageHeader, EuiSpacer, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { pagePathGetters } from '@kbn/fleet-plugin/public'; import { i18n } from '@kbn/i18n'; -import { PackagePolicy } from '@kbn/fleet-plugin/common'; -import { CspInlineDescriptionList } from '../../components/csp_inline_description_list'; import { CloudPosturePageTitle } from '../../components/cloud_posture_page_title'; -import { RulesContainer, type PageUrlParams } from './rules_container'; +import { RulesContainer } from './rules_container'; import { cloudPosturePages } from '../../common/navigation/constants'; -import { useCspIntegrationInfo } from './use_csp_integration'; -import { useKibana } from '../../common/hooks/use_kibana'; import { CloudPosturePage } from '../../components/cloud_posture_page'; import { useSecuritySolutionContext } from '../../application/security_solution_context'; -import * as TEST_SUBJECTS from './test_subjects'; -import { getEnabledCspIntegrationDetails } from '../../common/utils/get_enabled_csp_integration_details'; - -const getRulesSharedValues = ( - packageInfo?: PackagePolicy -): NonNullable => { - const enabledIntegration = getEnabledCspIntegrationDetails(packageInfo); - const values = []; - - if (enabledIntegration?.integration?.shortName) { - values.push({ - title: i18n.translate('xpack.csp.rules.rulesPageSharedValues.integrationTitle', { - defaultMessage: 'Integration', - }), - description: enabledIntegration?.integration.shortName, - }); - } - - if (!enabledIntegration?.enabledIntegrationOption) return values; - - values.push( - { - title: i18n.translate('xpack.csp.rules.rulesPageSharedValues.deploymentTypeTitle', { - defaultMessage: 'Deployment Type', - }), - description: enabledIntegration?.enabledIntegrationOption.name, - }, - { - title: i18n.translate('xpack.csp.rules.rulesPageSharedValues.benchmarkTitle', { - defaultMessage: 'Benchmark', - }), - description: enabledIntegration?.enabledIntegrationOption.benchmark, - } - ); - - return values; -}; +import { useCspBenchmarkIntegrationsV2 } from '../benchmarks/use_csp_benchmark_integrations'; +import { CISBenchmarkIcon } from '../../components/cis_benchmark_icon'; +import { getBenchmarkCisName } from '../../../common/utils/helpers'; +import { PageUrlParams } from '../../../common/types/latest'; export const Rules = ({ match: { params } }: RouteComponentProps) => { - const { http } = useKibana().services; - const integrationInfo = useCspIntegrationInfo(params); + const benchmarksInfo = useCspBenchmarkIntegrationsV2(); const SpyRoute = useSecuritySolutionContext()?.getSpyRouteComponent(); - const [packageInfo] = integrationInfo.data || []; - - const sharedValues = getRulesSharedValues(packageInfo); - return ( - + ) - + + + + + + + +
    } - description={ - sharedValues.length && ( -
    - -
    - ) - } - rightSideItems={[ - - - , - ]} /> {SpyRoute && ( )} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx index 38c4ac36b9ffb..7abcd0c37060b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx @@ -11,16 +11,16 @@ import { Rules } from '.'; import { render, screen } from '@testing-library/react'; import { QueryClient } from '@tanstack/react-query'; import { TestProvider } from '../../test/test_provider'; -import { useCspIntegrationInfo } from './use_csp_integration'; import { type RouteComponentProps } from 'react-router-dom'; -import type { PageUrlParams } from './rules_container'; -import * as TEST_SUBJECTS from './test_subjects'; +import { PageUrlParams } from '../../../common/types/latest'; import { createReactQueryResponse } from '../../test/fixtures/react_query'; import { coreMock } from '@kbn/core/public/mocks'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; import { useSubscriptionStatus } from '../../common/hooks/use_subscription_status'; import { useCspIntegrationLink } from '../../common/navigation/use_csp_integration_link'; import { useLicenseManagementLocatorApi } from '../../common/api/use_license_management_locator_api'; +import { useCspBenchmarkIntegrationsV2 } from '../benchmarks/use_csp_benchmark_integrations'; +import * as TEST_SUBJECTS from './test_subjects'; jest.mock('./use_csp_integration', () => ({ useCspIntegrationInfo: jest.fn(), @@ -29,6 +29,9 @@ jest.mock('../../common/api/use_setup_status_api'); jest.mock('../../common/api/use_license_management_locator_api'); jest.mock('../../common/hooks/use_subscription_status'); jest.mock('../../common/navigation/use_csp_integration_link'); +jest.mock('../benchmarks/use_csp_benchmark_integrations', () => ({ + useCspBenchmarkIntegrationsV2: jest.fn(), +})); const chance = new Chance(); @@ -98,52 +101,48 @@ describe('', () => { (useCspIntegrationLink as jest.Mock).mockImplementation(() => chance.url()); }); - it('calls API with URL params', async () => { - const params = { packagePolicyId: '1', policyId: '2' }; + it('calls Benchmark API', async () => { + const params: PageUrlParams = { benchmarkId: 'cis_eks', benchmarkVersion: '1.9.1' }; const Component = getTestComponent(params); const result = createReactQueryResponse({ status: 'loading', }); - (useCspIntegrationInfo as jest.Mock).mockReturnValue(result); + (useCspBenchmarkIntegrationsV2 as jest.Mock).mockReturnValue(result); render(); - expect(useCspIntegrationInfo).toHaveBeenCalledWith(params); + expect(useCspBenchmarkIntegrationsV2).toHaveBeenCalled(); }); - it('displays success state when result request is resolved', async () => { - const Component = getTestComponent({ packagePolicyId: '21', policyId: '22' }); - const response = createReactQueryResponse({ + it('Display success state when result request is resolved', async () => { + const params: PageUrlParams = { benchmarkId: 'cis_eks', benchmarkVersion: '1.9.1' }; + const Component = getTestComponent(params); + const result = createReactQueryResponse({ status: 'success', - data: [ - { - name: 'CIS Kubernetes Benchmark', - package: { - title: 'my package', - }, - inputs: [ - { - enabled: true, - policy_template: 'kspm', - type: 'cloudbeat/cis_k8s', + data: { + items: [ + { + evaluation: 1, + id: 'cis_k8s', + name: 'CIS Kubernetes V1.23', + score: { + postureScore: 50, + totalFailed: 1, + totalFindings: 0, + totalPassed: 1, }, - { - enabled: false, - policy_template: 'kspm', - type: 'cloudbeat/cis_eks', - }, - ], - }, - { name: 'my agent' }, - ], + version: '1.0.1', + }, + ], + }, }); - (useCspIntegrationInfo as jest.Mock).mockReturnValue(response); + (useCspBenchmarkIntegrationsV2 as jest.Mock).mockReturnValue(result); render(); expect(await screen.findByTestId(TEST_SUBJECTS.CSP_RULES_CONTAINER)).toBeInTheDocument(); - expect(await screen.findByTestId(TEST_SUBJECTS.CSP_RULES_SHARED_VALUES)).toBeInTheDocument(); + expect(useCspBenchmarkIntegrationsV2).toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.test.tsx index 6301c9cc20b7c..2bef97439578b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.test.tsx @@ -78,7 +78,15 @@ const getRuleMock = (id = chance.guid()): CspBenchmarkRule => } as CspBenchmarkRule); const params = { - packagePolicyId: chance.guid(), + paginations: { + page: 1, + perPage: 10000, + ruleNumber: undefined, + search: '', + section: undefined, + }, + benchmarkId: 'cis_k8s', + benchmarkVersion: '1.0.1', }; describe('', () => { @@ -109,5 +117,10 @@ describe('', () => { expect(await screen.findByTestId(TEST_SUBJECTS.CSP_RULES_CONTAINER)).toBeInTheDocument(); expect(await screen.findByText(rule1.metadata.name)).toBeInTheDocument(); + expect(useFindCspBenchmarkRule).toHaveBeenCalledWith( + params.paginations, + params.benchmarkId, + params.benchmarkVersion + ); }); }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx index 5ec1971b1f0ac..23c839ff585e1 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx @@ -19,7 +19,7 @@ import * as TEST_SUBJECTS from './test_subjects'; import { RuleFlyout } from './rules_flyout'; import { LOCAL_STORAGE_PAGE_SIZE_RULES_KEY } from '../../common/constants'; import { usePageSize } from '../../common/hooks/use_page_size'; -import type { CspBenchmarkRule } from '../../../common/types/latest'; +import type { CspBenchmarkRule, PageUrlParams } from '../../../common/types/latest'; interface RulesPageData { rules_page: CspBenchmarkRule[]; all_rules: CspBenchmarkRule[]; @@ -54,14 +54,13 @@ const getPage = (data: CspBenchmarkRule[], { page, perPage }: RulesQuery) => const MAX_ITEMS_PER_PAGE = 10000; -export type PageUrlParams = Record<'policyId' | 'packagePolicyId', string>; - export const RulesContainer = () => { const params = useParams(); const [selectedRuleId, setSelectedRuleId] = useState(null); const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_RULES_KEY); const [rulesQuery, setRulesQuery] = useState({ section: undefined, + ruleNumber: undefined, search: '', page: 0, perPage: pageSize || 10, @@ -70,11 +69,13 @@ export const RulesContainer = () => { const { data, status, error } = useFindCspBenchmarkRule( { section: rulesQuery.section, + ruleNumber: rulesQuery.ruleNumber, search: rulesQuery.search, page: 1, perPage: MAX_ITEMS_PER_PAGE, }, - params.packagePolicyId + params.benchmarkId, + params.benchmarkVersion ); const rulesPageData = useMemo( @@ -88,14 +89,20 @@ export const RulesContainer = () => { page: 1, perPage: MAX_ITEMS_PER_PAGE, }, - params.packagePolicyId + params.benchmarkId, + params.benchmarkVersion ); const sectionList = useMemo( () => allRules.data?.items.map((rule) => rule.metadata.section), [allRules.data] ); + const ruleNumberList = useMemo( + () => allRules.data?.items.map((rule) => rule.metadata.benchmark.rule_number || ''), + [allRules.data] + ); const cleanedSectionList = [...new Set(sectionList)]; + const cleanedRuleNumberList = [...new Set(ruleNumberList)]; return (
    @@ -104,7 +111,11 @@ export const RulesContainer = () => { onSectionChange={(value) => setRulesQuery((currentQuery) => ({ ...currentQuery, section: value })) } + onRuleNumberChange={(value) => + setRulesQuery((currentQuery) => ({ ...currentQuery, ruleNumber: value })) + } sectionSelectOptions={cleanedSectionList} + ruleNumberSelectOptions={cleanedRuleNumberList} search={(value) => setRulesQuery((currentQuery) => ({ ...currentQuery, search: value }))} searchValue={rulesQuery.search || ''} totalRulesCount={rulesPageData.all_rules.length} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx index 18e31bdb366db..fa2b0316316ae 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx @@ -22,7 +22,9 @@ import { css } from '@emotion/react'; interface RulesTableToolbarProps { search: (value: string) => void; onSectionChange: (value: string | undefined) => void; + onRuleNumberChange: (value: string | undefined) => void; sectionSelectOptions: string[]; + ruleNumberSelectOptions: string[]; totalRulesCount: number; searchValue: string; isSearching: boolean; @@ -41,17 +43,24 @@ export const RulesTableHeader = ({ totalRulesCount, pageSize, onSectionChange, + onRuleNumberChange, sectionSelectOptions, + ruleNumberSelectOptions, }: RulesTableToolbarProps) => { - const [selected, setSelected] = useState([]); + const [selectedSection, setSelectedSection] = useState([]); + const [selectedRuleNumber, setSelectedRuleNumber] = useState([]); const sectionOptions = sectionSelectOptions.map((option) => ({ label: option, })); + const ruleNumberOptions = ruleNumberSelectOptions.map((option) => ({ + label: option, + })); + return ( - + - - { - setSelected(option); - onSectionChange(option.length ? option[0].label : undefined); - }} - /> + + + + { + setSelectedSection(option); + onSectionChange(option.length ? option[0].label : undefined); + }} + /> + + + { + setSelectedRuleNumber(option); + onRuleNumberChange(option.length ? option[0].label : undefined); + }} + /> + + ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_benchmark_rules.ts b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_benchmark_rules.ts index 8dca9b63c1930..b7b772bdf63fe 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_benchmark_rules.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_benchmark_rules.ts @@ -13,28 +13,31 @@ import { useKibana } from '../../common/hooks/use_kibana'; import { CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, - FIND_CSP_BENCHMARK_RULE_API_CURRENT_VERSION, FIND_CSP_BENCHMARK_RULE_ROUTE_PATH, } from '../../../common/constants'; export type RulesQuery = Pick< FindCspBenchmarkRuleRequest, - 'section' | 'search' | 'page' | 'perPage' + 'section' | 'search' | 'page' | 'perPage' | 'ruleNumber' >; export type RulesQueryResult = ReturnType; export const useFindCspBenchmarkRule = ( - { search, page, perPage, section }: RulesQuery, - packagePolicyId: string + { search, page, perPage, section, ruleNumber }: RulesQuery, + benchmarkId: string, + benchmarkVersion?: string ) => { const { http } = useKibana().services; return useQuery( - [CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, { section, search, page, perPage, packagePolicyId }], + [ + CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, + { section, search, page, perPage, benchmarkId, benchmarkVersion, ruleNumber }, + ], () => { return http.get(FIND_CSP_BENCHMARK_RULE_ROUTE_PATH, { - query: { packagePolicyId, page, perPage, search, section }, - version: FIND_CSP_BENCHMARK_RULE_API_CURRENT_VERSION, + query: { benchmarkId, page, perPage, search, section, benchmarkVersion, ruleNumber }, + version: '2', }); } ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_integration.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_integration.tsx index 76477b1705e97..45d4743490e3f 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_integration.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_integration.tsx @@ -12,8 +12,8 @@ import { agentPolicyRouteService, API_VERSIONS, } from '@kbn/fleet-plugin/common'; -import { type PageUrlParams } from './rules_container'; import { useKibana } from '../../common/hooks/use_kibana'; +import { PageUrlParams } from '../../../common/types/rules/v3'; export const useCspIntegrationInfo = ({ packagePolicyId, policyId }: PageUrlParams) => { const { http } = useKibana().services; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/_mocks_/vulnerability_dashboard.mock.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/_mocks_/vulnerability_dashboard.mock.ts index 0148105bbc83a..7811f2c29892b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/_mocks_/vulnerability_dashboard.mock.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/_mocks_/vulnerability_dashboard.mock.ts @@ -13,7 +13,7 @@ export const mockCnvmDashboardData: CnvmDashboardData = { highCount: 4715, mediumCount: 10537, resourcesScanned: 81, - cloudRegions: 1, + cloudAccounts: 1, }, vulnTrends: [ { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_statistics.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_statistics.tsx index 1552ed2821bb8..adfca7f2f0205 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_statistics.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_statistics.tsx @@ -84,11 +84,11 @@ export const VulnerabilityStatistics = () => { id: 'cloud-regions-stat', title: ( ), description: i18n.translate('xpack.csp.cnvmDashboard.statistics.cloudRegionTitle', { - defaultMessage: 'Cloud Regions', + defaultMessage: 'Cloud Accounts', }), }, { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx index 92cffe08d9b0b..dcdc9ffccd7ce 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx @@ -14,11 +14,11 @@ import { timeFormatter, niceTimeFormatByDay, PartialTheme, - LEGACY_LIGHT_THEME, } from '@elastic/charts'; import { EuiButton, EuiComboBox } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; + import { truthy } from '../../../common/utils/helpers'; import { useNavigateVulnerabilities } from '../../common/hooks/use_navigate_findings'; import { VulnStatsTrend, VulnSeverity } from '../../../common/types_old'; @@ -26,6 +26,7 @@ import { useVulnerabilityDashboardApi } from '../../common/api/use_vulnerability import { getSeverityStatusColor } from '../../common/utils/get_vulnerability_colors'; import { ChartPanel } from '../../components/chart_panel'; import { VULNERABILITIES_SEVERITY } from '../../../common/constants'; +import { useKibana } from '../../common/hooks/use_kibana'; const stackAccessors: VulnSeverity[] = [ VULNERABILITIES_SEVERITY.CRITICAL, @@ -151,6 +152,9 @@ const getTrendData = (vulnTrends: VulnStatsTrend[], selectedAccount: string) => }; export const VulnerabilityTrendGraph = () => { + const { + services: { charts }, + } = useKibana(); const getVulnerabilityDashboard = useVulnerabilityDashboardApi(); const vulnTrends = getVulnerabilityDashboard.data?.vulnTrends || []; const [selectedAccount, setSelectedAccount] = useState(DEFAULT_ACCOUNT); @@ -208,8 +212,7 @@ export const VulnerabilityTrendGraph = () => {
    { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('should set rules states correctly', () => { - const ruleIds = ['rule1', 'rule3']; - const newState = true; - - const updatedRulesStates = setRulesStates(ruleIds, newState); - - expect(updatedRulesStates).toEqual({ - rule1: { muted: true }, - rule3: { muted: true }, - }); - }); - - it('should build a rule key with the provided benchmarkId, benchmarkVersion, and ruleNumber', () => { - const benchmarkId = 'randomId'; - const benchmarkVersion = 'v1'; - const ruleNumber = '001'; - - const result = buildRuleKey(benchmarkId, benchmarkVersion, ruleNumber); - - expect(result).toBe(`${benchmarkId};${benchmarkVersion};${ruleNumber}`); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts index a87df39341741..207143e1ef58d 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts @@ -16,6 +16,29 @@ import { CspRouter } from '../../../types'; import { CSP_BENCHMARK_RULES_BULK_ACTION_ROUTE_PATH } from '../../../../common/constants'; import { bulkActionBenchmarkRulesHandler } from './v1'; +/** + This API allows bulk actions (mute or unmute) on CSP benchmark rules. + Request: + { + action: 'mute' | 'unmute'; // Specify the bulk action type (mute or unmute) + rules: [ + { + benchmark_id: string; // Identifier for the CSP benchmark + benchmark_version: string; // Version of the CSP benchmark + rule_number: string; // Rule number within the benchmark + rule_id: string; // Unique identifier for the rule + }, + // ... (additional benchmark rules) + ]; + } + + Response: + { + updated_benchmark_rules: CspBenchmarkRulesStates; Benchmark rules object that were affected + detection_rules: string; // Status message indicating the number of detection rules affected + message: string; // Success message + } + */ export const defineBulkActionCspBenchmarkRulesRoute = (router: CspRouter) => router.versioned .post({ @@ -42,16 +65,24 @@ export const defineBulkActionCspBenchmarkRulesRoute = (router: CspRouter) => const benchmarkRulesToUpdate = requestBody.rules; + const detectionRulesClient = (await context.alerting).getRulesClient(); + const handlerResponse = await bulkActionBenchmarkRulesHandler( + cspContext.soClient, cspContext.encryptedSavedObjects, + detectionRulesClient, benchmarkRulesToUpdate, - requestBody.action + requestBody.action, + cspContext.logger ); - const updatedBenchmarkRules: CspBenchmarkRulesStates = handlerResponse; + const updatedBenchmarkRules: CspBenchmarkRulesStates = + handlerResponse.newCspSettings.attributes.rules!; + return response.ok({ body: { updated_benchmark_rules: updatedBenchmarkRules, + detection_rules: `disabled ${handlerResponse.disabledRulesCounter} detections rules.`, message: 'The bulk operation has been executed successfully.', }, }); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/utils.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/utils.ts index 3442b3f050b90..f026e75702c56 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/utils.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/utils.ts @@ -9,13 +9,100 @@ import type { SavedObjectsClientContract, SavedObjectsUpdateResponse, } from '@kbn/core-saved-objects-api-server'; -import { CspBenchmarkRulesStates, CspSettings } from '../../../../common/types/rules/v3'; +import type { FindResult, RulesClient } from '@kbn/alerting-plugin/server'; +import type { RuleParams } from '@kbn/alerting-plugin/server/application/rule/types'; +import type { + CspBenchmarkRule, + RulesToUpdate, + CspBenchmarkRulesStates, + CspSettings, +} from '../../../../common/types/rules/v3'; +import { + convertRuleTagsToKQL, + generateBenchmarkRuleTags, +} from '../../../../common/utils/detection_rules'; import { + CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, INTERNAL_CSP_SETTINGS_SAVED_OBJECT_ID, INTERNAL_CSP_SETTINGS_SAVED_OBJECT_TYPE, } from '../../../../common/constants'; +export const getRuleIdsToDisable = async (detectionRules: Array>) => { + const idsToDisable = detectionRules + .map((detectionRule) => { + return detectionRule.data.map((data) => data.id); + }) + .flat(); + return idsToDisable; +}; + +const disableDetectionRules = async ( + detectionRulesClient: RulesClient, + detectionRules: Array> +) => { + const idsToDisable = await getRuleIdsToDisable(detectionRules); + if (!idsToDisable.length) return; + return await detectionRulesClient.bulkDisableRules({ ids: idsToDisable }); +}; + +export const getDetectionRules = async ( + detectionRulesClient: RulesClient, + rulesTags: string[][] +): Promise>> => { + const detectionRules = Promise.all( + rulesTags.map(async (ruleTags) => { + return detectionRulesClient.find({ + excludeFromPublicApi: false, + options: { + filter: convertRuleTagsToKQL(ruleTags), + searchFields: ['tags'], + page: 1, + per_page: 1, + }, + }); + }) + ); + + return detectionRules; +}; + +export const getBenchmarkRules = async ( + soClient: SavedObjectsClientContract, + ruleIds: string[] +): Promise> => { + const bulkGetObject = ruleIds.map((ruleId) => ({ + id: ruleId, + type: CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, + })); + const cspBenchmarkRulesSo = await soClient.bulkGet(bulkGetObject); + + const benchmarkRules = cspBenchmarkRulesSo.saved_objects.map( + (cspBenchmarkRule) => cspBenchmarkRule.attributes + ); + return benchmarkRules; +}; + +export const muteDetectionRules = async ( + soClient: SavedObjectsClientContract, + detectionRulesClient: RulesClient, + rulesIds: string[] +): Promise => { + const benchmarkRules = await getBenchmarkRules(soClient, rulesIds); + if (benchmarkRules.includes(undefined)) { + throw new Error('At least one of the provided benchmark rule IDs does not exist'); + } + const benchmarkRulesTags = benchmarkRules.map((benchmarkRule) => + generateBenchmarkRuleTags(benchmarkRule!.metadata) + ); + + const detectionRules = await getDetectionRules(detectionRulesClient, benchmarkRulesTags); + + const disabledDetectionRules = await disableDetectionRules(detectionRulesClient, detectionRules); + + return disabledDetectionRules ? disabledDetectionRules.rules.length : 0; +}; + export const updateRulesStates = async ( encryptedSoClient: SavedObjectsClientContract, newRulesStates: CspBenchmarkRulesStates @@ -29,10 +116,21 @@ export const updateRulesStates = async ( ); }; -export const setRulesStates = (ruleIds: string[], state: boolean): CspBenchmarkRulesStates => { +export const setRulesStates = ( + ruleIds: string[], + state: boolean, + rulesToUpdate: RulesToUpdate +): CspBenchmarkRulesStates => { const rulesStates: CspBenchmarkRulesStates = {}; - ruleIds.forEach((ruleId) => { - rulesStates[ruleId] = { muted: state }; + ruleIds.forEach((ruleId, index) => { + const benchmarkRule = rulesToUpdate[index]; + rulesStates[ruleId] = { + muted: state, + benchmark_id: benchmarkRule.benchmark_id, + benchmark_version: benchmarkRule.benchmark_version, + rule_number: benchmarkRule.rule_number, + rule_id: benchmarkRule.rule_id, + }; }); return rulesStates; }; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/v1.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/v1.ts index 42895b5eb694d..4a35afd6eb642 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/v1.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/v1.ts @@ -5,8 +5,19 @@ * 2.0. */ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { CspBenchmarkRules, CspBenchmarkRulesStates } from '../../../../common/types/rules/v3'; -import { buildRuleKey, setRulesStates, updateRulesStates } from './utils'; +import { Logger } from '@kbn/core/server'; +import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { + buildRuleKey, + getBenchmarkRules, + muteDetectionRules, + setRulesStates, + updateRulesStates, +} from './utils'; +import type { + BulkActionBenchmarkRulesResponse, + RulesToUpdate, +} from '../../../../common/types/rules/v3'; const muteStatesMap = { mute: true, @@ -14,17 +25,28 @@ const muteStatesMap = { }; export const bulkActionBenchmarkRulesHandler = async ( + soClient: SavedObjectsClientContract, encryptedSoClient: SavedObjectsClientContract, - rulesToUpdate: CspBenchmarkRules, - action: 'mute' | 'unmute' -): Promise => { - const ruleKeys = rulesToUpdate.map((rule) => + detectionRulesClient: RulesClient, + rulesToUpdate: RulesToUpdate, + action: 'mute' | 'unmute', + logger: Logger +): Promise => { + const rulesIds = rulesToUpdate.map((rule) => rule.rule_id); + + const benchmarkRules = await getBenchmarkRules(soClient, rulesIds); + if (benchmarkRules.includes(undefined)) + throw new Error('At least one of the provided benchmark rule IDs does not exist'); + + const rulesKeys = rulesToUpdate.map((rule) => buildRuleKey(rule.benchmark_id, rule.benchmark_version, rule.rule_number) ); - const newRulesStates = setRulesStates(ruleKeys, muteStatesMap[action]); + const newRulesStates = setRulesStates(rulesKeys, muteStatesMap[action], rulesToUpdate); const newCspSettings = await updateRulesStates(encryptedSoClient, newRulesStates); + const disabledRulesCounter = + action === 'mute' ? await muteDetectionRules(soClient, detectionRulesClient, rulesIds) : 0; - return newCspSettings.attributes.rules!; + return { newCspSettings, disabledRulesCounter }; }; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts index 728fca1c0ae7c..12954073e552a 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts @@ -9,10 +9,15 @@ import { FindCspBenchmarkRuleRequest, FindCspBenchmarkRuleResponse, findCspBenchmarkRuleRequestSchema, +} from '../../../../common/types/latest'; +import { + FindCspBenchmarkRuleRequest as FindCspBenchmarkRuleRequestV1, + findCspBenchmarkRuleRequestSchema as findCspBenchmarkRuleRequestSchemaV1, } from '../../../../common/types/rules/v3'; import { FIND_CSP_BENCHMARK_RULE_ROUTE_PATH } from '../../../../common/constants'; import { CspRouter } from '../../../types'; import { findBenchmarkRuleHandler as findRuleHandlerV1 } from './v1'; +import { findBenchmarkRuleHandler as findRuleHandlerV2 } from './v2'; export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => router.versioned @@ -23,6 +28,39 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => .addVersion( { version: '1', + validate: { + request: { + query: findCspBenchmarkRuleRequestSchemaV1, + }, + }, + }, + async (context, request, response) => { + if (!(await context.fleet).authz.fleet.all) { + return response.forbidden(); + } + + const requestBody: FindCspBenchmarkRuleRequestV1 = request.query; + const cspContext = await context.csp; + + try { + const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV1( + cspContext.soClient, + requestBody + ); + return response.ok({ body: cspBenchmarkRules }); + } catch (err) { + const error = transformError(err); + cspContext.logger.error(`Failed to fetch csp rules templates ${err}`); + return response.customError({ + body: { message: error.message }, + statusCode: error.statusCode, + }); + } + } + ) + .addVersion( + { + version: '2', validate: { request: { query: findCspBenchmarkRuleRequestSchema, @@ -38,10 +76,11 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => const cspContext = await context.csp; try { - const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV1( + const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV2( cspContext.soClient, requestBody ); + return response.ok({ body: cspBenchmarkRules }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts new file mode 100644 index 0000000000000..228d7d5e9c3e6 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { getBenchmarkFilterQuery } from '../../../../common/utils/helpers'; +import { CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE } from '../../../../common/constants'; + +import type { + CspBenchmarkRule, + FindCspBenchmarkRuleRequest, + FindCspBenchmarkRuleResponse, +} from '../../../../common/types/latest'; +import { getSortedCspBenchmarkRulesTemplates } from './utils'; + +export const findBenchmarkRuleHandler = async ( + soClient: SavedObjectsClientContract, + options: FindCspBenchmarkRuleRequest +): Promise => { + if (!options.benchmarkId) { + throw new Error('Please provide benchmarkId'); + } + + const benchmarkId = options.benchmarkId; + + const cspCspBenchmarkRulesSo = await soClient.find({ + type: CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, + searchFields: options.searchFields, + search: options.search ? `"${options.search}"*` : '', + page: options.page, + perPage: options.perPage, + sortField: options.sortField, + fields: options?.fields, + filter: getBenchmarkFilterQuery(benchmarkId, options.benchmarkVersion || '', { + section: options.section, + ruleNumber: options.ruleNumber, + }), + }); + + const cspBenchmarkRules = cspCspBenchmarkRulesSo.saved_objects.map( + (cspBenchmarkRule) => cspBenchmarkRule.attributes + ); + + // Semantic version sorting using semver for valid versions and custom comparison for invalid versions + const sortedCspBenchmarkRules = getSortedCspBenchmarkRulesTemplates(cspBenchmarkRules); + + return { + items: sortedCspBenchmarkRules, + total: cspCspBenchmarkRulesSo.total, + page: options.page, + perPage: options.perPage, + }; +}; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts new file mode 100644 index 0000000000000..985be3cb48eeb --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts @@ -0,0 +1,51 @@ +/* + * Copyright 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 { transformError } from '@kbn/securitysolution-es-utils'; +import { CspRouter } from '../../../types'; +import { CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH } from '../../../../common/constants'; +import { CspBenchmarkRulesStates } from '../../../../common/types/rules/v3'; +import { getCspBenchmarkRulesStatesHandler } from './v1'; + +export const defineGetCspBenchmarkRulesStatesRoute = (router: CspRouter) => + router.versioned + .get({ + access: 'internal', + path: CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH, + }) + .addVersion( + { + version: '1', + validate: {}, + }, + async (context, request, response) => { + if (!(await context.fleet).authz.fleet.all) { + return response.forbidden(); + } + const cspContext = await context.csp; + + try { + const encryptedSoClient = cspContext.encryptedSavedObjects; + + const rulesStates: CspBenchmarkRulesStates = await getCspBenchmarkRulesStatesHandler( + encryptedSoClient + ); + + return response.ok({ + body: rulesStates, + }); + } catch (err) { + const error = transformError(err); + + cspContext.logger.error(`Failed to fetch CSP benchmark rules state: ${error.message}`); + return response.customError({ + body: { message: error.message }, + statusCode: error.statusCode || 500, // Default to 500 if no specific status code is provided + }); + } + } + ); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts new file mode 100644 index 0000000000000..5697841bb3526 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/v1.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { transformError } from '@kbn/securitysolution-es-utils'; +import { CspBenchmarkRulesStates, CspSettings } from '../../../../common/types/rules/v3'; +import { + INTERNAL_CSP_SETTINGS_SAVED_OBJECT_ID, + INTERNAL_CSP_SETTINGS_SAVED_OBJECT_TYPE, +} from '../../../../common/constants'; + +export const createCspSettingObject = async (soClient: SavedObjectsClientContract) => { + return soClient.create( + INTERNAL_CSP_SETTINGS_SAVED_OBJECT_TYPE, + { + rules: {}, + }, + { id: INTERNAL_CSP_SETTINGS_SAVED_OBJECT_ID } + ); +}; + +export const getCspBenchmarkRulesStatesHandler = async ( + encryptedSoClient: SavedObjectsClientContract +): Promise => { + try { + const getSoResponse = await encryptedSoClient.get( + INTERNAL_CSP_SETTINGS_SAVED_OBJECT_TYPE, + INTERNAL_CSP_SETTINGS_SAVED_OBJECT_ID + ); + return getSoResponse.attributes.rules; + } catch (err) { + const error = transformError(err); + if (error.statusCode === 404) { + const newCspSettings = await createCspSettingObject(encryptedSoClient); + return newCspSettings.attributes.rules; + } + + throw new Error( + `An error occurred while trying to fetch csp settings: ${error.message}, ${error.statusCode}` + ); + } +}; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts b/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts index 88570781ed066..732017db1090f 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts @@ -21,6 +21,7 @@ import { defineGetCspStatusRoute } from './status/status'; import { defineFindCspBenchmarkRuleRoute } from './benchmark_rules/find/find'; import { defineGetDetectionEngineAlertsStatus } from './detection_engine/get_detection_engine_alerts_count_by_rule_tags'; import { defineBulkActionCspBenchmarkRulesRoute } from './benchmark_rules/bulk_action/bulk_action'; +import { defineGetCspBenchmarkRulesStatesRoute } from './benchmark_rules/get_states/get_states'; /** * 1. Registers routes @@ -43,6 +44,7 @@ export async function setupRoutes({ defineFindCspBenchmarkRuleRoute(router); defineGetDetectionEngineAlertsStatus(router); defineBulkActionCspBenchmarkRulesRoute(router); + defineGetCspBenchmarkRulesStatesRoute(router); core.http.registerRouteHandlerContext( PLUGIN_ID, diff --git a/x-pack/plugins/cloud_security_posture/server/routes/vulnerabilities_dashboard/get_vulnerabilities_statistics.ts b/x-pack/plugins/cloud_security_posture/server/routes/vulnerabilities_dashboard/get_vulnerabilities_statistics.ts index 8458d66817f82..530090c326766 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/vulnerabilities_dashboard/get_vulnerabilities_statistics.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/vulnerabilities_dashboard/get_vulnerabilities_statistics.ts @@ -25,7 +25,7 @@ export interface VulnerabilitiesStatisticsQueryResult { resources_scanned: { value: number; }; - cloud_regions: { + cloud_accounts: { value: number; }; } @@ -51,9 +51,9 @@ export const getVulnerabilitiesStatisticsQuery = (): SearchRequest => ({ field: 'resource.id', }, }, - cloud_regions: { + cloud_accounts: { cardinality: { - field: 'cloud.region', + field: 'cloud.account.id', }, }, }, @@ -69,6 +69,6 @@ export const getVulnerabilitiesStatistics = async (esClient: ElasticsearchClient highCount: queryResult.aggregations?.high.doc_count, mediumCount: queryResult.aggregations?.medium.doc_count, resourcesScanned: queryResult.aggregations?.resources_scanned.value, - cloudRegions: queryResult.aggregations?.cloud_regions.value, + cloudAccounts: queryResult.aggregations?.cloud_accounts.value, }; }; diff --git a/x-pack/plugins/cloud_security_posture/server/types.ts b/x-pack/plugins/cloud_security_posture/server/types.ts index b6e83939b6ca7..15dee7c9941d0 100644 --- a/x-pack/plugins/cloud_security_posture/server/types.ts +++ b/x-pack/plugins/cloud_security_posture/server/types.ts @@ -34,6 +34,8 @@ import type { import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; import type { FleetStartContract, FleetRequestHandlerContext } from '@kbn/fleet-plugin/server'; import { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/server'; +import type { AlertingApiRequestHandlerContext } from '@kbn/alerting-plugin/server'; +import type { AlertingPluginSetup } from '@kbn/alerting-plugin/public/plugin'; import { CspStatusCode, IndexDetails } from '../common/types_old'; // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -47,6 +49,7 @@ export interface CspServerPluginSetupDeps { taskManager: TaskManagerSetupContract; security: SecurityPluginSetup; cloud: CloudSetup; + alerting: AlertingPluginSetup; // optional usageCollection?: UsageCollectionSetup; } @@ -80,6 +83,7 @@ export interface CspApiRequestHandlerContext { export type CspRequestHandlerContext = CustomRequestHandlerContext<{ csp: CspApiRequestHandlerContext; fleet: FleetRequestHandlerContext['fleet']; + alerting: AlertingApiRequestHandlerContext; }>; /** diff --git a/x-pack/plugins/cloud_security_posture/tsconfig.json b/x-pack/plugins/cloud_security_posture/tsconfig.json index ad1a97748967f..e6e0879f77419 100755 --- a/x-pack/plugins/cloud_security_posture/tsconfig.json +++ b/x-pack/plugins/cloud_security_posture/tsconfig.json @@ -61,6 +61,7 @@ "@kbn/field-formats-plugin", "@kbn/data-view-field-editor-plugin", "@kbn/securitysolution-grouping", + "@kbn/alerting-plugin" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/column_chart.scss b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/column_chart.scss index 8a0b9cc992c3e..a98eb200f022e 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/column_chart.scss +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/column_chart.scss @@ -16,7 +16,7 @@ font-weight: normal; text-align: left; line-height: 1.1; - font-size: #{$euiFontSizeL / 2}; // 10px + font-size: #{calc($euiFontSizeL / 2)}; // 10px } .dataGridChart__legend--numeric { 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 6f68d8f20de32..750c13debb3fd 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts @@ -26,6 +26,7 @@ export const createMockClients = () => { actions: actionsClientMock.create(), getRegisteredTools: jest.fn(), logger: loggingSystemMock.createLogger(), + telemetry: coreMock.createSetup().analytics, }, savedObjectsClient: core.savedObjects.client, @@ -75,6 +76,7 @@ const createElasticAssistantRequestContextMock = ( actions: clients.elasticAssistant.actions as unknown as ActionsPluginStart, getRegisteredTools: jest.fn(), logger: clients.elasticAssistant.logger, + telemetry: clients.elasticAssistant.telemetry, }; }; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts index 0dc1cd10499cc..b38d4b82f48b4 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.test.ts @@ -20,6 +20,11 @@ import { } from './elasticsearch_store'; import { mockMsearchResponse } from '../../../__mocks__/msearch_response'; import { mockQueryText } from '../../../__mocks__/query_text'; +import { coreMock } from '@kbn/core/server/mocks'; +import { + KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT, + KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT, +} from '../../telemetry/event_based_telemetry'; jest.mock('uuid', () => ({ v4: jest.fn(), @@ -36,10 +41,12 @@ jest.mock('@kbn/core/server', () => ({ const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); const mockLogger = loggingSystemMock.createLogger(); +const reportEvent = jest.fn(); +const mockTelemetry = { ...coreMock.createSetup().analytics, reportEvent }; const KB_INDEX = '.elastic-assistant-kb'; const getElasticsearchStore = () => { - return new ElasticsearchStore(mockEsClient, KB_INDEX, mockLogger); + return new ElasticsearchStore(mockEsClient, KB_INDEX, mockLogger, mockTelemetry); }; describe('ElasticsearchStore', () => { @@ -415,5 +422,30 @@ describe('ElasticsearchStore', () => { ], }); }); + + it('Reports successful telemetry event', async () => { + mockEsClient.msearch.mockResolvedValue(mockMsearchResponse); + + await esStore.similaritySearch(mockQueryText); + + expect(reportEvent).toHaveBeenCalledWith(KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT.eventType, { + model: '.elser_model_2', + resourceAccessed: 'esql', + responseTime: 142, + resultCount: 2, + }); + }); + + it('Reports error telemetry event', async () => { + mockEsClient.msearch.mockRejectedValue(new Error('Oh no!')); + + await esStore.similaritySearch(mockQueryText); + + expect(reportEvent).toHaveBeenCalledWith(KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT.eventType, { + model: '.elser_model_2', + resourceAccessed: 'esql', + errorMessage: 'Oh no!', + }); + }); }); }); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts index 606fc45881524..4a7def926d2f3 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/elasticsearch_store/elasticsearch_store.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { type AnalyticsServiceSetup, ElasticsearchClient, Logger } from '@kbn/core/server'; import { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Callbacks } from 'langchain/callbacks'; @@ -13,6 +13,7 @@ import { Document } from 'langchain/document'; import { VectorStore } from 'langchain/vectorstores/base'; import * as uuid from 'uuid'; +import { transformError } from '@kbn/securitysolution-es-utils'; import { ElasticsearchEmbeddings } from '../embeddings/elasticsearch_embeddings'; import { FlattenedHit, getFlattenedHits } from './helpers/get_flattened_hits'; import { getMsearchQueryBody } from './helpers/get_msearch_query_body'; @@ -25,6 +26,10 @@ import { KNOWLEDGE_BASE_INGEST_PIPELINE, } from '../../../routes/knowledge_base/constants'; import { getRequiredKbDocsTermsQueryDsl } from './helpers/get_required_kb_docs_terms_query_dsl'; +import { + KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT, + KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT, +} from '../../telemetry/event_based_telemetry'; interface CreatePipelineParams { id?: string; @@ -59,6 +64,7 @@ export class ElasticsearchStore extends VectorStore { private readonly esClient: ElasticsearchClient; private readonly index: string; private readonly logger: Logger; + private readonly telemetry: AnalyticsServiceSetup; private readonly model: string; private readonly kbResource: string; @@ -70,6 +76,7 @@ export class ElasticsearchStore extends VectorStore { esClient: ElasticsearchClient, index: string, logger: Logger, + telemetry: AnalyticsServiceSetup, model?: string, kbResource?: string | undefined ) { @@ -77,6 +84,7 @@ export class ElasticsearchStore extends VectorStore { this.esClient = esClient; this.index = index ?? KNOWLEDGE_BASE_INDEX_PATTERN; this.logger = logger; + this.telemetry = telemetry; this.model = model ?? '.elser_model_2'; this.kbResource = kbResource ?? ESQL_RESOURCE; } @@ -222,6 +230,13 @@ export class ElasticsearchStore extends VectorStore { return getFlattenedHits(maybeEsqlMsearchResponse); }); + this.telemetry.reportEvent(KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT.eventType, { + model: this.model, + resourceAccessed: this.kbResource, + resultCount: results.length, + responseTime: result.took ?? 0, + }); + this.logger.debug( `Similarity search metadata source:\n${JSON.stringify( results.map((r) => r?.metadata?.source ?? '(missing metadata.source)'), @@ -232,6 +247,12 @@ export class ElasticsearchStore extends VectorStore { return results; } catch (e) { + const error = transformError(e); + this.telemetry.reportEvent(KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT.eventType, { + model: this.model, + resourceAccessed: this.kbResource, + errorMessage: error.message, + }); this.logger.error(e); return []; } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts index 4dbc0fb53fc0d..59c1aeca8081f 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.test.ts @@ -7,6 +7,7 @@ import { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/server'; import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; +import { coreMock } from '@kbn/core/server/mocks'; import { KibanaRequest } from '@kbn/core/server'; import { loggerMock } from '@kbn/logging-mocks'; @@ -55,6 +56,7 @@ const mockRequest: KibanaRequest = {} as KibanaReque const mockActions: ActionsPluginStart = {} as ActionsPluginStart; const mockLogger = loggerMock.create(); +const mockTelemetry = coreMock.createSetup().analytics; const esClientMock = elasticsearchServiceMock.createScopedClusterClient().asCurrentUser; describe('callAgentExecutor', () => { @@ -69,7 +71,7 @@ describe('callAgentExecutor', () => { it('creates an instance of ActionsClientLlm with the expected context from the request', async () => { await callAgentExecutor({ actions: mockActions, - assistantLangChain: true, + isEnabledKnowledgeBase: true, connectorId: mockConnectorId, esClient: esClientMock, langChainMessages, @@ -77,6 +79,7 @@ describe('callAgentExecutor', () => { onNewReplacements: jest.fn(), request: mockRequest, kbResource: ESQL_RESOURCE, + telemetry: mockTelemetry, }); expect(ActionsClientLlm).toHaveBeenCalledWith({ @@ -90,7 +93,7 @@ describe('callAgentExecutor', () => { it('kicks off the chain with (only) the last message', async () => { await callAgentExecutor({ actions: mockActions, - assistantLangChain: true, + isEnabledKnowledgeBase: true, connectorId: mockConnectorId, esClient: esClientMock, langChainMessages, @@ -98,6 +101,7 @@ describe('callAgentExecutor', () => { onNewReplacements: jest.fn(), request: mockRequest, kbResource: ESQL_RESOURCE, + telemetry: mockTelemetry, }); // We don't care about the `config` argument, so we use `expect.anything()` @@ -114,7 +118,7 @@ describe('callAgentExecutor', () => { await callAgentExecutor({ actions: mockActions, - assistantLangChain: true, + isEnabledKnowledgeBase: true, connectorId: mockConnectorId, esClient: esClientMock, langChainMessages: onlyOneMessage, @@ -122,6 +126,7 @@ describe('callAgentExecutor', () => { onNewReplacements: jest.fn(), request: mockRequest, kbResource: ESQL_RESOURCE, + telemetry: mockTelemetry, }); // We don't care about the `config` argument, so we use `expect.anything()` @@ -136,7 +141,7 @@ describe('callAgentExecutor', () => { it('returns the expected response body', async () => { const result: ResponseBody = await callAgentExecutor({ actions: mockActions, - assistantLangChain: true, + isEnabledKnowledgeBase: true, connectorId: mockConnectorId, esClient: esClientMock, langChainMessages, @@ -144,6 +149,7 @@ describe('callAgentExecutor', () => { onNewReplacements: jest.fn(), request: mockRequest, kbResource: ESQL_RESOURCE, + telemetry: mockTelemetry, }); expect(result).toEqual({ diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts index d6868925cc667..f44dcaae75928 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts @@ -30,7 +30,7 @@ export const callAgentExecutor = async ({ alertsIndexPattern, allow, allowReplacement, - assistantLangChain, + isEnabledKnowledgeBase, assistantTools = [], connectorId, elserId, @@ -43,6 +43,7 @@ export const callAgentExecutor = async ({ replacements, request, size, + telemetry, traceOptions, }: AgentExecutorParams): AgentExecutorResponse => { const llm = new ActionsClientLlm({ actions, connectorId, request, llmType, logger }); @@ -63,6 +64,7 @@ export const callAgentExecutor = async ({ esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, + telemetry, elserId, kbResource ); @@ -77,7 +79,7 @@ export const callAgentExecutor = async ({ allow, allowReplacement, alertsIndexPattern, - assistantLangChain, + isEnabledKnowledgeBase, chain, esClient, modelExists, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts index 32c9c0988f4d4..4a305808c835c 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/openai_functions_executor.ts @@ -36,6 +36,7 @@ export const callOpenAIFunctionsExecutor = async ({ request, elserId, kbResource, + telemetry, traceOptions, }: AgentExecutorParams): AgentExecutorResponse => { const llm = new ActionsClientLlm({ actions, connectorId, request, llmType, logger }); @@ -56,6 +57,7 @@ export const callOpenAIFunctionsExecutor = async ({ esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, + telemetry, elserId, kbResource ); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index e7824e2822f8a..03554911216eb 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -11,6 +11,7 @@ import { BaseMessage } from 'langchain/schema'; import { Logger } from '@kbn/logging'; import { KibanaRequest } from '@kbn/core-http-server'; import type { LangChainTracer } from 'langchain/callbacks'; +import type { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { RequestBody, ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; @@ -19,7 +20,7 @@ export interface AgentExecutorParams { actions: ActionsPluginStart; allow?: string[]; allowReplacement?: string[]; - assistantLangChain: boolean; + isEnabledKnowledgeBase: boolean; assistantTools?: AssistantTool[]; connectorId: string; esClient: ElasticsearchClient; @@ -33,6 +34,7 @@ export interface AgentExecutorParams { size?: number; elserId?: string; traceOptions?: TraceOptions; + telemetry: AnalyticsServiceSetup; } export type AgentExecutorResponse = Promise; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.test.ts index 5c27cdef4d3e1..f2cffe7c9d41b 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.test.ts @@ -51,7 +51,7 @@ const mockRequest: KibanaRequest = { }, subAction: 'invokeAI', }, - assistantLangChain: true, + isEnabledKnowledgeBase: true, }, } as KibanaRequest; diff --git a/x-pack/plugins/elastic_assistant/server/lib/telemetry/event_based_telemetry.ts b/x-pack/plugins/elastic_assistant/server/lib/telemetry/event_based_telemetry.ts new file mode 100644 index 0000000000000..e9b87788d0f85 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/telemetry/event_based_telemetry.ts @@ -0,0 +1,127 @@ +/* + * Copyright 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 { EventTypeOpts } from '@kbn/analytics-client'; + +export const KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT: EventTypeOpts<{ + model: string; + resourceAccessed: string; + resultCount: number; + responseTime: number; +}> = { + eventType: 'knowledge_base_execution_success', + schema: { + model: { + type: 'keyword', + _meta: { + description: 'ELSER model used to execute the knowledge base query', + }, + }, + resourceAccessed: { + type: 'keyword', + _meta: { + description: 'Which knowledge base resource was accessed', + }, + }, + resultCount: { + type: 'long', + _meta: { + description: 'Number of documents returned from Elasticsearch', + }, + }, + responseTime: { + type: 'long', + _meta: { + description: `How long it took for Elasticsearch to respond to the knowledge base query`, + }, + }, + }, +}; + +export const KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT: EventTypeOpts<{ + model: string; + resourceAccessed: string; + errorMessage: string; +}> = { + eventType: 'knowledge_base_execution_error', + schema: { + model: { + type: 'keyword', + _meta: { + description: 'ELSER model used to execute the knowledge base query', + }, + }, + resourceAccessed: { + type: 'keyword', + _meta: { + description: 'Which knowledge base resource was accessed', + }, + }, + errorMessage: { + type: 'keyword', + _meta: { + description: 'Error message from Elasticsearch', + }, + }, + }, +}; + +export const INVOKE_ASSISTANT_SUCCESS_EVENT: EventTypeOpts<{ + isEnabledKnowledgeBase: boolean; + isEnabledRAGAlerts: boolean; +}> = { + eventType: 'invoke_assistant_success', + schema: { + isEnabledKnowledgeBase: { + type: 'boolean', + _meta: { + description: 'Is Knowledge Base enabled', + }, + }, + isEnabledRAGAlerts: { + type: 'boolean', + _meta: { + description: 'Is RAG Alerts enabled', + }, + }, + }, +}; + +export const INVOKE_ASSISTANT_ERROR_EVENT: EventTypeOpts<{ + errorMessage: string; + isEnabledKnowledgeBase: boolean; + isEnabledRAGAlerts: boolean; +}> = { + eventType: 'invoke_assistant_error', + schema: { + errorMessage: { + type: 'keyword', + _meta: { + description: 'Error message from Elasticsearch', + }, + }, + isEnabledKnowledgeBase: { + type: 'boolean', + _meta: { + description: 'Is Knowledge Base enabled', + }, + }, + isEnabledRAGAlerts: { + type: 'boolean', + _meta: { + description: 'Is RAG Alerts enabled', + }, + }, + }, +}; + +export const events: Array> = [ + KNOWLEDGE_BASE_EXECUTION_SUCCESS_EVENT, + KNOWLEDGE_BASE_EXECUTION_ERROR_EVENT, + INVOKE_ASSISTANT_SUCCESS_EVENT, + INVOKE_ASSISTANT_ERROR_EVENT, +]; diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index bd06165e57284..f142df46beb8b 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -14,9 +14,11 @@ import { IContextProvider, KibanaRequest, SavedObjectsClientContract, + type AnalyticsServiceSetup, } from '@kbn/core/server'; import { once } from 'lodash'; +import { events } from './lib/telemetry/event_based_telemetry'; import { AssistantTool, ElasticAssistantPluginSetup, @@ -40,6 +42,7 @@ interface CreateRouteHandlerContextParams { core: CoreSetup; logger: Logger; getRegisteredTools: GetRegisteredTools; + telemetry: AnalyticsServiceSetup; } export class ElasticAssistantPlugin @@ -61,6 +64,7 @@ export class ElasticAssistantPlugin core, logger, getRegisteredTools, + telemetry, }: CreateRouteHandlerContextParams): IContextProvider< ElasticAssistantRequestHandlerContext, typeof PLUGIN_ID @@ -72,6 +76,7 @@ export class ElasticAssistantPlugin actions: pluginsStart.actions, getRegisteredTools, logger, + telemetry, }; }; }; @@ -87,8 +92,10 @@ export class ElasticAssistantPlugin getRegisteredTools: (pluginName: string) => { return appContextService.getRegisteredTools(pluginName); }, + telemetry: core.analytics, }) ); + events.forEach((eventConfig) => core.analytics.registerEventType(eventConfig)); const getElserId: GetElser = once( async (request: KibanaRequest, savedObjectsClient: SavedObjectsClientContract) => { 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 f5ec4c4555a76..ff3291f6b703f 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 @@ -5,7 +5,7 @@ * 2.0. */ -import { IRouter, KibanaRequest, Logger } from '@kbn/core/server'; +import { IRouter, KibanaRequest } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; import { v4 as uuidv4 } from 'uuid'; @@ -53,9 +53,11 @@ export const postEvaluateRoute = ( query: buildRouteValidation(PostEvaluatePathQuery), }, }, + // TODO: Limit route based on experimental feature async (context, request, response) => { - // TODO: Limit route based on experimental feature - const logger: Logger = (await context.elasticAssistant).logger; + const assistantContext = await context.elasticAssistant; + const logger = assistantContext.logger; + const telemetry = assistantContext.telemetry; try { const evaluationId = uuidv4(); const { @@ -112,7 +114,8 @@ export const postEvaluateRoute = ( // Default ELSER model const elserId = await getElser(request, (await context.core).savedObjects.getClient()); - // Skeleton request to satisfy `subActionParams` spread in `ActionsClientLlm` + // Skeleton request from route to pass to the agents + // params will be passed to the actions executor const skeletonRequest: KibanaRequest = { ...request, body: { @@ -127,7 +130,8 @@ export const postEvaluateRoute = ( }, replacements: {}, size: DEFAULT_SIZE, - assistantLangChain: true, + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: true, }, }; @@ -146,7 +150,7 @@ export const postEvaluateRoute = ( agentEvaluator: (langChainMessages, exampleId) => AGENT_EXECUTOR_MAP[agentName]({ actions, - assistantLangChain: true, + isEnabledKnowledgeBase: true, assistantTools, connectorId, esClient, @@ -156,6 +160,7 @@ export const postEvaluateRoute = ( logger, request: skeletonRequest, kbResource: ESQL_RESOURCE, + telemetry, traceOptions: { exampleId, projectName, 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 3ce494f80ac4d..235ea4eda4c0d 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 @@ -38,7 +38,9 @@ export const deleteKnowledgeBaseRoute = ( }, async (context, request, response) => { const resp = buildResponse(response); - const logger = (await context.elasticAssistant).logger; + const assistantContext = await context.elasticAssistant; + const logger = assistantContext.logger; + const telemetry = assistantContext.telemetry; try { const kbResource = @@ -46,7 +48,12 @@ export const deleteKnowledgeBaseRoute = ( // Get a scoped esClient for deleting the Knowledge Base index, pipeline, and documents const esClient = (await context.core).elasticsearch.client.asCurrentUser; - const esStore = new ElasticsearchStore(esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger); + const esStore = new ElasticsearchStore( + esClient, + KNOWLEDGE_BASE_INDEX_PATTERN, + logger, + telemetry + ); if (kbResource === ESQL_RESOURCE) { // For now, tearing down the Knowledge Base is fine, but will want to support removing specific assets based 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 c2c616939677d..6cc683fd4d8b8 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 @@ -41,7 +41,9 @@ export const getKnowledgeBaseStatusRoute = ( }, async (context, request, response) => { const resp = buildResponse(response); - const logger = (await context.elasticAssistant).logger; + const assistantContext = await context.elasticAssistant; + const logger = assistantContext.logger; + const telemetry = assistantContext.telemetry; try { // Get a scoped esClient for finding the status of the Knowledge Base index, pipeline, and documents @@ -52,6 +54,7 @@ export const getKnowledgeBaseStatusRoute = ( esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, + telemetry, elserId, kbResource ); 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 2ac938d3db45a..56812ee8d0305 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 @@ -40,17 +40,21 @@ export const postKnowledgeBaseRoute = ( }, async (context, request, response) => { const resp = buildResponse(response); - const logger = (await context.elasticAssistant).logger; + const assistantContext = await context.elasticAssistant; + const logger = assistantContext.logger; + const telemetry = assistantContext.telemetry; try { + const core = await context.core; // Get a scoped esClient for creating the Knowledge Base index, pipeline, and documents - const esClient = (await context.core).elasticsearch.client.asCurrentUser; - const elserId = await getElser(request, (await context.core).savedObjects.getClient()); + const esClient = core.elasticsearch.client.asCurrentUser; + const elserId = await getElser(request, core.savedObjects.getClient()); const kbResource = getKbResource(request); const esStore = new ElasticsearchStore( esClient, KNOWLEDGE_BASE_INDEX_PATTERN, logger, + telemetry, elserId, kbResource ); diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index 0f7d964eea480..05a303db3c67e 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -15,16 +15,26 @@ import { ElasticAssistantRequestHandlerContext } from '../types'; import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import { coreMock } from '@kbn/core/server/mocks'; +import { + INVOKE_ASSISTANT_ERROR_EVENT, + INVOKE_ASSISTANT_SUCCESS_EVENT, +} from '../lib/telemetry/event_based_telemetry'; jest.mock('../lib/build_response', () => ({ buildResponse: jest.fn().mockImplementation((x) => x), })); jest.mock('../lib/executor', () => ({ - executeAction: jest.fn().mockImplementation((x) => ({ - connector_id: 'mock-connector-id', - data: mockActionResponse, - status: 'ok', - })), + executeAction: jest.fn().mockImplementation(async ({ connectorId }) => { + if (connectorId === 'mock-connector-id') { + return { + connector_id: 'mock-connector-id', + data: mockActionResponse, + status: 'ok', + }; + } else { + throw new Error('simulated error'); + } + }), })); jest.mock('../lib/langchain/execute_custom_llm_chain', () => ({ @@ -53,11 +63,13 @@ jest.mock('../lib/langchain/execute_custom_llm_chain', () => ({ ), })); +const reportEvent = jest.fn(); const mockContext = { elasticAssistant: { actions: jest.fn(), getRegisteredTools: jest.fn(() => []), logger: loggingSystemMock.createLogger(), + telemetry: { ...coreMock.createSetup().analytics, reportEvent }, }, core: { elasticsearch: { @@ -90,7 +102,8 @@ const mockRequest = { }, subAction: 'invokeAI', }, - assistantLangChain: true, + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: false, }, }; @@ -106,7 +119,7 @@ describe('postActionsConnectorExecuteRoute', () => { jest.clearAllMocks(); }); - it('returns the expected response when assistantLangChain=false', async () => { + it('returns the expected response when isEnabledKnowledgeBase=false', async () => { const mockRouter = { post: jest.fn().mockImplementation(async (_, handler) => { const result = await handler( @@ -115,7 +128,7 @@ describe('postActionsConnectorExecuteRoute', () => { ...mockRequest, body: { ...mockRequest.body, - assistantLangChain: false, + isEnabledKnowledgeBase: false, }, }, mockResponse @@ -137,7 +150,7 @@ describe('postActionsConnectorExecuteRoute', () => { ); }); - it('returns the expected response when assistantLangChain=true', async () => { + it('returns the expected response when isEnabledKnowledgeBase=true', async () => { const mockRouter = { post: jest.fn().mockImplementation(async (_, handler) => { const result = await handler(mockContext, mockRequest, mockResponse); @@ -181,4 +194,219 @@ describe('postActionsConnectorExecuteRoute', () => { mockGetElser ); }); + + it('reports success events to telemetry - kb on, RAG alerts off', async () => { + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, mockRequest, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: false, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports success events to telemetry - kb on, RAG alerts on', async () => { + const ragRequest = { + ...mockRequest, + body: { + ...mockRequest.body, + allow: ['@timestamp'], + allowReplacement: ['host.name'], + replacements: {}, + isEnabledRAGAlerts: true, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, ragRequest, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: true, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports success events to telemetry - kb off, RAG alerts on', async () => { + const req = { + ...mockRequest, + body: { + ...mockRequest.body, + isEnabledKnowledgeBase: false, + allow: ['@timestamp'], + allowReplacement: ['host.name'], + replacements: {}, + isEnabledRAGAlerts: true, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, req, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: true, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports success events to telemetry - kb off, RAG alerts off', async () => { + const req = { + ...mockRequest, + body: { + ...mockRequest.body, + isEnabledKnowledgeBase: false, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, req, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: false, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports error events to telemetry - kb on, RAG alerts off', async () => { + const requestWithBadConnectorId = { + ...mockRequest, + params: { connectorId: 'bad-connector-id' }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, requestWithBadConnectorId, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_ERROR_EVENT.eventType, { + errorMessage: 'simulated error', + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: false, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports error events to telemetry - kb on, RAG alerts on', async () => { + const badRequest = { + ...mockRequest, + params: { connectorId: 'bad-connector-id' }, + body: { + ...mockRequest.body, + isEnabledRAGAlerts: true, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, badRequest, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_ERROR_EVENT.eventType, { + errorMessage: 'simulated error', + isEnabledKnowledgeBase: true, + isEnabledRAGAlerts: true, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports error events to telemetry - kb off, RAG alerts on', async () => { + const badRequest = { + ...mockRequest, + params: { connectorId: 'bad-connector-id' }, + body: { + ...mockRequest.body, + isEnabledKnowledgeBase: false, + allow: ['@timestamp'], + allowReplacement: ['host.name'], + replacements: {}, + isEnabledRAGAlerts: true, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, badRequest, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_ERROR_EVENT.eventType, { + errorMessage: 'simulated error', + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: true, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); + + it('reports error events to telemetry - kb off, RAG alerts off', async () => { + const badRequest = { + ...mockRequest, + params: { connectorId: 'bad-connector-id' }, + body: { + ...mockRequest.body, + isEnabledKnowledgeBase: false, + }, + }; + + const mockRouter = { + post: jest.fn().mockImplementation(async (_, handler) => { + await handler(mockContext, badRequest, mockResponse); + + expect(reportEvent).toHaveBeenCalledWith(INVOKE_ASSISTANT_ERROR_EVENT.eventType, { + errorMessage: 'simulated error', + isEnabledKnowledgeBase: false, + isEnabledRAGAlerts: false, + }); + }), + }; + + await postActionsConnectorExecuteRoute( + mockRouter as unknown as IRouter, + mockGetElser + ); + }); }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index 9c1d8601da532..533b4ddca4a48 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -8,6 +8,10 @@ import { IRouter, Logger } from '@kbn/core/server'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { + INVOKE_ASSISTANT_ERROR_EVENT, + INVOKE_ASSISTANT_SUCCESS_EVENT, +} from '../lib/telemetry/event_based_telemetry'; import { executeAction } from '../lib/executor'; import { POST_ACTIONS_CONNECTOR_EXECUTE } from '../../common/constants'; import { @@ -39,7 +43,9 @@ export const postActionsConnectorExecuteRoute = ( }, async (context, request, response) => { const resp = buildResponse(response); - const logger: Logger = (await context.elasticAssistant).logger; + const assistantContext = await context.elasticAssistant; + const logger: Logger = assistantContext.logger; + const telemetry = assistantContext.telemetry; try { const connectorId = decodeURIComponent(request.params.connectorId); @@ -48,16 +54,25 @@ export const postActionsConnectorExecuteRoute = ( const actions = (await context.elasticAssistant).actions; // if not langchain, call execute action directly and return the response: - if (!request.body.assistantLangChain && !requestHasRequiredAnonymizationParams(request)) { + if ( + !request.body.isEnabledKnowledgeBase && + !requestHasRequiredAnonymizationParams(request) + ) { logger.debug('Executing via actions framework directly'); const result = await executeAction({ actions, request, connectorId }); + telemetry.reportEvent(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase, + isEnabledRAGAlerts: request.body.isEnabledRAGAlerts, + }); return response.ok({ body: result, }); } // TODO: Add `traceId` to actions request when calling via langchain - logger.debug('Executing via langchain, assistantLangChain: true'); + logger.debug( + `Executing via langchain, isEnabledKnowledgeBase: ${request.body.isEnabledKnowledgeBase}, isEnabledRAGAlerts: ${request.body.isEnabledRAGAlerts}` + ); // Fetch any tools registered by the request's originating plugin const pluginName = getPluginNameFromRequest({ @@ -87,7 +102,7 @@ export const postActionsConnectorExecuteRoute = ( allow: request.body.allow, allowReplacement: request.body.allowReplacement, actions, - assistantLangChain: request.body.assistantLangChain, + isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase, assistantTools, connectorId, elserId, @@ -99,8 +114,13 @@ export const postActionsConnectorExecuteRoute = ( request, replacements: request.body.replacements, size: request.body.size, + telemetry, }); + telemetry.reportEvent(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { + isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase, + isEnabledRAGAlerts: request.body.isEnabledRAGAlerts, + }); return response.ok({ body: { ...langChainResponseBody, @@ -110,6 +130,11 @@ export const postActionsConnectorExecuteRoute = ( } catch (err) { logger.error(err); const error = transformError(err); + telemetry.reportEvent(INVOKE_ASSISTANT_ERROR_EVENT.eventType, { + isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase, + isEnabledRAGAlerts: request.body.isEnabledRAGAlerts, + errorMessage: error.message, + }); return resp.error({ body: error.message, diff --git a/x-pack/plugins/elastic_assistant/server/schemas/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/schemas/post_actions_connector_execute.ts index cee6f31df6c71..a03619e6a92f6 100644 --- a/x-pack/plugins/elastic_assistant/server/schemas/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/schemas/post_actions_connector_execute.ts @@ -37,7 +37,8 @@ export const PostActionsConnectorExecuteBody = t.type({ alertsIndexPattern: t.union([t.string, t.undefined]), allow: t.union([t.array(t.string), t.undefined]), allowReplacement: t.union([t.array(t.string), t.undefined]), - assistantLangChain: t.boolean, + isEnabledKnowledgeBase: t.boolean, + isEnabledRAGAlerts: t.boolean, replacements: t.union([t.record(t.string, t.string), t.undefined]), size: t.union([t.number, t.undefined]), }); diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 5be8a35a275b9..c45966b9b80a2 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -10,6 +10,7 @@ import type { PluginStartContract as ActionsPluginStart, } from '@kbn/actions-plugin/server'; import type { + AnalyticsServiceSetup, CustomRequestHandlerContext, KibanaRequest, Logger, @@ -57,6 +58,7 @@ export interface ElasticAssistantApiRequestHandlerContext { actions: ActionsPluginStart; getRegisteredTools: GetRegisteredTools; logger: Logger; + telemetry: AnalyticsServiceSetup; } /** @@ -88,7 +90,7 @@ export interface AssistantToolParams { alertsIndexPattern?: string; allow?: string[]; allowReplacement?: string[]; - assistantLangChain: boolean; + isEnabledKnowledgeBase: boolean; chain: RetrievalQAChain; esClient: ElasticsearchClient; modelExists: boolean; diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index 53616fc2dc2b0..2fd22f015ad8d 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -13,6 +13,7 @@ "../../../typings/**/*" ], "kbn_references": [ + "@kbn/analytics-client", "@kbn/core", "@kbn/core-http-server", "@kbn/licensing-plugin", @@ -32,6 +33,7 @@ "@kbn/stack-connectors-plugin", "@kbn/ml-plugin", "@kbn/apm-utils", + "@kbn/core-analytics-server", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/document_creation/document_creation_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/document_creation/document_creation_logic.test.ts index 3e39c50ff8de7..925f5af35ff48 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/document_creation/document_creation_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/document_creation/document_creation_logic.test.ts @@ -404,7 +404,7 @@ describe('DocumentCreationLogic', () => { DocumentCreationLogic.actions.onSubmitJson(); expect(DocumentCreationLogic.actions.setErrors).toHaveBeenCalledWith([ - 'Unexpected token i in JSON at position 0', + `Unexpected token 'i', "invalid JSON" is not valid JSON`, ]); expect(DocumentCreationLogic.actions.uploadDocuments).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts index 1da16c533a337..de7cd30a343ec 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/constants.ts @@ -85,6 +85,13 @@ export const CONNECTORS_DICT: Record = { icon: CONNECTOR_ICONS.jira_cloud, platinumOnly: true, }, + microsoft_teams: { + docsUrl: docLinks.connectorsTeams, + externalAuthDocsUrl: '', + externalDocsUrl: '', + icon: CONNECTOR_ICONS.teams, + platinumOnly: true, + }, mongodb: { docsUrl: docLinks.connectorsMongoDB, externalAuthDocsUrl: 'https://www.mongodb.com/docs/atlas/app-services/authentication/', @@ -182,13 +189,6 @@ export const CONNECTORS_DICT: Record = { icon: CONNECTOR_ICONS.slack, platinumOnly: true, }, - teams: { - docsUrl: docLinks.connectorsTeams, - externalAuthDocsUrl: '', - externalDocsUrl: '', - icon: CONNECTOR_ICONS.teams, - platinumOnly: true, - }, zoom: { docsUrl: docLinks.connectorsZoom, externalAuthDocsUrl: '', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts index 7412d861d7136..e12366f42f3ef 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.test.ts @@ -573,6 +573,32 @@ describe('MlInferenceLogic', () => { }); describe('listeners', () => { + describe('clearModelPlaceholderFlag', () => { + it('sets placeholder flag false for selected model', () => { + MLInferenceLogic.actions.setInferencePipelineConfiguration({ + ...MLInferenceLogic.values.addInferencePipelineModal.configuration, + modelID: 'unit-test-model', + isModelPlaceholderSelected: true, + }); + MLInferenceLogic.actions.clearModelPlaceholderFlag('unit-test-model'); + + expect( + MLInferenceLogic.values.addInferencePipelineModal.configuration.isModelPlaceholderSelected + ).toBe(false); + }); + it('leaves placeholder flag unmodified if another model was selected', () => { + MLInferenceLogic.actions.setInferencePipelineConfiguration({ + ...MLInferenceLogic.values.addInferencePipelineModal.configuration, + modelID: 'unit-test-model', + isModelPlaceholderSelected: true, + }); + MLInferenceLogic.actions.clearModelPlaceholderFlag('some-other-model-id'); + + expect( + MLInferenceLogic.values.addInferencePipelineModal.configuration.isModelPlaceholderSelected + ).toBe(true); + }); + }); describe('createPipeline', () => { const mockModelConfiguration = { ...DEFAULT_VALUES.addInferencePipelineModal, @@ -639,7 +665,7 @@ describe('MlInferenceLogic', () => { AddInferencePipelineSteps.Fields ); }); - it('triggers pipeline fetch when moving from configuration step', () => { + it('triggers pipeline and model fetch when moving from configuration step', () => { MLInferenceLogic.actions.setInferencePipelineConfiguration({ ...MLInferenceLogic.values.addInferencePipelineModal.configuration, pipelineName: 'unit-test-pipeline', @@ -647,12 +673,14 @@ describe('MlInferenceLogic', () => { existingPipeline: false, }); jest.spyOn(MLInferenceLogic.actions, 'fetchPipelineByName'); + jest.spyOn(MLInferenceLogic.actions, 'makeMLModelsRequest'); MLInferenceLogic.actions.onAddInferencePipelineStepChange(AddInferencePipelineSteps.Fields); expect(MLInferenceLogic.actions.fetchPipelineByName).toHaveBeenCalledWith({ pipelineName: 'ml-inference-unit-test-pipeline', }); + expect(MLInferenceLogic.actions.makeMLModelsRequest).toHaveBeenCalledWith(undefined); }); - it('does not trigger pipeline fetch existing pipeline is selected', () => { + it('does not trigger pipeline and model fetch existing pipeline is selected', () => { MLInferenceLogic.actions.setInferencePipelineConfiguration({ ...MLInferenceLogic.values.addInferencePipelineModal.configuration, pipelineName: 'unit-test-pipeline', @@ -660,8 +688,10 @@ describe('MlInferenceLogic', () => { existingPipeline: true, }); jest.spyOn(MLInferenceLogic.actions, 'fetchPipelineByName'); + jest.spyOn(MLInferenceLogic.actions, 'makeMLModelsRequest'); MLInferenceLogic.actions.onAddInferencePipelineStepChange(AddInferencePipelineSteps.Fields); expect(MLInferenceLogic.actions.fetchPipelineByName).not.toHaveBeenCalled(); + expect(MLInferenceLogic.actions.makeMLModelsRequest).not.toHaveBeenCalled(); }); }); describe('fetchPipelineSuccess', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts index 407f33eb1e2d0..bdcf23d71a743 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts @@ -133,6 +133,7 @@ export interface MLInferenceProcessorsActions { >['apiSuccess']; attachPipeline: () => void; clearFetchedPipeline: FetchPipelineApiLogicActions['apiReset']; + clearModelPlaceholderFlag: (modelId: string) => { modelId: string }; createApiError: Actions< CreateMlInferencePipelineApiLogicArgs, CreateMlInferencePipelineResponse @@ -222,13 +223,13 @@ export const MLInferenceLogic = kea< }), attachPipeline: true, clearFormErrors: true, + clearModelPlaceholderFlag: (modelId: string) => ({ modelId }), createPipeline: true, onAddInferencePipelineStepChange: (step: AddInferencePipelineSteps) => ({ step }), removeFieldFromMapping: (fieldName: string) => ({ fieldName }), selectExistingPipeline: (pipelineName: string) => ({ pipelineName }), selectFields: (fieldNames: string[]) => ({ fieldNames }), setAddInferencePipelineStep: (step: AddInferencePipelineSteps) => ({ step }), - setFormErrors: (inputErrors: AddInferencePipelineFormErrors) => ({ inputErrors }), setIndexName: (indexName: string) => ({ indexName }), setInferencePipelineConfiguration: (configuration: InferencePipelineConfiguration) => ({ configuration, @@ -299,6 +300,19 @@ export const MLInferenceLogic = kea< pipelineName, }); }, + clearModelPlaceholderFlag: ({ modelId }) => { + const { + addInferencePipelineModal: { configuration }, + } = values; + + // Don't change the flag if the user clicked away from the selected model + if (modelId !== configuration.modelID) return; + + actions.setInferencePipelineConfiguration({ + ...configuration, + isModelPlaceholderSelected: false, + }); + }, createPipeline: () => { const { addInferencePipelineModal: { configuration, indexName }, @@ -361,6 +375,9 @@ export const MLInferenceLogic = kea< }); // Continue to the next step so we don't have to save it to state, we will change // back to the Configuration step if we find a pipeline with the same name + + // Re-fetch ML model list to include those that were deployed in this step + actions.makeMLModelsRequest(undefined); } actions.setAddInferencePipelineStep(step); }, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.test.ts index 1252d77bb776a..b0c26aaf8be8c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.test.ts @@ -71,6 +71,15 @@ describe('ModelSelectLogic', () => { expect(ModelSelectLogic.actions.startPollingModels).toHaveBeenCalled(); }); + it('sets selected model as non-placeholder', () => { + jest.spyOn(ModelSelectLogic.actions, 'clearModelPlaceholderFlagFromMLInferenceLogic'); + + ModelSelectLogic.actions.createModelSuccess(CREATE_MODEL_API_RESPONSE); + + expect( + ModelSelectLogic.actions.clearModelPlaceholderFlagFromMLInferenceLogic + ).toHaveBeenCalledWith(CREATE_MODEL_API_RESPONSE.modelId); + }); }); describe('fetchModels', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts index 6fe25cd3c8b5f..4074ffac92f6b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts @@ -32,24 +32,22 @@ import { } from './ml_inference_logic'; export interface ModelSelectActions { + clearModelPlaceholderFlagFromMLInferenceLogic: MLInferenceProcessorsActions['clearModelPlaceholderFlag']; createModel: (modelId: string) => { modelId: string }; createModelError: CreateModelApiLogicActions['apiError']; createModelMakeRequest: CreateModelApiLogicActions['makeRequest']; createModelSuccess: CreateModelApiLogicActions['apiSuccess']; - fetchModels: () => void; fetchModelsError: CachedFetchModlesApiLogicActions['apiError']; fetchModelsMakeRequest: CachedFetchModlesApiLogicActions['makeRequest']; fetchModelsSuccess: CachedFetchModlesApiLogicActions['apiSuccess']; - startPollingModels: CachedFetchModlesApiLogicActions['startPolling']; - + setInferencePipelineConfiguration: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; + setInferencePipelineConfigurationFromMLInferenceLogic: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; startModel: (modelId: string) => { modelId: string }; startModelError: CreateModelApiLogicActions['apiError']; startModelMakeRequest: StartModelApiLogicActions['makeRequest']; startModelSuccess: StartModelApiLogicActions['apiSuccess']; - - setInferencePipelineConfiguration: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; - setInferencePipelineConfigurationFromMLInferenceLogic: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; + startPollingModels: CachedFetchModlesApiLogicActions['startPolling']; } export interface ModelSelectValues { @@ -96,6 +94,7 @@ export const ModelSelectLogic = kea { actions.createModelMakeRequest({ modelId }); }, - createModelSuccess: () => { + createModelSuccess: (response) => { actions.startPollingModels(); + // The create action succeeded, so the model is no longer a placeholder + actions.clearModelPlaceholderFlagFromMLInferenceLogic(response.modelId); }, fetchModels: () => { actions.fetchModelsMakeRequest({}); }, - startModel: ({ modelId }) => { - actions.startModelMakeRequest({ modelId }); - }, setInferencePipelineConfiguration: ({ configuration }) => { actions.setInferencePipelineConfigurationFromMLInferenceLogic(configuration); }, + startModel: ({ modelId }) => { + actions.startModelMakeRequest({ modelId }); + }, startModelSuccess: () => { actions.startPollingModels(); }, diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts index 2262879657ec4..abdac9fb57e0f 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts @@ -54,9 +54,19 @@ export function registerApiKeysRoutes( const { client } = (await context.core).elasticsearch; const user = security.authc.getCurrentUser(request); if (user) { - const apiKeys = await client.asCurrentUser.security.getApiKey({ username: user.username }); - const validKeys = apiKeys.api_keys.filter(({ invalidated }) => !invalidated); - return response.ok({ body: { api_keys: validKeys } }); + try { + const apiKeys = await client.asCurrentUser.security.getApiKey({ + username: user.username, + }); + const validKeys = apiKeys.api_keys.filter(({ invalidated }) => !invalidated); + return response.ok({ body: { api_keys: validKeys } }); + } catch { + // Ideally we check the error response here for unauthorized user + // Unfortunately the error response is not structured enough for us to filter those + // Always returning an empty array should also be fine, and deals with transient errors + + return response.ok({ body: { api_keys: [] } }); + } } return response.customError({ body: 'Could not retrieve current user, security plugin is not ready', diff --git a/x-pack/plugins/exploratory_view/public/application/index.tsx b/x-pack/plugins/exploratory_view/public/application/index.tsx index f3189e7cf660b..d496af2b23fb9 100644 --- a/x-pack/plugins/exploratory_view/public/application/index.tsx +++ b/x-pack/plugins/exploratory_view/public/application/index.tsx @@ -52,7 +52,7 @@ export const renderApp = ({ }) => { const { element, history, theme$ } = appMountParameters; const i18nCore = core.i18n; - const isDarkMode = core.uiSettings.get('theme:darkMode'); + const isDarkMode = core.theme.getTheme().darkMode; core.chrome.setHelpExtension({ appName: i18n.translate('xpack.exploratoryView.feedbackMenu.appName', { diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/index.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/index.tsx index d5cb78b84f642..8fe530c0b5bdf 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/index.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/index.tsx @@ -33,7 +33,7 @@ function ExploratoryViewEmbeddable(props: ExploratoryEmbeddableComponentProps) { export function getExploratoryViewEmbeddable( services: CoreStart & ExploratoryViewPublicPluginsStart ) { - const { lens, dataViews: dataViewsService, uiSettings } = services; + const { lens, dataViews: dataViewsService, theme } = services; const dataViewCache: Record = {}; @@ -70,7 +70,7 @@ export function getExploratoryViewEmbeddable( const series = attributes[0]; - const isDarkMode = uiSettings?.get('theme:darkMode'); + const isDarkMode = theme?.getTheme().darkMode ?? false; const { data: lensHelper, loading: lensLoading } = useFetcher(async () => { if (lenStateHelperPromise) { diff --git a/x-pack/plugins/fleet/common/services/agent_status.ts b/x-pack/plugins/fleet/common/services/agent_status.ts index a7a5257c603b8..78726667f3b13 100644 --- a/x-pack/plugins/fleet/common/services/agent_status.ts +++ b/x-pack/plugins/fleet/common/services/agent_status.ts @@ -61,10 +61,15 @@ export const AGENT_UPDATING_TIMEOUT_HOURS = 2; export function isStuckInUpdating(agent: Agent): boolean { return ( - agent.status === 'updating' && - !!agent.upgrade_started_at && - !agent.upgraded_at && - Date.now() - Date.parse(agent.upgrade_started_at) > - AGENT_UPDATING_TIMEOUT_HOURS * 60 * 60 * 1000 + (agent.status !== 'offline' && agent.active && isAgentInFailedUpgradeState(agent)) || + (agent.status === 'updating' && + !!agent.upgrade_started_at && + !agent.upgraded_at && + Date.now() - Date.parse(agent.upgrade_started_at) > + AGENT_UPDATING_TIMEOUT_HOURS * 60 * 60 * 1000) ); } + +export function isAgentInFailedUpgradeState(agent: Agent): boolean { + return agent.upgrade_details?.state === 'UPG_FAILED'; +} diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 1242a61124952..47d9c424ef0e0 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -449,5 +449,7 @@ export interface AgentUpgradeDetails { download_rate?: number; // bytes per second failed_state?: AgentUpgradeStateType; error_msg?: string; + retry_error_msg?: string; + retry_until?: string; }; } diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts index 1a7c4cefca34d..b1bea249ee9de 100644 --- a/x-pack/plugins/fleet/common/types/models/epm.ts +++ b/x-pack/plugins/fleet/common/types/models/epm.ts @@ -125,6 +125,14 @@ export type DataType = typeof dataTypes; export type MonitoringType = typeof monitoringTypes; export type InstallablePackage = RegistryPackage | ArchivePackage; +export type AssetsMap = Map; + +export interface PackageInstallContext { + packageInfo: InstallablePackage; + assetsMap: AssetsMap; + paths: string[]; +} + export type ArchivePackage = PackageSpecManifest & // should an uploaded package be able to specify `internal`? Pick; diff --git a/x-pack/plugins/fleet/common/types/models/preconfiguration.ts b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts index ac3f8f566ec1f..c6ad134fb31c9 100644 --- a/x-pack/plugins/fleet/common/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts @@ -35,6 +35,7 @@ export interface PreconfiguredAgentPolicy extends Omit { prerelease?: boolean; + skipDataStreamRollover?: boolean; } export interface PreconfiguredOutput extends Omit { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index f76ef340a2c98..d81e754a69977 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -27,6 +27,7 @@ import { sendGetPackagePolicies, } from '../../../../../hooks'; import { + ExperimentalFeaturesService, getCloudShellUrlFromPackagePolicy, isVerificationError, packageToPackagePolicy, @@ -47,6 +48,8 @@ import { useOnSaveNavigate } from '../../hooks'; import { prepareInputPackagePolicyDataset } from '../../services/prepare_input_pkg_policy_dataset'; import { getCloudFormationPropsFromPackagePolicy } from '../../../../../services'; +import { AGENTLESS_POLICY_ID } from './setup_technology'; + async function createAgentPolicy({ packagePolicy, newAgentPolicy, @@ -106,7 +109,7 @@ export function useOnSubmit({ queryParamsPolicyId: string | undefined; integrationToEnable?: string; }) { - const { notifications } = useStartServices(); + const { notifications, cloud } = useStartServices(); const confirmForceInstall = useConfirmForceInstall(); // only used to store the resulting package policy once saved const [savedPackagePolicy, setSavedPackagePolicy] = useState(); @@ -129,6 +132,9 @@ export function useOnSubmit({ const [hasAgentPolicyError, setHasAgentPolicyError] = useState(false); const hasErrors = validationResults ? validationHasErrors(validationResults) : false; + const isServerless = cloud?.isServerlessEnabled ?? false; + const { agentless: isAgentlessEnabled } = ExperimentalFeaturesService.get(); + // Update agent policy method const updateAgentPolicy = useCallback( (updatedAgentPolicy: AgentPolicy | undefined) => { @@ -298,12 +304,17 @@ export function useOnSubmit({ } } + const agentPolicyIdToSave = createdPolicy?.id ?? packagePolicy.policy_id; + const shouldForceInstallOnAgentless = + agentPolicyIdToSave === AGENTLESS_POLICY_ID && isServerless && isAgentlessEnabled; + const forceInstall = force || shouldForceInstallOnAgentless; + setFormState('LOADING'); // passing pkgPolicy with policy_id here as setPackagePolicy doesn't propagate immediately const { error, data } = await savePackagePolicy({ ...packagePolicy, - policy_id: createdPolicy?.id ?? packagePolicy.policy_id, - force, + policy_id: agentPolicyIdToSave, + force: forceInstall, }); const hasAzureArmTemplate = data?.item @@ -373,9 +384,11 @@ export function useOnSubmit({ } else { if (isVerificationError(error)) { setFormState('VALID'); // don't show the add agent modal - const forceInstall = await confirmForceInstall(packagePolicy.package!); + const forceInstallUnverifiedIntegration = await confirmForceInstall( + packagePolicy.package! + ); - if (forceInstall) { + if (forceInstallUnverifiedIntegration) { // skip creating the agent policy because it will have already been successfully created onSubmit({ overrideCreatedAgentPolicy: createdPolicy, force: true }); } @@ -393,14 +406,16 @@ export function useOnSubmit({ agentCount, selectedPolicyTab, packagePolicy, + isServerless, + isAgentlessEnabled, + withSysMonitoring, + newAgentPolicy, + updatePackagePolicy, + packageInfo, notifications.toasts, agentPolicy, onSaveNavigate, confirmForceInstall, - newAgentPolicy, - updatePackagePolicy, - withSysMonitoring, - packageInfo, ] ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts index 22972f4a9a6d4..5eab8287118cc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts @@ -13,7 +13,7 @@ import { SetupTechnology } from '../../../../../types'; import { sendGetOneAgentPolicy, useStartServices } from '../../../../../hooks'; import { SelectedPolicyTab } from '../../components'; -const AGENTLESS_POLICY_ID = 'agentless'; +export const AGENTLESS_POLICY_ID = 'agentless'; export function useSetupTechnology({ updateNewAgentPolicy, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx index dda28f90d0a80..27c3c8c0cc37d 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx @@ -14,12 +14,16 @@ import { createFleetTestRendererMock } from '../../../../../../mock'; import { FLEET_ROUTING_PATHS, pagePathGetters, PLUGIN_ID } from '../../../../constants'; import type { CreatePackagePolicyRouteState } from '../../../../types'; +import { ExperimentalFeaturesService } from '../../../../../../services'; + import { sendCreatePackagePolicy, sendCreateAgentPolicy, sendGetAgentStatus, + sendGetOneAgentPolicy, useIntraAppState, useStartServices, + useGetAgentPolicies, useGetPackageInfoByKeyQuery, } from '../../../../hooks'; @@ -78,6 +82,9 @@ jest.mock('../../../../hooks', () => { }, setBreadcrumbs: jest.fn(), }, + cloud: { + isServerlessEnabled: false, + }, }), }; }); @@ -95,6 +102,7 @@ jest.mock('react-router-dom', () => ({ })); import { CreatePackagePolicySinglePage } from '.'; +import { AGENTLESS_POLICY_ID } from './hooks/setup_technology'; // mock console.debug to prevent noisy logs from console.debugs in ./index.tsx let consoleDebugMock: any; @@ -290,6 +298,7 @@ describe('when on the package policy create page', () => { expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledWith({ ...newPackagePolicy, policy_id: 'agent-policy-1', + force: false, }); expect(sendCreateAgentPolicy as jest.MockedFunction).not.toHaveBeenCalled(); @@ -441,6 +450,7 @@ describe('when on the package policy create page', () => { expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledWith({ ...newPackagePolicy, policy_id: 'agent-policy-2', + force: false, }); await waitFor(() => { @@ -503,6 +513,7 @@ describe('when on the package policy create page', () => { expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledWith({ ...newPackagePolicy, policy_id: 'agent-policy-1', + force: false, }); await waitFor(() => { @@ -573,10 +584,82 @@ describe('when on the package policy create page', () => { ], }, ], + force: false, }); }); }); }); + + describe('with agentless policy available', () => { + beforeEach(async () => { + (sendGetOneAgentPolicy as jest.MockedFunction).mockResolvedValue({ + data: { item: { id: AGENTLESS_POLICY_ID, name: 'Agentless CSPM', namespace: 'default' } }, + }); + (useGetAgentPolicies as jest.MockedFunction).mockReturnValue({ + data: { + items: [{ id: AGENTLESS_POLICY_ID, name: 'Agentless CSPM', namespace: 'default' }], + }, + error: undefined, + isLoading: false, + resendRequest: jest.fn(), + }); + + await act(async () => { + render(); + }); + }); + + test('should not force create package policy when not in serverless', async () => { + await act(async () => { + fireEvent.click(renderResult.getByText('Existing hosts')!); + }); + + await act(async () => { + fireEvent.click(renderResult.getByText(/Save and continue/).closest('button')!); + }); + + expect(sendCreateAgentPolicy as jest.MockedFunction).not.toHaveBeenCalled(); + expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledWith({ + ...newPackagePolicy, + force: false, + policy_id: AGENTLESS_POLICY_ID, + }); + + await waitFor(() => { + expect(renderResult.getByText('Nginx integration added')).toBeInTheDocument(); + }); + }); + + test('should force create package policy', async () => { + (useStartServices as jest.MockedFunction).mockReturnValue({ + ...useStartServices(), + cloud: { + ...useStartServices().cloud, + isServerlessEnabled: true, + }, + }); + jest.spyOn(ExperimentalFeaturesService, 'get').mockReturnValue({ agentless: true }); + + await act(async () => { + fireEvent.click(renderResult.getByText('Existing hosts')!); + }); + + await act(async () => { + fireEvent.click(renderResult.getByText(/Save and continue/).closest('button')!); + }); + + expect(sendCreateAgentPolicy as jest.MockedFunction).not.toHaveBeenCalled(); + expect(sendCreatePackagePolicy as jest.MockedFunction).toHaveBeenCalledWith({ + ...newPackagePolicy, + force: true, + policy_id: AGENTLESS_POLICY_ID, + }); + + await waitFor(() => { + expect(renderResult.getByText('Nginx integration added')).toBeInTheDocument(); + }); + }); + }); }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx index f27d428bd42cc..45d5ead9909ee 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx @@ -23,7 +23,11 @@ import { FormattedMessage, FormattedRelative } from '@kbn/i18n-react'; import type { Agent, AgentPolicy } from '../../../../../types'; import { useAgentVersion } from '../../../../../hooks'; -import { ExperimentalFeaturesService, isAgentUpgradeable } from '../../../../../services'; +import { + ExperimentalFeaturesService, + isAgentUpgradeable, + getNotUpgradeableMessage, +} from '../../../../../services'; import { AgentPolicySummaryLine } from '../../../../../components'; import { AgentHealth } from '../../../components'; import { Tags } from '../../../components/tags'; @@ -186,6 +190,7 @@ export const AgentDetailsOverviewSection: React.FunctionComponent<{ agentUpgradeStartedAt={agent.upgrade_started_at} agentUpgradedAt={agent.upgraded_at} agentUpgradeDetails={agent.upgrade_details} + notUpgradeableMessage={getNotUpgradeableMessage(agent, latestAgentVersion)} /> diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx index a5f3498fd0b59..1155176bf7915 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx @@ -7,6 +7,7 @@ import { fireEvent, waitFor } from '@testing-library/react'; import React from 'react'; +import moment from 'moment'; import { createFleetTestRendererMock } from '../../../../../../mock'; @@ -176,6 +177,69 @@ describe('AgentUpgradeStatus', () => { await expectTooltip(results, 'Downloading the new agent artifact version (16.4%).'); }); + it('should render UPG_DOWNLOADING with a warning if agent has a retry_message and retry_until', async () => { + const results = render({ + agentUpgradeDetails: { + target_version: 'XXX', + action_id: 'xxx', + state: 'UPG_DOWNLOADING', + metadata: { + download_percent: 16.4, + retry_error_msg: 'unable to download', + retry_until: `${moment().add(10, 'minutes').toISOString()}`, + }, + }, + }); + + expectUpgradeStatusBadgeLabel(results, 'Upgrade downloading'); + fireEvent.mouseOver(results.getByText('Info')); + await waitFor(() => { + const tooltip = results.getByRole('tooltip'); + expect(tooltip).toHaveTextContent('Upgrade failing: unable to download. Retrying until:'); + expect(tooltip).toHaveTextContent('(00:09 remaining)'); + }); + }); + + it('should not render retry_until if the remaining time is negative', async () => { + const results = render({ + agentUpgradeDetails: { + target_version: 'XXX', + action_id: 'xxx', + state: 'UPG_DOWNLOADING', + metadata: { + download_percent: 16.4, + retry_error_msg: 'unable to download', + retry_until: `${moment().subtract(10, 'minutes').toISOString()}`, + }, + }, + }); + + expectUpgradeStatusBadgeLabel(results, 'Upgrade downloading'); + fireEvent.mouseOver(results.getByText('Info')); + await waitFor(() => { + const tooltip = results.getByRole('tooltip'); + expect(tooltip).toHaveTextContent('Upgrade failing: unable to download.'); + expect(tooltip).not.toHaveTextContent('remaining'); + }); + }); + + it('should render UPG_DOWNLOADING with a warning if agent has a retry_message', async () => { + const results = render({ + agentUpgradeDetails: { + target_version: 'XXX', + action_id: 'xxx', + state: 'UPG_DOWNLOADING', + metadata: { + download_percent: 16.4, + retry_error_msg: 'unable to download', + }, + }, + }); + + expectUpgradeStatusBadgeLabel(results, 'Upgrade downloading'); + await expectTooltip(results, 'Upgrade failing: unable to download.'); + }); + it('should render UPG_EXTRACTING state correctly', async () => { const results = render({ agentUpgradeDetails: { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx index e5cf2eb7913c6..cf3ad42292533 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx @@ -8,6 +8,7 @@ import React, { useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiIconTip } from '@elastic/eui'; +import moment from 'moment'; import type { AgentUpgradeDetails } from '../../../../../../../common/types'; @@ -62,6 +63,16 @@ const formatRate = (downloadRate: number) => { } return downloadRate.toFixed(1) + byteUnits[i]; }; +const formatRetryUntil = (retryUntil: string | undefined) => { + if (!retryUntil) return ''; + const eta = new Date(retryUntil).toISOString(); + const remainingTime = Date.parse(retryUntil) - Date.now(); + const duration = moment + .utc(moment.duration(remainingTime, 'milliseconds').asMilliseconds()) + .format('HH:mm'); + + return remainingTime > 0 ? `Retrying until: ${eta} (${duration} remaining)` : ''; +}; function getStatusComponents(agentUpgradeDetails?: AgentUpgradeDetails) { switch (agentUpgradeDetails?.state) { @@ -103,6 +114,28 @@ function getStatusComponents(agentUpgradeDetails?: AgentUpgradeDetails) { ), }; case 'UPG_DOWNLOADING': + if (agentUpgradeDetails?.metadata?.retry_error_msg) { + return { + Badge: ( + + + + ), + WarningTooltipText: ( + + ), + }; + } return { Badge: ( @@ -252,24 +285,6 @@ export const AgentUpgradeStatus: React.FC<{ const status = useMemo(() => getStatusComponents(agentUpgradeDetails), [agentUpgradeDetails]); const minVersion = '8.12'; - if (!isAgentUpgradable && notUpgradeableMessage) { - return ( - - } - color="subdued" - /> - ); - } - if (isAgentUpgradable) { return ( @@ -285,9 +300,16 @@ export const AgentUpgradeStatus: React.FC<{ return ( {status.Badge} - - - + {status.TooltipText && ( + + + + )} + {status.WarningTooltipText && ( + + + + )} ); } @@ -310,5 +332,23 @@ export const AgentUpgradeStatus: React.FC<{ ); } + if (!isAgentUpgradable && notUpgradeableMessage) { + return ( + + } + color="subdued" + /> + ); + } + return null; }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx index 93646a544bebb..b55190d848f8a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx @@ -40,6 +40,8 @@ describe('AgentHealth', () => { true ); + utils.getByText('Agent may be stuck updating.'); + act(() => { fireEvent.click(utils.getByTestId('restartUpgradeBtn')); }); @@ -47,6 +49,56 @@ describe('AgentHealth', () => { utils.findByText('Upgrade Modal'); }); + it('should render agent health with callout when agent has upgrade state failed', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'online', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + utils.getByText('Agent upgrade is stuck in failed state.'); + + utils.getByTestId('restartUpgradeBtn'); + }); + + it('should not render agent health with callout when agent has upgrade state failed but offline', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'offline', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + }); + + it('should not render agent health with callout when agent has upgrade state failed but inactive', () => { + const { utils } = renderAgentHealth( + { + active: false, + status: 'unenrolled', + upgrade_started_at: '2022-11-21T12:27:24Z', + upgrade_details: { + state: 'UPG_FAILED', + }, + } as any, + true + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + }); + it('should not render agent health with callout when agent not stuck updating', () => { const { utils } = renderAgentHealth( { @@ -58,6 +110,7 @@ describe('AgentHealth', () => { ); expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + expect(utils.queryByText('Agent may be stuck updating.')).not.toBeInTheDocument(); }); it('should not render agent health with callout when not from details', () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx index 0cb89b06b62d2..fa8e263c16170 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx @@ -23,6 +23,7 @@ import { euiLightVars as euiVars } from '@kbn/ui-theme'; import { getPreviousAgentStatusForOfflineAgents, + isAgentInFailedUpgradeState, isStuckInUpdating, } from '../../../../../../common/services/agent_status'; @@ -152,12 +153,19 @@ export const AgentHealth: React.FunctionComponent = ({ agent, fromDetails

    {lastCheckinText}

    {lastCheckInMessageText}

    {isStuckInUpdating(agent) ? ( -

    + isAgentInFailedUpgradeState(agent) ? ( -

    + ) : ( +

    + +

    + ) ) : null} } @@ -183,17 +191,27 @@ export const AgentHealth: React.FunctionComponent = ({ agent, fromDetails size="m" color="warning" title={ - + isAgentInFailedUpgradeState(agent) ? ( + + ) : ( + + ) } >

    diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx index d5da6f553cf89..4352a3a6b8248 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.test.tsx @@ -83,6 +83,12 @@ describe('Output form validation', () => { expect(res).toEqual([{ message: 'URL is required' }]); }); + it('should not work with empty url', () => { + const res = validateESHosts(['']); + + expect(res).toEqual([{ index: 0, message: 'URL is required' }]); + }); + it('should work with valid url', () => { const res = validateESHosts(['https://test.fr:9200']); @@ -117,6 +123,11 @@ describe('Output form validation', () => { { index: 1, message: 'Duplicate URL' }, ]); }); + it('should return an error when invalid protocol', () => { + const res = validateESHosts(['ftp://test.fr']); + + expect(res).toEqual([{ index: 0, message: 'Invalid protocol' }]); + }); }); describe('validateLogstashHosts', () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx index 26e63803df0e7..330d5c5d20122 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_validators.tsx @@ -88,14 +88,29 @@ export function validateKafkaHosts(value: string[]) { export function validateESHosts(value: string[]) { const res: Array<{ message: string; index?: number }> = []; const urlIndexes: { [key: string]: number[] } = {}; + const urlRequiredMessage = i18n.translate( + 'xpack.fleet.settings.outputForm.elasticUrlRequiredError', + { + defaultMessage: 'URL is required', + } + ); value.forEach((val, idx) => { try { if (!val) { - throw new Error('Host URL required'); - } - const urlParsed = new URL(val); - if (!['http:', 'https:'].includes(urlParsed.protocol)) { - throw new Error('Invalid protocol'); + res.push({ + message: urlRequiredMessage, + index: idx, + }); + } else { + const urlParsed = new URL(val); + if (!['http:', 'https:'].includes(urlParsed.protocol)) { + res.push({ + message: i18n.translate('xpack.fleet.settings.outputForm.invalidProtocolError', { + defaultMessage: 'Invalid protocol', + }), + index: idx, + }); + } } } catch (error) { res.push({ @@ -125,9 +140,7 @@ export function validateESHosts(value: string[]) { if (value.length === 0) { res.push({ - message: i18n.translate('xpack.fleet.settings.outputForm.elasticUrlRequiredError', { - defaultMessage: 'URL is required', - }), + message: urlRequiredMessage, }); } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx index 59b1189818225..a1d0fb484b44f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx @@ -874,7 +874,7 @@ export function useOutputForm(onSucess: () => void, output?: Output) { name: nameInput.value, type: outputType.RemoteElasticsearch, hosts: elasticsearchUrlInput.value, - is_default: false, + is_default: defaultOutputInput.value, is_default_monitoring: defaultMonitoringOutputInput.value, preset: presetInput.value, config_yaml: additionalYamlConfigInput.value, diff --git a/x-pack/plugins/fleet/public/services/index.ts b/x-pack/plugins/fleet/public/services/index.ts index 71f5fde90d93a..7b9d5093ed740 100644 --- a/x-pack/plugins/fleet/public/services/index.ts +++ b/x-pack/plugins/fleet/public/services/index.ts @@ -34,6 +34,7 @@ export { isValidNamespace, LicenseService, isAgentUpgradeable, + getNotUpgradeableMessage, doesPackageHaveIntegrations, validatePackagePolicy, validatePackagePolicyConfig, diff --git a/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts b/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts index bf8e8a22cdbdd..f9021f344c69b 100644 --- a/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts @@ -6,6 +6,7 @@ */ import { keyBy, keys, merge } from 'lodash'; import type { RequestHandler } from '@kbn/core/server'; +import pMap from 'p-map'; import type { DataStream } from '../../types'; import { KibanaSavedObjectType } from '../../../common/types'; @@ -120,7 +121,7 @@ export const getListHandler: RequestHandler = async (context, request, response) ); // Query additional information for each data stream - const dataStreamPromises = dataStreamNames.map(async (dataStreamName) => { + const queryDataStreamInfo = async (dataStreamName: string) => { const dataStream = dataStreams[dataStreamName]; const dataStreamResponse: DataStream = { @@ -197,13 +198,18 @@ export const getListHandler: RequestHandler = async (context, request, response) } return dataStreamResponse; - }); + }; // Return final data streams objects sorted by last activity, descending // After filtering out data streams that are missing dataset/namespace/type/package fields - body.data_streams = (await Promise.all(dataStreamPromises)) + body.data_streams = ( + await pMap(dataStreamNames, (dataStreamName) => queryDataStreamInfo(dataStreamName), { + concurrency: 50, + }) + ) .filter(({ dataset, namespace, type }) => dataset && namespace && type) .sort((a, b) => b.last_activity_ms - a.last_activity_ms); + return response.ok({ body, }); diff --git a/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts b/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts index 56d6d8c127bc2..1eb8387f69751 100644 --- a/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts +++ b/x-pack/plugins/fleet/server/routes/epm/file_handler.test.ts @@ -15,7 +15,7 @@ import { getBundledPackageByPkgKey } from '../../services/epm/packages/bundled_p import { getFile, getInstallation } from '../../services/epm/packages/get'; import type { FleetRequestHandlerContext } from '../..'; import { appContextService } from '../../services'; -import { unpackBufferEntries, getArchiveEntry } from '../../services/epm/archive'; +import { unpackBufferEntries } from '../../services/epm/archive'; import { getAsset } from '../../services/epm/archive/storage'; import { getFileHandler } from './file_handler'; @@ -29,7 +29,6 @@ jest.mock('../../services/epm/packages/get'); const mockedGetBundledPackageByPkgKey = jest.mocked(getBundledPackageByPkgKey); const mockedGetInstallation = jest.mocked(getInstallation); const mockedGetFile = jest.mocked(getFile); -const mockedGetArchiveEntry = jest.mocked(getArchiveEntry); const mockedUnpackBufferEntries = jest.mocked(unpackBufferEntries); const mockedGetAsset = jest.mocked(getAsset); @@ -61,7 +60,6 @@ describe('getFileHandler', () => { mockedUnpackBufferEntries.mockReset(); mockedGetFile.mockReset(); mockedGetInstallation.mockReset(); - mockedGetArchiveEntry.mockReset(); mockedGetAsset.mockReset(); }); @@ -207,7 +205,15 @@ describe('getFileHandler', () => { const context = mockContext(); mockedGetInstallation.mockResolvedValue({ version: '1.0.0' } as any); - mockedGetArchiveEntry.mockReturnValue(Buffer.from('test')); + mockedGetAsset.mockResolvedValue({ + asset_path: '/test/1.0.0/README.md', + data_utf8: 'test', + data_base64: '', + media_type: 'text/markdown; charset=utf-8', + package_name: 'test', + package_version: '1.0.0', + install_source: 'registry', + }); await getFileHandler(context, request, response); diff --git a/x-pack/plugins/fleet/server/routes/epm/file_handler.ts b/x-pack/plugins/fleet/server/routes/epm/file_handler.ts index 4b6b74628aa4e..0f22a31c1aa72 100644 --- a/x-pack/plugins/fleet/server/routes/epm/file_handler.ts +++ b/x-pack/plugins/fleet/server/routes/epm/file_handler.ts @@ -14,7 +14,6 @@ import type { ResponseHeaders, KnownHeaders, HttpResponseOptions } from '@kbn/co import type { GetFileRequestSchema, FleetRequestHandler } from '../../types'; import { getFile, getInstallation } from '../../services/epm/packages'; import { defaultFleetErrorHandler } from '../../errors'; -import { getArchiveEntry } from '../../services/epm/archive'; import { getAsset } from '../../services/epm/archive/storage'; import { getBundledPackageByPkgKey } from '../../services/epm/packages/bundled_packages'; import { pkgToPkgKey } from '../../services/epm/registry'; @@ -31,35 +30,23 @@ export const getFileHandler: FleetRequestHandler< const savedObjectsClient = (await context.fleet).internalSoClient; const installation = await getInstallation({ savedObjectsClient, pkgName }); - const useLocalFile = pkgVersion === installation?.version; + const isPackageInstalled = pkgVersion === installation?.version; const assetPath = `${pkgName}-${pkgVersion}/${filePath}`; - if (useLocalFile) { - const fileBuffer = getArchiveEntry(assetPath); - // only pull local installation if we don't have it cached - const storedAsset = !fileBuffer && (await getAsset({ savedObjectsClient, path: assetPath })); + if (isPackageInstalled) { + const storedAsset = await getAsset({ savedObjectsClient, path: assetPath }); - // error, if neither is available - if (!fileBuffer && !storedAsset) { + if (!storedAsset) { return response.custom({ body: `installed package file not found: ${filePath}`, statusCode: 404, }); } - // if storedAsset is not available, fileBuffer *must* be - // b/c we error if we don't have at least one, and storedAsset is the least likely - const { buffer, contentType } = storedAsset - ? { - contentType: storedAsset.media_type, - buffer: storedAsset.data_utf8 - ? Buffer.from(storedAsset.data_utf8, 'utf8') - : Buffer.from(storedAsset.data_base64, 'base64'), - } - : { - contentType: mime.contentType(path.extname(assetPath)), - buffer: fileBuffer, - }; + const contentType = storedAsset.media_type; + const buffer = storedAsset.data_utf8 + ? Buffer.from(storedAsset.data_utf8, 'utf8') + : Buffer.from(storedAsset.data_base64, 'base64'); if (!contentType) { return response.custom({ diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index 24b35b7b10201..9e40bcd64c8c8 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -16,6 +16,8 @@ import type { KibanaRequest, } from '@kbn/core/server'; +import { CoreKibanaRequest } from '@kbn/core/server'; + import type { PluginStart as DataPluginStart } from '@kbn/data-plugin/server'; import type { EncryptedSavedObjectsClient, @@ -25,7 +27,7 @@ import type { import type { SecurityPluginStart, SecurityPluginSetup } from '@kbn/security-plugin/server'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; - +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import type { SavedObjectTaggingStart } from '@kbn/saved-objects-tagging-plugin/server'; import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; @@ -172,6 +174,23 @@ class AppContextService { } return this.savedObjectsTagging; } + public getInternalUserSOClientForSpaceId(spaceId?: string) { + const request = CoreKibanaRequest.from({ + headers: {}, + path: '/', + route: { settings: {} }, + url: { href: '', hash: '' } as URL, + raw: { req: { url: '/' } } as any, + }); + if (this.httpSetup && spaceId && spaceId !== DEFAULT_SPACE_ID) { + this.httpSetup?.basePath.set(request, `/s/${spaceId}`); + } + + // soClient as kibana internal users, be careful on how you use it, security is not enabled + return appContextService.getSavedObjects().getScopedClient(request, { + excludedExtensions: [SECURITY_EXTENSION_ID], + }); + } public getInternalUserSOClient(request: KibanaRequest) { // soClient as kibana internal users, be careful on how you use it, security is not enabled diff --git a/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts b/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts index 10d8c7560b269..f60690493637e 100644 --- a/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts +++ b/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts @@ -42,7 +42,7 @@ spec: # - -c # - >- # mkdir -p /etc/elastic-agent/inputs.d && - # wget -O - https://github.com/elastic/elastic-agent/archive/8.12.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-8.12/deploy/kubernetes/elastic-agent/templates.d" + # wget -O - https://github.com/elastic/elastic-agent/archive/8.13.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-8.13/deploy/kubernetes/elastic-agent/templates.d" # volumeMounts: # - name: external-inputs # mountPath: /etc/elastic-agent/inputs.d diff --git a/x-pack/plugins/fleet/server/services/epm/agent/agent.test.ts b/x-pack/plugins/fleet/server/services/epm/agent/agent.test.ts index 0ab728affd751..e57b19c847806 100644 --- a/x-pack/plugins/fleet/server/services/epm/agent/agent.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/agent/agent.test.ts @@ -384,3 +384,58 @@ paths: ); }); }); + +describe('encode', () => { + it('should correctly percent encode a string', () => { + const streamTemplate = ` + hosts: + - sqlserver://{{url_encode username}}:{{url_encode password}}@{{hosts}}`; + + const vars = { + username: { value: 'db_elastic_agent@?#:', type: 'text' }, + password: { value: 'dbelasticagent[!#@2023', type: 'password' }, + hosts: { value: 'localhost', type: 'text' }, + }; + + const output = compileTemplate(vars, streamTemplate); + expect(output).toEqual({ + hosts: ['sqlserver://db_elastic_agent%40%3F%23%3A:dbelasticagent%5B%21%23%402023@localhost'], + }); + }); + + it('should correctly encode parts of the URI of the form domain\\username', () => { + const streamTemplate = ` + hosts: + - sqlserver://{{url_encode username}}:{{url_encode password}}@{{hosts}}`; + + const vars = { + username: { value: 'domain\\username', type: 'text' }, + password: { value: 'dbelasticagent[!#@2023', type: 'password' }, + hosts: { value: 'localhost', type: 'text' }, + }; + + const output = compileTemplate(vars, streamTemplate); + expect(output).toEqual({ + hosts: ['sqlserver://domain%5Cusername:dbelasticagent%5B%21%23%402023@localhost'], + }); + }); + + it('should handle special characters which are not encoded by default', () => { + const streamTemplate = ` + hosts: + - sqlserver://{{url_encode username}}:{{url_encode password}}@{{hosts}}`; + + const vars = { + username: { value: 'db_elastic_agent', type: 'text' }, + password: { value: "Special Characters: ! * ( )'", type: 'password' }, + hosts: { value: 'localhost', type: 'text' }, + }; + + const output = compileTemplate(vars, streamTemplate); + expect(output).toEqual({ + hosts: [ + 'sqlserver://db_elastic_agent:Special%20Characters%3A%20%21%20%2A%20%28%20%29%27@localhost', + ], + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/epm/agent/agent.ts b/x-pack/plugins/fleet/server/services/epm/agent/agent.ts index b58ab3e3fca0c..abe2153bb800f 100644 --- a/x-pack/plugins/fleet/server/services/epm/agent/agent.ts +++ b/x-pack/plugins/fleet/server/services/epm/agent/agent.ts @@ -140,6 +140,22 @@ function toJsonHelper(value: any) { } handlebars.registerHelper('to_json', toJsonHelper); +// urlEncodeHelper returns a string encoded as a URI component. +function urlEncodeHelper(input: string) { + let encodedString = encodeURIComponent(input); + // encodeURIComponent does not encode the characters -.!~*'(), known as "unreserved marks", + // which do not have a reserved purpose but are allowed in a URI "as is". So, these have are + // explicitly encoded. The following creates the sequences %27 %28 %29 %2A. Since the valid + // encoding of "*" is %2A, it is necessary to call toUpperCase() to properly encode. + encodedString = encodedString.replace( + /[!'()*]/g, + (char) => '%' + char.charCodeAt(0).toString(16).toUpperCase() + ); + + return encodedString; +} +handlebars.registerHelper('url_encode', urlEncodeHelper); + function replaceRootLevelYamlVariables(yamlVariables: { [k: string]: any }, yamlTemplate: string) { if (Object.keys(yamlVariables).length === 0 || !yamlTemplate) { return yamlTemplate; diff --git a/x-pack/plugins/fleet/server/services/epm/archive/cache.ts b/x-pack/plugins/fleet/server/services/epm/archive/cache.ts index db0b0d709e683..15f38ccc8a68b 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/cache.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/cache.ts @@ -8,19 +8,10 @@ import type { ArchivePackage, RegistryPackage, PackageVerificationResult } from '../../../types'; import { appContextService } from '../..'; -import type { ArchiveEntry } from '.'; - type SharedKeyString = string; const sharedKey = ({ name, version }: SharedKey): SharedKeyString => `${name}-${version}`; -const archiveEntryCache: Map = new Map(); -export const getArchiveEntry = (key: string) => archiveEntryCache.get(key); -export const setArchiveEntry = (key: string, value: Buffer) => archiveEntryCache.set(key, value); -export const hasArchiveEntry = (key: string) => archiveEntryCache.has(key); -export const clearArchiveEntries = () => archiveEntryCache.clear(); -export const deleteArchiveEntry = (key: string) => archiveEntryCache.delete(key); - const verificationResultCache: Map = new Map(); export const getVerificationResult = (key: SharedKey) => verificationResultCache.get(sharedKey(key)); @@ -37,36 +28,12 @@ export interface SharedKey { version: string; } -const archiveFilelistCache: Map = new Map(); -export const getArchiveFilelist = (keyArgs: SharedKey) => - archiveFilelistCache.get(sharedKey(keyArgs)); - -export const setArchiveFilelist = (keyArgs: SharedKey, paths: string[]) => { - const logger = appContextService.getLogger(); - logger.debug(`Setting file list to the cache for ${keyArgs.name}-${keyArgs.version}`); - logger.trace(JSON.stringify(paths)); - return archiveFilelistCache.set(sharedKey(keyArgs), paths); -}; - -export const deleteArchiveFilelist = (keyArgs: SharedKey) => - archiveFilelistCache.delete(sharedKey(keyArgs)); - const packageInfoCache: Map = new Map(); export const getPackageInfo = (args: SharedKey) => { return packageInfoCache.get(sharedKey(args)); }; -export const getArchivePackage = (args: SharedKey) => { - const packageInfo = getPackageInfo(args); - const paths = getArchiveFilelist(args); - if (!paths || !packageInfo) return undefined; - return { - paths, - packageInfo, - }; -}; - /* * This cache should only be used to store "full" package info generated from the package archive. * NOT package info from the EPR API. This is because we parse extra fields from the archive @@ -85,11 +52,3 @@ export const setPackageInfo = ({ }; export const deletePackageInfo = (args: SharedKey) => packageInfoCache.delete(sharedKey(args)); - -export const clearPackageFileCache = (args: SharedKey) => { - const fileList = getArchiveFilelist(args) ?? []; - fileList.forEach((filePath) => { - deleteArchiveEntry(filePath); - }); - deleteArchiveFilelist(args); -}; diff --git a/x-pack/plugins/fleet/server/services/epm/archive/index.ts b/x-pack/plugins/fleet/server/services/epm/archive/index.ts index ec19fbba55a19..5943f8f838fcb 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/index.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/index.ts @@ -5,23 +5,14 @@ * 2.0. */ -import type { AssetParts } from '../../../../common/types'; +import type { AssetParts, AssetsMap } from '../../../../common/types'; import { PackageInvalidArchiveError, PackageUnsupportedMediaTypeError, PackageNotFoundError, } from '../../../errors'; -import { - getArchiveEntry, - setArchiveEntry, - deleteArchiveEntry, - getArchiveFilelist, - setArchiveFilelist, - deleteArchiveFilelist, - deletePackageInfo, - clearPackageFileCache, -} from './cache'; +import { deletePackageInfo } from './cache'; import type { SharedKey } from './cache'; import { getBufferExtractor } from './extract'; @@ -34,7 +25,7 @@ export interface ArchiveEntry { buffer?: Buffer; } -export async function unpackBufferToCache({ +export async function unpackBufferToAssetsMap({ name, version, contentType, @@ -44,22 +35,20 @@ export async function unpackBufferToCache({ version: string; contentType: string; archiveBuffer: Buffer; -}): Promise { +}): Promise<{ paths: string[]; assetsMap: AssetsMap }> { + const assetsMap = new Map(); + const paths: string[] = []; const entries = await unpackBufferEntries(archiveBuffer, contentType); - // Make sure any buffers from previous installations from registry or upload are deleted first - clearPackageFileCache({ name, version }); - const paths: string[] = []; entries.forEach((entry) => { const { path, buffer } = entry; if (buffer) { - setArchiveEntry(path, buffer); + assetsMap.set(path, buffer); paths.push(path); } }); - setArchiveFilelist({ name, version }, paths); - return paths; + return { assetsMap, paths }; } export async function unpackBufferEntries( @@ -94,16 +83,6 @@ export async function unpackBufferEntries( } export const deletePackageCache = ({ name, version }: SharedKey) => { - // get cached archive filelist - const paths = getArchiveFilelist({ name, version }); - - // delete cached archive filelist - deleteArchiveFilelist({ name, version }); - - // delete cached archive files - // this has been populated in unpackBufferToCache() - paths?.forEach(deleteArchiveEntry); - deletePackageInfo({ name, version }); }; @@ -151,8 +130,8 @@ export function getPathParts(path: string): AssetParts { } as AssetParts; } -export function getAsset(key: string) { - const buffer = getArchiveEntry(key); +export function getAssetFromAssetsMap(assetsMap: AssetsMap, key: string) { + const buffer = assetsMap.get(key); if (buffer === undefined) throw new PackageNotFoundError(`Cannot find asset ${key}`); return buffer; diff --git a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts index 81d55c5fd3138..dd6321445df75 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/storage.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/storage.ts @@ -23,7 +23,7 @@ import { PackageInvalidArchiveError, PackageNotFoundError } from '../../../error import { appContextService } from '../../app_context'; -import { getArchiveEntry, setArchiveEntry, setArchiveFilelist, setPackageInfo } from '.'; +import { setPackageInfo } from '.'; import type { ArchiveEntry } from '.'; import { filterAssetPathForParseAndVerifyArchive, parseAndVerifyArchive } from './parse'; @@ -104,16 +104,17 @@ export async function removeArchiveEntries(opts: { ); } -export async function saveArchiveEntries(opts: { +export async function saveArchiveEntriesFromAssetsMap(opts: { savedObjectsClient: SavedObjectsClientContract; paths: string[]; + assetsMap: Map; packageInfo: InstallablePackage; installSource: InstallSource; }) { - const { savedObjectsClient, paths, packageInfo, installSource } = opts; + const { savedObjectsClient, paths, packageInfo, assetsMap, installSource } = opts; const bulkBody = await Promise.all( paths.map((path) => { - const buffer = getArchiveEntry(path); + const buffer = assetsMap.get(path); if (!buffer) throw new PackageNotFoundError(`Could not find ArchiveEntry at ${path}`); const { name, version } = packageInfo; return archiveEntryToBulkCreateObject({ path, buffer, name, version, installSource }); @@ -208,26 +209,26 @@ export const getEsPackage = async ( return undefined; } - const assetsMap: Record = {}; + const parseAndVerifyAssetsMap: Record = {}; + const assetsMap = new Map(); const entries: ArchiveEntry[] = assets.map(packageAssetToArchiveEntry); const paths: string[] = []; entries.forEach(({ path, buffer }) => { if (path && buffer) { - setArchiveEntry(path, buffer); + assetsMap.set(path, buffer); paths.push(path); } if (buffer && filterAssetPathForParseAndVerifyArchive(path)) { - assetsMap[path] = buffer; + parseAndVerifyAssetsMap[path] = buffer; } }); - // Add asset references to cache - setArchiveFilelist({ name: pkgName, version: pkgVersion }, paths); - const packageInfo = parseAndVerifyArchive(paths, assetsMap); + const packageInfo = parseAndVerifyArchive(paths, parseAndVerifyAssetsMap); setPackageInfo({ name: pkgName, version: pkgVersion, packageInfo }); return { packageInfo, paths, + assetsMap, }; }; diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/datastream_ilm/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/datastream_ilm/install.ts index c6be2dfedb1df..78db39b48cfd6 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/datastream_ilm/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/datastream_ilm/install.ts @@ -7,14 +7,13 @@ import type { ElasticsearchClient, Logger, SavedObjectsClientContract } from '@kbn/core/server'; -import { ElasticsearchAssetType } from '../../../../../common/types/models'; -import type { - EsAssetReference, - InstallablePackage, - RegistryDataStream, +import { + ElasticsearchAssetType, + type PackageInstallContext, } from '../../../../../common/types/models'; +import type { EsAssetReference, RegistryDataStream } from '../../../../../common/types/models'; import { updateEsAssetReferences } from '../../packages/install'; -import { getAsset } from '../transform/common'; +import { getAssetFromAssetsMap } from '../../archive'; import { getESAssetMetadata } from '../meta'; import { retryTransientEsErrors } from '../retry'; @@ -32,13 +31,13 @@ interface IlmPathDataset { } export const installIlmForDataStream = async ( - registryPackage: InstallablePackage, - paths: string[], + packageInstallContext: PackageInstallContext, esClient: ElasticsearchClient, savedObjectsClient: SavedObjectsClientContract, logger: Logger, esReferences: EsAssetReference[] ) => { + const { packageInfo: registryPackage, paths, assetsMap } = packageInstallContext; const previousInstalledIlmEsAssets = esReferences.filter( ({ type }) => type === ElasticsearchAssetType.dataStreamIlmPolicy ); @@ -100,7 +99,9 @@ export const installIlmForDataStream = async ( const ilmInstallations: IlmInstallation[] = ilmPathDatasets.map( (ilmPathDataset: IlmPathDataset) => { - const content = JSON.parse(getAsset(ilmPathDataset.path).toString('utf-8')); + const content = JSON.parse( + getAssetFromAssetsMap(assetsMap, ilmPathDataset.path).toString('utf-8') + ); content.policy._meta = getESAssetMetadata({ packageName: registryPackage.name }); return { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ilm/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ilm/install.ts index 61a75d28b7999..08feb1e95585a 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ilm/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ilm/install.ts @@ -7,28 +7,31 @@ import type { ElasticsearchClient, Logger, SavedObjectsClientContract } from '@kbn/core/server'; -import type { EsAssetReference, InstallablePackage } from '../../../../types'; +import type { EsAssetReference } from '../../../../types'; import { ElasticsearchAssetType } from '../../../../types'; -import { getAsset, getPathParts } from '../../archive'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; import { updateEsAssetReferences } from '../../packages/install'; import { getESAssetMetadata } from '../meta'; import { retryTransientEsErrors } from '../retry'; import { PackageInvalidArchiveError } from '../../../../errors'; +import type { PackageInstallContext } from '../../../../../common/types'; export async function installILMPolicy( - packageInfo: InstallablePackage, - paths: string[], + packageInstallContext: PackageInstallContext, esClient: ElasticsearchClient, savedObjectsClient: SavedObjectsClientContract, logger: Logger, esReferences: EsAssetReference[] ): Promise { - const ilmPaths = paths.filter((path) => isILMPolicy(path)); + const { packageInfo } = packageInstallContext; + const ilmPaths = packageInstallContext.paths.filter((path) => isILMPolicy(path)); if (!ilmPaths.length) return esReferences; const ilmPolicies = ilmPaths.map((path) => { - const body = JSON.parse(getAsset(path).toString('utf-8')); + const body = JSON.parse( + getAssetFromAssetsMap(packageInstallContext.assetsMap, path).toString('utf-8') + ); body.policy._meta = getESAssetMetadata({ packageName: packageInfo.name }); diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.test.ts index 7ea61bde7a0e8..fb12d58878d1d 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.test.ts @@ -7,19 +7,15 @@ import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { loggerMock } from '@kbn/logging-mocks'; -import { getArchiveEntry } from '../../archive/cache'; - import { prepareToInstallPipelines } from './install'; jest.mock('../../archive/cache'); -const mockedGetArchiveEntry = getArchiveEntry as jest.MockedFunction; - describe('Install pipeline tests', () => { describe('prepareToInstallPipelines', () => { it('should work with datastream without ingest pipeline define in the package', async () => { - const res = prepareToInstallPipelines( - { + const res = prepareToInstallPipelines({ + packageInfo: { version: '1.0.0', data_streams: [ { @@ -29,9 +25,10 @@ describe('Install pipeline tests', () => { path: '/datasettest', }, ], - } as any, - [] - ); + }, + paths: [], + assetsMap: new Map(), + } as any); expect(res.assetsToAdd).toEqual([{ id: 'logs-datasettest-1.0.0', type: 'ingest_pipeline' }]); const esClient = elasticsearchClientMock.createInternalClient(); @@ -50,8 +47,8 @@ describe('Install pipeline tests', () => { }); it('should work with datastream with ingest pipelines define in the package', async () => { - const res = prepareToInstallPipelines( - { + const res = prepareToInstallPipelines({ + packageInfo: { version: '1.0.0', data_streams: [ { @@ -62,12 +59,22 @@ describe('Install pipeline tests', () => { ingest_pipeline: 'default', }, ], - } as any, - [ + }, + paths: [ 'packagetest-1.0.0/data_stream/datasettest/elasticsearch/ingest_pipeline/default.yml', 'packagetest-1.0.0/data_stream/datasettest/elasticsearch/ingest_pipeline/standard.yml', - ] - ); + ], + assetsMap: new Map([ + [ + 'packagetest-1.0.0/data_stream/datasettest/elasticsearch/ingest_pipeline/default.yml', + Buffer.from('description: test'), + ], + [ + 'packagetest-1.0.0/data_stream/datasettest/elasticsearch/ingest_pipeline/standard.yml', + Buffer.from('description: test'), + ], + ]), + } as any); expect(res.assetsToAdd).toEqual([ { id: 'logs-datasettest-1.0.0', type: 'ingest_pipeline' }, { id: 'logs-datasettest-1.0.0-standard', type: 'ingest_pipeline' }, @@ -76,8 +83,6 @@ describe('Install pipeline tests', () => { const esClient = elasticsearchClientMock.createInternalClient(); const logger = loggerMock.create(); - mockedGetArchiveEntry.mockReturnValue(Buffer.from(`description: test`)); - await res.install(esClient, logger); expect(esClient.ingest.putPipeline).toBeCalledTimes(2); diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts index e30bc5b32a771..a456734747324 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ingest_pipeline/install.ts @@ -15,7 +15,7 @@ import type { InstallablePackage, PackageInfo, } from '../../../../types'; -import { getAsset, getPathParts } from '../../archive'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; import type { ArchiveEntry } from '../../archive'; import { FLEET_FINAL_PIPELINE_CONTENT, @@ -23,6 +23,7 @@ import { FLEET_FINAL_PIPELINE_VERSION, } from '../../../../constants'; import { getPipelineNameForDatastream } from '../../../../../common/services'; +import type { PackageInstallContext } from '../../../../../common/types'; import { appendMetadataToIngestPipeline } from '../meta'; import { retryTransientEsErrors } from '../retry'; @@ -36,18 +37,18 @@ import { import type { PipelineInstall, RewriteSubstitution } from './types'; export const prepareToInstallPipelines = ( - installablePackage: InstallablePackage | PackageInfo, - paths: string[], + packageInstallContext: PackageInstallContext, onlyForDataStreams?: RegistryDataStream[] ): { assetsToAdd: EsAssetReference[]; install: (esClient: ElasticsearchClient, logger: Logger) => Promise; } => { + const { packageInfo, paths } = packageInstallContext; // unlike other ES assets, pipeline names are versioned so after a template is updated // it can be created pointing to the new template, without removing the old one and effecting data // so do not remove the currently installed pipelines here - const dataStreams = onlyForDataStreams || installablePackage.data_streams; - const { version: pkgVersion } = installablePackage; + const dataStreams = onlyForDataStreams || packageInfo.data_streams; + const { version: pkgVersion } = packageInfo; const pipelinePaths = paths.filter((path) => isPipeline(path)); const topLevelPipelinePaths = paths.filter((path) => isTopLevelPipeline(path)); @@ -108,7 +109,7 @@ export const prepareToInstallPipelines = ( esClient, logger, paths: pipelinePaths, - installablePackage, + packageInstallContext, }) ); @@ -123,7 +124,7 @@ export const prepareToInstallPipelines = ( esClient, logger, paths: topLevelPipelinePaths, - installablePackage, + packageInstallContext, }) ); } @@ -138,13 +139,13 @@ export async function installAllPipelines({ logger, paths, dataStream, - installablePackage, + packageInstallContext, }: { esClient: ElasticsearchClient; logger: Logger; paths: string[]; dataStream?: RegistryDataStream; - installablePackage: InstallablePackage | PackageInfo; + packageInstallContext: PackageInstallContext; }): Promise { const pipelinePaths = dataStream ? paths.filter((path) => isDataStreamPipeline(path, dataStream.path)) @@ -164,9 +165,9 @@ export async function installAllPipelines({ const nameForInstallation = getPipelineNameForInstallation({ pipelineName: name, dataStream, - packageVersion: installablePackage.version, + packageVersion: packageInstallContext.packageInfo.version, }); - const content = getAsset(path).toString('utf-8'); + const content = getAssetFromAssetsMap(packageInstallContext.assetsMap, path).toString('utf-8'); pipelinesInfos.push({ nameForInstallation, shouldInstallCustomPipelines: dataStream && isMainPipeline, @@ -191,7 +192,7 @@ export async function installAllPipelines({ if (!datastreamPipelineCreated && dataStream) { const nameForInstallation = getPipelineNameForDatastream({ dataStream, - packageVersion: installablePackage.version, + packageVersion: packageInstallContext.packageInfo.version, }); pipelinesToInstall.push({ @@ -204,7 +205,12 @@ export async function installAllPipelines({ } const installationPromises = pipelinesToInstall.map(async (pipeline) => { - return installPipeline({ esClient, pipeline, installablePackage, logger }); + return installPipeline({ + esClient, + pipeline, + packageInfo: packageInstallContext.packageInfo, + logger, + }); }); return Promise.all(installationPromises); @@ -214,18 +220,18 @@ async function installPipeline({ esClient, logger, pipeline, - installablePackage, + packageInfo, shouldAddCustomPipelineProcessor = true, }: { esClient: ElasticsearchClient; logger: Logger; pipeline: PipelineInstall; - installablePackage?: InstallablePackage | PackageInfo; + packageInfo?: InstallablePackage | PackageInfo; shouldAddCustomPipelineProcessor?: boolean; }): Promise { let pipelineToInstall = appendMetadataToIngestPipeline({ pipeline, - packageName: installablePackage?.name, + packageName: packageInfo?.name, }); if (shouldAddCustomPipelineProcessor) { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ml_model/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ml_model/install.ts index 630433e18ce39..d48a65dc593ef 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/ml_model/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/ml_model/install.ts @@ -8,33 +8,35 @@ import type { ElasticsearchClient, Logger, SavedObjectsClientContract } from '@kbn/core/server'; import { errors } from '@elastic/elasticsearch'; -import { getPathParts } from '../../archive'; -import { ElasticsearchAssetType } from '../../../../../common/types/models'; -import type { EsAssetReference, InstallablePackage } from '../../../../../common/types/models'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; +import { + ElasticsearchAssetType, + type PackageInstallContext, +} from '../../../../../common/types/models'; +import type { EsAssetReference } from '../../../../../common/types/models'; import { retryTransientEsErrors } from '../retry'; import { updateEsAssetReferences } from '../../packages/install'; -import { getAsset } from './common'; - interface MlModelInstallation { installationName: string; content: string; } export const installMlModel = async ( - installablePackage: InstallablePackage, - paths: string[], + packageInstallContext: PackageInstallContext, esClient: ElasticsearchClient, savedObjectsClient: SavedObjectsClientContract, logger: Logger, esReferences: EsAssetReference[] ) => { - const mlModelPath = paths.find((path) => isMlModel(path)); + const mlModelPath = packageInstallContext.paths.find((path) => isMlModel(path)); if (mlModelPath !== undefined) { - const content = getAsset(mlModelPath).toString('utf-8'); + const content = getAssetFromAssetsMap(packageInstallContext.assetsMap, mlModelPath).toString( + 'utf-8' + ); const pathParts = mlModelPath.split('/'); const modelId = pathParts[pathParts.length - 1].replace('.json', ''); @@ -46,7 +48,7 @@ export const installMlModel = async ( // get and save ml model refs before installing ml model esReferences = await updateEsAssetReferences( savedObjectsClient, - installablePackage.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToAdd: [mlModelRef] } ); diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts index 321e832115cf0..61edf78ec497e 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts @@ -7,7 +7,7 @@ import { createAppContextStartContractMock } from '../../../../mocks'; import { appContextService } from '../../..'; import { loadFieldsFromYaml } from '../../fields/field'; -import type { ArchivePackage, RegistryDataStream } from '../../../../types'; +import type { PackageInstallContext, RegistryDataStream } from '../../../../../common/types'; import { prepareTemplate, prepareToInstallTemplates } from './install'; @@ -19,6 +19,9 @@ jest.mock('../../fields/field', () => ({ const mockedLoadFieldsFromYaml = loadFieldsFromYaml as jest.MockedFunction< typeof loadFieldsFromYaml >; +const packageInstallContext = { + packageInfo: { name: 'package', version: '0.0.1' }, +} as PackageInstallContext; describe('EPM index template install', () => { beforeEach(async () => { @@ -43,15 +46,12 @@ describe('EPM index template install', () => { path: 'path', ingest_pipeline: 'default', } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; + const templateIndexPatternDatasetIsPrefixUnset = 'metrics-package.dataset-*'; const templatePriorityDatasetIsPrefixUnset = 200; const { indexTemplate: { indexTemplate }, - } = prepareTemplate({ pkg, dataStream: dataStreamDatasetIsPrefixUnset }); + } = prepareTemplate({ packageInstallContext, dataStream: dataStreamDatasetIsPrefixUnset }); expect(indexTemplate.priority).toBe(templatePriorityDatasetIsPrefixUnset); expect(indexTemplate.index_patterns).toEqual([templateIndexPatternDatasetIsPrefixUnset]); }); @@ -67,15 +67,12 @@ describe('EPM index template install', () => { ingest_pipeline: 'default', dataset_is_prefix: false, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; + const templateIndexPatternDatasetIsPrefixFalse = 'metrics-package.dataset-*'; const templatePriorityDatasetIsPrefixFalse = 200; const { indexTemplate: { indexTemplate }, - } = prepareTemplate({ pkg, dataStream: dataStreamDatasetIsPrefixFalse }); + } = prepareTemplate({ packageInstallContext, dataStream: dataStreamDatasetIsPrefixFalse }); expect(indexTemplate.priority).toBe(templatePriorityDatasetIsPrefixFalse); expect(indexTemplate.index_patterns).toEqual([templateIndexPatternDatasetIsPrefixFalse]); @@ -92,15 +89,12 @@ describe('EPM index template install', () => { ingest_pipeline: 'default', dataset_is_prefix: true, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; + const templateIndexPatternDatasetIsPrefixTrue = 'metrics-package.dataset.*-*'; const templatePriorityDatasetIsPrefixTrue = 150; const { indexTemplate: { indexTemplate }, - } = prepareTemplate({ pkg, dataStream: dataStreamDatasetIsPrefixTrue }); + } = prepareTemplate({ packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue }); expect(indexTemplate.priority).toBe(templatePriorityDatasetIsPrefixTrue); expect(indexTemplate.index_patterns).toEqual([templateIndexPatternDatasetIsPrefixTrue]); @@ -120,13 +114,9 @@ describe('EPM index template install', () => { source_mode: 'synthetic', }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue, }); @@ -154,13 +144,9 @@ describe('EPM index template install', () => { index_mode: 'time_series', }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue, }); @@ -188,13 +174,9 @@ describe('EPM index template install', () => { index_mode: 'time_series', }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue, experimentalDataStreamFeature: { data_stream: 'metrics-package.dataset', @@ -230,13 +212,9 @@ describe('EPM index template install', () => { source_mode: 'synthetic', }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue, experimentalDataStreamFeature: { data_stream: 'metrics-package.dataset', @@ -272,13 +250,9 @@ describe('EPM index template install', () => { index_mode: 'time_series', }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; const { indexTemplate } = prepareTemplate({ - pkg, + packageInstallContext, dataStream: dataStreamDatasetIsPrefixTrue, }); @@ -307,13 +281,8 @@ describe('EPM index template install', () => { }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; - const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream, }); @@ -352,13 +321,8 @@ describe('EPM index template install', () => { }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; - const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream, }); @@ -401,13 +365,8 @@ describe('EPM index template install', () => { }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; - const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream, }); @@ -441,13 +400,8 @@ describe('EPM index template install', () => { }, } as RegistryDataStream; - const pkg = { - name: 'package', - version: '0.0.1', - }; - const { componentTemplates } = prepareTemplate({ - pkg, + packageInstallContext, dataStream, }); @@ -469,10 +423,12 @@ describe('EPM index template install', () => { const { assetsToAdd } = prepareToInstallTemplates( { - name: 'package', - version: '0.0.1', - data_streams: [dataStreamDatasetIsPrefixUnset], - } as ArchivePackage, + packageInfo: { + name: 'package', + version: '0.0.1', + data_streams: [dataStreamDatasetIsPrefixUnset], + }, + } as PackageInstallContext, [], [] ); diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts index 2e67c70874e4e..d6825668d1a44 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts @@ -23,33 +23,29 @@ import type { RegistryDataStream, IndexTemplateEntry, RegistryElasticsearch, - InstallablePackage, IndexTemplate, IndexTemplateMappings, TemplateMapEntry, TemplateMap, EsAssetReference, - PackageInfo, ExperimentalDataStreamFeature, } from '../../../../types'; import { loadFieldsFromYaml, processFields } from '../../fields/field'; -import { getAsset, getPathParts } from '../../archive'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; import { FLEET_COMPONENT_TEMPLATES, PACKAGE_TEMPLATE_SUFFIX, USER_SETTINGS_TEMPLATE_SUFFIX, STACK_COMPONENT_TEMPLATES, } from '../../../../constants'; - import { getESAssetMetadata } from '../meta'; import { retryTransientEsErrors } from '../retry'; - import { applyDocOnlyValueToMapping, forEachMappings, } from '../../../experimental_datastream_features_helper'; - import { appContextService } from '../../../app_context'; +import type { PackageInstallContext } from '../../../../../common/types'; import { generateMappings, @@ -63,8 +59,7 @@ import { buildDefaultSettings } from './default_settings'; const FLEET_COMPONENT_TEMPLATE_NAMES = FLEET_COMPONENT_TEMPLATES.map((tmpl) => tmpl.name); export const prepareToInstallTemplates = ( - installablePackage: InstallablePackage | PackageInfo, - paths: string[], + packageInstallContext: PackageInstallContext, esReferences: EsAssetReference[], experimentalDataStreamFeatures: ExperimentalDataStreamFeature[] = [], onlyForDataStreams?: RegistryDataStream[] @@ -73,6 +68,7 @@ export const prepareToInstallTemplates = ( assetsToRemove: EsAssetReference[]; install: (esClient: ElasticsearchClient, logger: Logger) => Promise; } => { + const { packageInfo } = packageInstallContext; // remove package installation's references to index templates const assetsToRemove = esReferences.filter( ({ type }) => @@ -81,7 +77,7 @@ export const prepareToInstallTemplates = ( ); // build templates per data stream from yml files - const dataStreams = onlyForDataStreams || installablePackage.data_streams; + const dataStreams = onlyForDataStreams || packageInfo.data_streams; if (!dataStreams) return { assetsToAdd: [], assetsToRemove, install: () => Promise.resolve([]) }; const templates = dataStreams.map((dataStream) => { @@ -90,7 +86,7 @@ export const prepareToInstallTemplates = ( datastreamFeature.data_stream === getRegistryDataStreamAssetBaseName(dataStream) ); - return prepareTemplate({ pkg: installablePackage, dataStream, experimentalDataStreamFeature }); + return prepareTemplate({ packageInstallContext, dataStream, experimentalDataStreamFeature }); }); const assetsToAdd = getAllTemplateRefs(templates.map((template) => template.indexTemplate)); @@ -102,8 +98,8 @@ export const prepareToInstallTemplates = ( // install any pre-built index template assets, // atm, this is only the base package's global index templates // Install component templates first, as they are used by the index templates - await installPreBuiltComponentTemplates(paths, esClient, logger); - await installPreBuiltTemplates(paths, esClient, logger); + await installPreBuiltComponentTemplates(packageInstallContext, esClient, logger); + await installPreBuiltTemplates(packageInstallContext, esClient, logger); await Promise.all( templates.map((template) => @@ -122,15 +118,17 @@ export const prepareToInstallTemplates = ( }; const installPreBuiltTemplates = async ( - paths: string[], + packageInstallContext: PackageInstallContext, esClient: ElasticsearchClient, logger: Logger ) => { - const templatePaths = paths.filter((path) => isTemplate(path)); + const templatePaths = packageInstallContext.paths.filter((path) => isTemplate(path)); const templateInstallPromises = templatePaths.map(async (path) => { const { file } = getPathParts(path); const templateName = file.substr(0, file.lastIndexOf('.')); - const content = JSON.parse(getAsset(path).toString('utf8')); + const content = JSON.parse( + getAssetFromAssetsMap(packageInstallContext.assetsMap, path).toString('utf8') + ); const esClientParams = { name: templateName, body: content }; const esClientRequestOptions = { ignore: [404] }; @@ -159,15 +157,17 @@ const installPreBuiltTemplates = async ( }; const installPreBuiltComponentTemplates = async ( - paths: string[], + packageInstallContext: PackageInstallContext, esClient: ElasticsearchClient, logger: Logger ) => { - const templatePaths = paths.filter((path) => isComponentTemplate(path)); + const templatePaths = packageInstallContext.paths.filter((path) => isComponentTemplate(path)); const templateInstallPromises = templatePaths.map(async (path) => { const { file } = getPathParts(path); const templateName = file.substr(0, file.lastIndexOf('.')); - const content = JSON.parse(getAsset(path).toString('utf8')); + const content = JSON.parse( + getAssetFromAssetsMap(packageInstallContext.assetsMap, path).toString('utf8') + ); const esClientParams = { name: templateName, @@ -518,16 +518,16 @@ export async function ensureAliasHasWriteIndex(opts: { } export function prepareTemplate({ - pkg, + packageInstallContext, dataStream, experimentalDataStreamFeature, }: { - pkg: Pick; + packageInstallContext: PackageInstallContext; dataStream: RegistryDataStream; experimentalDataStreamFeature?: ExperimentalDataStreamFeature; }): { componentTemplates: TemplateMap; indexTemplate: IndexTemplateEntry } { - const { name: packageName, version: packageVersion } = pkg; - const fields = loadFieldsFromYaml(pkg, dataStream.path); + const { name: packageName, version: packageVersion } = packageInstallContext.packageInfo; + const fields = loadFieldsFromYaml(packageInstallContext, dataStream.path); const isIndexModeTimeSeries = dataStream.elasticsearch?.index_mode === 'time_series' || diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/common.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/common.ts index 46e85d7f9df62..b3ee4179d1256 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/common.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/common.ts @@ -5,8 +5,6 @@ * 2.0. */ -export { getAsset } from '../../archive'; - // Index alias that points to just one destination index from the latest package version export const TRANSFORM_DEST_IDX_ALIAS_LATEST_SFX = '.latest'; // Index alias that points to all of the destination indices from all the package versions diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/install.ts index 984a88d87e61f..2afe341485139 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/install.ts @@ -29,8 +29,11 @@ import { isFields, processFields } from '../../fields/field'; import { generateMappings } from '../template/template'; import { getESAssetMetadata } from '../meta'; import { updateEsAssetReferences } from '../../packages/install'; -import { getPathParts } from '../../archive'; -import { ElasticsearchAssetType } from '../../../../../common/types/models'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; +import { + ElasticsearchAssetType, + type PackageInstallContext, +} from '../../../../../common/types/models'; import type { EsAssetReference, InstallablePackage, @@ -42,7 +45,6 @@ import { getInstallation } from '../../packages'; import { retryTransientEsErrors } from '../retry'; import { deleteTransforms } from './remove'; -import { getAsset } from './common'; import { getDestinationIndexAliases } from './transform_utils'; const DEFAULT_TRANSFORM_TEMPLATES_PRIORITY = 250; @@ -69,7 +71,7 @@ interface TransformInstallation extends TransformModuleBase { } const installLegacyTransformsAssets = async ( - installablePackage: InstallablePackage, + packageInstallContext: PackageInstallContext, installNameSuffix: string, transformPaths: string[], esClient: ElasticsearchClient, @@ -89,7 +91,11 @@ const installLegacyTransformsAssets = async ( if (transformPaths.length > 0) { const transformRefs = transformPaths.reduce((acc, path) => { acc.push({ - id: getLegacyTransformNameForInstallation(installablePackage, path, installNameSuffix), + id: getLegacyTransformNameForInstallation( + packageInstallContext.packageInfo, + path, + installNameSuffix + ), type: ElasticsearchAssetType.transform, }); @@ -99,7 +105,7 @@ const installLegacyTransformsAssets = async ( // get and save transform refs before installing transforms esReferences = await updateEsAssetReferences( savedObjectsClient, - installablePackage.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToAdd: transformRefs, @@ -107,12 +113,14 @@ const installLegacyTransformsAssets = async ( ); const transforms: TransformInstallation[] = transformPaths.map((path: string) => { - const content = JSON.parse(getAsset(path).toString('utf-8')); - content._meta = getESAssetMetadata({ packageName: installablePackage.name }); + const content = JSON.parse( + getAssetFromAssetsMap(packageInstallContext.assetsMap, path).toString('utf-8') + ); + content._meta = getESAssetMetadata({ packageName: packageInstallContext.packageInfo.name }); return { installationName: getLegacyTransformNameForInstallation( - installablePackage, + packageInstallContext.packageInfo, path, installNameSuffix ), @@ -130,7 +138,7 @@ const installLegacyTransformsAssets = async ( if (previousInstalledTransformEsAssets.length > 0) { esReferences = await updateEsAssetReferences( savedObjectsClient, - installablePackage.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToRemove: previousInstalledTransformEsAssets, @@ -142,13 +150,14 @@ const installLegacyTransformsAssets = async ( }; const processTransformAssetsPerModule = ( - installablePackage: InstallablePackage, + packageInstallContext: PackageInstallContext, installNameSuffix: string, transformPaths: string[], previousInstalledTransformEsAssets: EsAssetReference[] = [], force?: boolean, username?: string ) => { + const { assetsMap, packageInfo: installablePackage } = packageInstallContext; const transformsSpecifications = new Map(); const destinationIndexTemplates: DestinationIndexTemplateInstallation[] = []; const transforms: TransformInstallation[] = []; @@ -169,7 +178,7 @@ const processTransformAssetsPerModule = ( } const packageAssets = transformsSpecifications.get(transformModuleId); - const content = safeLoad(getAsset(path).toString('utf-8')); + const content = safeLoad(getAssetFromAssetsMap(assetsMap, path).toString('utf-8')); // Handling fields.yml and all other files within 'fields' folder if (fileName === TRANSFORM_SPECS_TYPES.FIELDS || isFields(path)) { @@ -399,7 +408,7 @@ const processTransformAssetsPerModule = ( }; const installTransformsAssets = async ( - installablePackage: InstallablePackage, + packageInstallContext: PackageInstallContext, installNameSuffix: string, transformPaths: string[], esClient: ElasticsearchClient, @@ -425,7 +434,7 @@ const installTransformsAssets = async ( transformsToRemove, transformsToRemoveWithDestIndex, } = processTransformAssetsPerModule( - installablePackage, + packageInstallContext, installNameSuffix, transformPaths, previousInstalledTransformEsAssets, @@ -441,8 +450,8 @@ const installTransformsAssets = async ( ? await generateTransformSecondaryAuthHeaders({ authorizationHeader, logger, - pkgName: installablePackage.name, - pkgVersion: installablePackage.version, + pkgName: packageInstallContext.packageInfo.name, + pkgVersion: packageInstallContext.packageInfo.version, username, }) : // No need to generate api key/secondary auth if all transforms are run as kibana_system user @@ -469,7 +478,7 @@ const installTransformsAssets = async ( // get and save refs associated with the transforms before installing esReferences = await updateEsAssetReferences( savedObjectsClient, - installablePackage.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToAdd: [ @@ -504,7 +513,7 @@ const installTransformsAssets = async ( mappings: customMappings, templateName: destinationIndexTemplate.installationName, registryElasticsearch, - packageName: installablePackage.name, + packageName: packageInstallContext.packageInfo.name, defaultSettings: { // Adding destination pipeline here because else these templates will be overridden // by index setting @@ -579,7 +588,7 @@ const installTransformsAssets = async ( // get and save refs associated with the transforms before installing esReferences = await updateEsAssetReferences( savedObjectsClient, - installablePackage.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToRemove: installedTransforms, @@ -593,8 +602,7 @@ const installTransformsAssets = async ( }; interface InstallTransformsParams { - installablePackage: InstallablePackage; - paths: string[]; + packageInstallContext: PackageInstallContext; esClient: ElasticsearchClient; savedObjectsClient: SavedObjectsClientContract; logger: Logger; @@ -611,8 +619,7 @@ interface InstallTransformsParams { authorizationHeader?: HTTPAuthorizationHeader | null; } export const installTransforms = async ({ - installablePackage, - paths, + packageInstallContext, esClient, savedObjectsClient, logger, @@ -620,11 +627,12 @@ export const installTransforms = async ({ esReferences, authorizationHeader, }: InstallTransformsParams) => { + const { paths, packageInfo } = packageInstallContext; const transformPaths = paths.filter((path) => isTransform(path)); const installation = await getInstallation({ savedObjectsClient, - pkgName: installablePackage.name, + pkgName: packageInfo.name, }); esReferences = esReferences ?? installation?.installed_es ?? []; let previousInstalledTransformEsAssets: EsAssetReference[] = []; @@ -641,12 +649,12 @@ export const installTransforms = async ({ } } - const installNameSuffix = `${installablePackage.version}`; + const installNameSuffix = `${packageInfo.version}`; // If package contains legacy transform specifications (i.e. with json instead of yml) if (transformPaths.some((p) => p.endsWith('.json')) || transformPaths.length === 0) { return await installLegacyTransformsAssets( - installablePackage, + packageInstallContext, installNameSuffix, transformPaths, esClient, @@ -659,7 +667,7 @@ export const installTransforms = async ({ // If package contains yml transform specifications return await installTransformsAssets( - installablePackage, + packageInstallContext, installNameSuffix, transformPaths, esClient, diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/legacy_transforms.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/legacy_transforms.test.ts index c652bee50d815..72474d3081f39 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/legacy_transforms.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/legacy_transforms.test.ts @@ -12,12 +12,6 @@ jest.mock('../../packages/get', () => { return { getInstallation: jest.fn(), getInstallationObject: jest.fn() }; }); -jest.mock('./common', () => { - return { - getAsset: jest.fn(), - }; -}); - import { errors } from '@elastic/elasticsearch'; import type { SavedObject, SavedObjectsClientContract } from '@kbn/core/server'; import { loggerMock } from '@kbn/logging-mocks'; @@ -26,15 +20,15 @@ import { savedObjectsClientMock } from '@kbn/core/server/mocks'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { getInstallation, getInstallationObject } from '../../packages'; -import type { Installation, RegistryPackage } from '../../../../types'; +import type { Installation } from '../../../../types'; import { ElasticsearchAssetType } from '../../../../types'; import { appContextService } from '../../../app_context'; import { getESAssetMetadata } from '../meta'; +import type { PackageInstallContext } from '../../../../../common/types'; import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../constants'; -import { getAsset } from './common'; import { installTransforms } from './install'; describe('test transform install with legacy schema', () => { @@ -92,10 +86,6 @@ describe('test transform install with legacy schema', () => { }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from('{"content": "data"}', 'utf8')) - .mockReturnValueOnce(Buffer.from('{"content": "data"}', 'utf8')); - (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -123,45 +113,61 @@ describe('test transform install with legacy schema', () => { }); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - data_streams: [ - { - type: 'metrics', - dataset: 'endpoint.metadata', - title: 'Endpoint Metadata', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + data_streams: [ + { + type: 'metrics', + dataset: 'endpoint.metadata', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata', }, - path: 'metadata', - }, - { - type: 'metrics', - dataset: 'endpoint.metadata_current', - title: 'Endpoint Metadata Current', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + { + type: 'metrics', + dataset: 'endpoint.metadata_current', + title: 'Endpoint Metadata Current', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata_current', }, - path: 'metadata_current', - }, + ], + }, + paths: [ + 'endpoint-0.16.0-dev.0/data_stream/policy/elasticsearch/ingest_pipeline/default.json', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata/default.json', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', ], - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/data_stream/policy/elasticsearch/ingest_pipeline/default.json', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata/default.json', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', - ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/data_stream/policy/elasticsearch/ingest_pipeline/default.json', + Buffer.from('{"content": "data"}'), + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata/default.json', + Buffer.from('{"content": "data"}'), + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', + Buffer.from('{"content": "data"}'), + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -288,9 +294,6 @@ describe('test transform install with legacy schema', () => { }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction).mockReturnValueOnce( - Buffer.from('{"content": "data"}', 'utf8') - ); (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -304,27 +307,35 @@ describe('test transform install with legacy schema', () => { ); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - data_streams: [ - { - type: 'metrics', - dataset: 'endpoint.metadata_current', - title: 'Endpoint Metadata', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + data_streams: [ + { + type: 'metrics', + dataset: 'endpoint.metadata_current', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata_current', }, - path: 'metadata_current', - }, - ], - } as unknown as RegistryPackage, - paths: ['endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json'], + ], + }, + paths: ['endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json'], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', + Buffer.from('{"content": "data"}'), + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -406,41 +417,43 @@ describe('test transform install with legacy schema', () => { }); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - data_streams: [ - { - type: 'metrics', - dataset: 'endpoint.metadata', - title: 'Endpoint Metadata', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + data_streams: [ + { + type: 'metrics', + dataset: 'endpoint.metadata', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata', }, - path: 'metadata', - }, - { - type: 'metrics', - dataset: 'endpoint.metadata_current', - title: 'Endpoint Metadata Current', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + { + type: 'metrics', + dataset: 'endpoint.metadata_current', + title: 'Endpoint Metadata Current', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata_current', }, - path: 'metadata_current', - }, - ], - } as unknown as RegistryPackage, - paths: [], + ], + }, + paths: [], + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -495,9 +508,6 @@ describe('test transform install with legacy schema', () => { }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction).mockReturnValueOnce( - Buffer.from('{"content": "data"}', 'utf8') - ); (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -522,27 +532,35 @@ describe('test transform install with legacy schema', () => { ); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - data_streams: [ - { - type: 'metrics', - dataset: 'endpoint.metadata_current', - title: 'Endpoint Metadata', - release: 'experimental', - package: 'endpoint', - ingest_pipeline: 'default', - elasticsearch: { - 'index_template.mappings': { - dynamic: false, + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + data_streams: [ + { + type: 'metrics', + dataset: 'endpoint.metadata_current', + title: 'Endpoint Metadata', + release: 'experimental', + package: 'endpoint', + ingest_pipeline: 'default', + elasticsearch: { + 'index_template.mappings': { + dynamic: false, + }, }, + path: 'metadata_current', }, - path: 'metadata_current', - }, - ], - } as unknown as RegistryPackage, - paths: ['endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json'], + ], + }, + paths: ['endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json'], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', + Buffer.from('{"content": "data"}'), + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transforms.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transforms.test.ts index 6ab6f20669baf..80efd5a08e446 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transforms.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transforms.test.ts @@ -14,7 +14,7 @@ import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-m import { HTTPAuthorizationHeader } from '../../../../../common/http_authorization_header'; import { getInstallation, getInstallationObject } from '../../packages'; -import type { Installation, RegistryPackage } from '../../../../types'; +import type { Installation } from '../../../../types'; import { ElasticsearchAssetType } from '../../../../types'; import { appContextService } from '../../../app_context'; @@ -23,20 +23,14 @@ import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../constants'; import { getESAssetMetadata } from '../meta'; import { createAppContextStartContractMock } from '../../../../mocks'; +import type { PackageInstallContext } from '../../../../../common/types'; import { installTransforms } from './install'; -import { getAsset } from './common'; jest.mock('../../packages/get', () => { return { getInstallation: jest.fn(), getInstallationObject: jest.fn() }; }); -jest.mock('./common', () => { - return { - getAsset: jest.fn(), - }; -}); - const meta = getESAssetMetadata({ packageName: 'endpoint' }); describe('test transform install', () => { @@ -236,13 +230,6 @@ _meta: }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.BEATS_FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.AGENT_FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.MANIFEST, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); - (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -271,17 +258,41 @@ _meta: }); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/beats.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/agent.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/beats.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/agent.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/beats.yml', + sourceData.BEATS_FIELDS, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/agent.yml', + sourceData.AGENT_FIELDS, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + sourceData.FIELDS, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + sourceData.MANIFEST, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + sourceData.TRANSFORM, + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -530,10 +541,6 @@ _meta: }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.MANIFEST, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) @@ -563,15 +570,31 @@ _meta: }); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + Buffer.from(sourceData.FIELDS), + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + Buffer.from(sourceData.MANIFEST), + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + Buffer.from(sourceData.TRANSFORM), + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -810,10 +833,6 @@ _meta: }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); - (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -842,14 +861,26 @@ _meta: }); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + Buffer.from(sourceData.FIELDS), + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + Buffer.from(sourceData.TRANSFORM), + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -1052,9 +1083,6 @@ _meta: }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.MANIFEST, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) @@ -1069,14 +1097,26 @@ _meta: ); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + sourceData.MANIFEST, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + sourceData.TRANSFORM, + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -1134,9 +1174,6 @@ _meta: }, ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.MANIFEST, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) @@ -1162,14 +1199,26 @@ _meta: ); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + sourceData.MANIFEST, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + sourceData.TRANSFORM, + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), @@ -1229,11 +1278,6 @@ _meta: ], } as unknown as Installation; - (getAsset as jest.MockedFunction) - .mockReturnValueOnce(Buffer.from(sourceData.FIELDS, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.MANIFEST, 'utf8')) - .mockReturnValueOnce(Buffer.from(sourceData.TRANSFORM, 'utf8')); - (getInstallation as jest.MockedFunction) .mockReturnValueOnce(Promise.resolve(previousInstallation)) .mockReturnValueOnce(Promise.resolve(currentInstallation)); @@ -1247,15 +1291,31 @@ _meta: ); await installTransforms({ - installablePackage: { - name: 'endpoint', - version: '0.16.0-dev.0', - } as unknown as RegistryPackage, - paths: [ - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', - 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', - ], + packageInstallContext: { + packageInfo: { + name: 'endpoint', + version: '0.16.0-dev.0', + }, + paths: [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + ], + assetsMap: new Map([ + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/fields/fields.yml', + sourceData.FIELDS, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/manifest.yml', + sourceData.MANIFEST, + ], + [ + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/transform.yml', + sourceData.TRANSFORM, + ], + ]), + } as unknown as PackageInstallContext, esClient, savedObjectsClient, logger: loggerMock.create(), diff --git a/x-pack/plugins/fleet/server/services/epm/fields/field.ts b/x-pack/plugins/fleet/server/services/epm/fields/field.ts index 495c0ddcaaf8a..859752d5dead1 100644 --- a/x-pack/plugins/fleet/server/services/epm/fields/field.ts +++ b/x-pack/plugins/fleet/server/services/epm/fields/field.ts @@ -7,8 +7,8 @@ import { safeLoad } from 'js-yaml'; -import type { PackageInfo } from '../../../types'; -import { getAssetsData } from '../packages/assets'; +import type { PackageInstallContext } from '../../../../common/types'; +import { getAssetsDataFromAssetsMap } from '../packages/assets'; // This should become a copy of https://github.com/elastic/beats/blob/d9a4c9c240a9820fab15002592e5bb6db318543b/libbeat/mapping/field.go#L39 export interface Field { @@ -296,11 +296,16 @@ export const isFields = (path: string) => { */ export const loadFieldsFromYaml = ( - pkg: Pick, + packageInstallContext: PackageInstallContext, datasetName?: string ): Field[] => { // Fetch all field definition files - const fieldDefinitionFiles = getAssetsData(pkg, isFields, datasetName); + const fieldDefinitionFiles = getAssetsDataFromAssetsMap( + packageInstallContext.packageInfo, + packageInstallContext.assetsMap, + isFields, + datasetName + ); return fieldDefinitionFiles.reduce((acc, file) => { // Make sure it is defined as it is optional. Should never happen. if (file.buffer) { 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 27be17ef2a170..47c4da20b9d05 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 @@ -22,7 +22,7 @@ import { partition } from 'lodash'; import type { IAssignmentService, ITagsClient } from '@kbn/saved-objects-tagging-plugin/server'; import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../../common'; -import { getAsset, getPathParts } from '../../archive'; +import { getAssetFromAssetsMap, getPathParts } from '../../archive'; import { KibanaAssetType, KibanaSavedObjectType } from '../../../../types'; import type { AssetType, @@ -32,6 +32,7 @@ import type { PackageSpecTags, } from '../../../../types'; import { savedObjectTypes } from '../../packages'; +import type { PackageInstallContext } from '../../../../../common/types'; import { indexPatternTypes, getIndexPatternSavedObjects, @@ -88,13 +89,6 @@ const AssetFilters: Record ArchiveAsse [KibanaAssetType.indexPattern]: removeReservedIndexPatterns, }; -export async function getKibanaAsset(key: string): Promise { - const buffer = getAsset(key); - - // cache values are buffers. convert to string / JSON - return JSON.parse(buffer.toString('utf8')); -} - export function createSavedObjectKibanaAsset(asset: ArchiveAsset): SavedObjectToBe { // convert that to an object const so: Partial = { @@ -177,6 +171,7 @@ export async function installKibanaAssetsAndReferences({ logger, pkgName, pkgTitle, + packageInstallContext, paths, installedPkg, spaceId, @@ -189,12 +184,13 @@ export async function installKibanaAssetsAndReferences({ logger: Logger; pkgName: string; pkgTitle: string; + packageInstallContext: PackageInstallContext; paths: string[]; installedPkg?: SavedObject; spaceId: string; assetTags?: PackageSpecTags[]; }) { - const kibanaAssets = await getKibanaAssets(paths); + const kibanaAssets = await getKibanaAssets(packageInstallContext); if (installedPkg) await deleteKibanaSavedObjectsAssets({ savedObjectsClient, installedPkg }); // save new kibana refs before installing the assets const installedKibanaAssetsRefs = await saveKibanaAssetsRefs( @@ -241,7 +237,7 @@ export const deleteKibanaInstalledRefs = async ( }); }; export async function getKibanaAssets( - paths: string[] + packageInstallContext: PackageInstallContext ): Promise> { const kibanaAssetTypes = Object.values(KibanaAssetType); const isKibanaAssetType = (path: string) => { @@ -250,7 +246,7 @@ export async function getKibanaAssets( return parts.service === 'kibana' && (kibanaAssetTypes as string[]).includes(parts.type); }; - const filteredPaths = paths + const filteredPaths = packageInstallContext.paths .filter(isKibanaAssetType) .map<[string, AssetParts]>((path) => [path, getPathParts(path)]); @@ -258,7 +254,16 @@ export async function getKibanaAssets( for (const assetType of kibanaAssetTypes) { const matching = filteredPaths.filter(([path, parts]) => parts.type === assetType); - assetArrays.push(Promise.all(matching.map(([path]) => path).map(getKibanaAsset))); + assetArrays.push( + Promise.all( + matching.map(([path]) => { + const buffer = getAssetFromAssetsMap(packageInstallContext.assetsMap, path); + + // cache values are buffers. convert to string / JSON + return JSON.parse(buffer.toString('utf8')); + }) + ) + ); } const resolvedAssets = await Promise.all(assetArrays); diff --git a/x-pack/plugins/fleet/server/services/epm/package_service.test.ts b/x-pack/plugins/fleet/server/services/epm/package_service.test.ts index 9da46439a53c7..8bd2ace1d760c 100644 --- a/x-pack/plugins/fleet/server/services/epm/package_service.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/package_service.test.ts @@ -34,6 +34,9 @@ import * as epmPackagesInstall from './packages/install'; import * as epmRegistry from './registry'; import * as epmTransformsInstall from './elasticsearch/transform/install'; import * as epmArchiveParse from './archive/parse'; +import { getEsPackage } from './archive/storage'; + +jest.mock('./archive/storage'); const mockGetAuthzFromRequest = getAuthzFromRequest as jest.Mock; const testKeys = [ @@ -141,8 +144,9 @@ function getTest( spy: jest.spyOn(epmTransformsInstall, 'installTransforms'), spyArgs: [ { - installablePackage: pkg, - paths, + packageInstallContext: expect.objectContaining({ + paths, + }), esClient: mocks.esClient, savedObjectsClient: mocks.soClient, logger: mocks.logger, @@ -257,6 +261,12 @@ describe('PackageService', () => { testKey ); spy.mockResolvedValue(spyResponse); + if (testKey === 'reinstallEsAssets') { + jest + .mocked(epmPackagesGet.getInstallation) + .mockResolvedValue({ name: 'package name' } as any); + jest.mocked(getEsPackage).mockResolvedValue({ name: 'package name' } as any); + } await expect(method(...args)).resolves.toEqual(expectedReturnValue); expect(spy).toHaveBeenCalledWith(...spyArgs); @@ -277,6 +287,12 @@ describe('PackageService', () => { testKey ); spy.mockResolvedValue(spyResponse); + if (testKey === 'reinstallEsAssets') { + jest + .mocked(epmPackagesGet.getInstallation) + .mockResolvedValue({ name: 'package name' } as any); + jest.mocked(getEsPackage).mockResolvedValue({ name: 'package name' } as any); + } await expect(method(...args)).resolves.toEqual(expectedReturnValue); expect(spy).toHaveBeenCalledWith(...spyArgs); diff --git a/x-pack/plugins/fleet/server/services/epm/package_service.ts b/x-pack/plugins/fleet/server/services/epm/package_service.ts index a535af9636d1a..b7174fa7883e7 100644 --- a/x-pack/plugins/fleet/server/services/epm/package_service.ts +++ b/x-pack/plugins/fleet/server/services/epm/package_service.ts @@ -31,7 +31,7 @@ import type { } from '../../types'; import type { FleetAuthzRouteConfig } from '../security/types'; import { checkSuperuser, doesNotHaveRequiredFleetAuthz, getAuthzFromRequest } from '../security'; -import { FleetError, FleetUnauthorizedError } from '../../errors'; +import { FleetError, FleetUnauthorizedError, PackageNotFoundError } from '../../errors'; import { INSTALL_PACKAGES_AUTHZ, READ_PACKAGE_INFO_AUTHZ } from '../../routes/epm'; import type { InstallResult } from '../../../common'; @@ -43,6 +43,7 @@ import { fetchFindLatestPackageOrThrow, getPackage } from './registry'; import { installTransforms, isTransform } from './elasticsearch/transform/install'; import { ensureInstalledPackage, getInstallation, getPackages, installPackage } from './packages'; import { generatePackageInfoFromArchiveBuffer } from './archive'; +import { getEsPackage } from './archive/storage'; export type InstalledAssetType = EsAssetReference; @@ -265,9 +266,31 @@ class PackageClientImpl implements PackageClient { async #reinstallTransforms(packageInfo: InstallablePackage, paths: string[]) { const authorizationHeader = this.getAuthorizationHeader(); + const installation = await this.getInstallation(packageInfo.name); + + if (!installation) { + throw new PackageNotFoundError(`Installation not found for package: ${packageInfo.name}`); + } + + const esPackage = await getEsPackage( + packageInfo.name, + packageInfo.version, + installation.package_assets ?? [], + this.internalSoClient + ); + + if (!esPackage) { + throw new PackageNotFoundError(`ES package not found for package: ${packageInfo.name}`); + } + + const { assetsMap } = esPackage; + const { installedTransforms } = await installTransforms({ - installablePackage: packageInfo, - paths, + packageInstallContext: { + assetsMap, + packageInfo, + paths, + }, esClient: this.internalEsClient, savedObjectsClient: this.internalSoClient, logger: this.logger, diff --git a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.test.ts index 4402db72b86a9..d6d653fd98c4e 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.test.ts @@ -22,7 +22,7 @@ import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../common'; import { appContextService } from '../../app_context'; import { createAppContextStartContractMock } from '../../../mocks'; -import { saveArchiveEntries } from '../archive/storage'; +import { saveArchiveEntriesFromAssetsMap } from '../archive/storage'; import { installILMPolicy } from '../elasticsearch/ilm/install'; import { installIlmForDataStream } from '../elasticsearch/datastream_ilm/install'; @@ -69,6 +69,9 @@ describe('_installPackage', () => { soClient.update.mockImplementation(async (type, id, attributes) => { return { id, attributes } as any; }); + soClient.get.mockImplementation(async (type, id) => { + return { id, attributes: {} } as any; + }); esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; appContextService.start(createAppContextStartContractMock()); @@ -78,7 +81,7 @@ describe('_installPackage', () => { esReferences: [], installedIlms: [], }); - jest.mocked(saveArchiveEntries).mockResolvedValue({ + jest.mocked(saveArchiveEntriesFromAssetsMap).mockResolvedValue({ saved_objects: [], }); jest.mocked(restartInstallation).mockReset(); @@ -103,18 +106,21 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - 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' }, + 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', @@ -160,18 +166,21 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - 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' }, + 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', @@ -219,18 +228,21 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - 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' }, + 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', @@ -288,12 +300,15 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - paths: [], - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, + packageInstallContext: { + paths: [], + assetsMap: new Map(), + packageInfo: { + name: mockInstalledPackageSo.attributes.name, + version: mockInstalledPackageSo.attributes.version, + title: mockInstalledPackageSo.attributes.name, + } as any, + }, installedPkg: { ...mockInstalledPackageSo, attributes: { @@ -319,12 +334,15 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - paths: [], - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, + packageInstallContext: { + paths: [], + assetsMap: new Map(), + packageInfo: { + name: mockInstalledPackageSo.attributes.name, + version: mockInstalledPackageSo.attributes.version, + title: mockInstalledPackageSo.attributes.name, + } as any, + }, installedPkg: { ...mockInstalledPackageSo, attributes: { @@ -345,12 +363,15 @@ describe('_installPackage', () => { savedObjectsImporter: jest.fn(), esClient, logger: loggerMock.create(), - paths: [], - packageInfo: { - name: mockInstalledPackageSo.attributes.name, - version: mockInstalledPackageSo.attributes.version, - title: mockInstalledPackageSo.attributes.name, - } as any, + packageInstallContext: { + paths: [], + assetsMap: new Map(), + packageInfo: { + name: mockInstalledPackageSo.attributes.name, + version: mockInstalledPackageSo.attributes.version, + title: mockInstalledPackageSo.attributes.name, + } as any, + }, installedPkg: { ...mockInstalledPackageSo, attributes: { 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 8f45e8eee6b13..6c30d3a8d332d 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 @@ -17,7 +17,7 @@ import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { IAssignmentService, ITagsClient } from '@kbn/saved-objects-tagging-plugin/server'; import type { HTTPAuthorizationHeader } from '../../../../common/http_authorization_header'; - +import type { PackageInstallContext } from '../../../../common/types'; import { getNormalizedDataStreams } from '../../../../common/services'; import { @@ -31,7 +31,6 @@ import type { AssetReference, Installation, InstallType, - InstallablePackage, InstallSource, PackageAssetReference, PackageVerificationResult, @@ -45,7 +44,7 @@ import { updateCurrentWriteIndices } from '../elasticsearch/template/template'; import { installTransforms } from '../elasticsearch/transform/install'; import { installMlModel } from '../elasticsearch/ml_model'; import { installIlmForDataStream } from '../elasticsearch/datastream_ilm/install'; -import { saveArchiveEntries } from '../archive/storage'; +import { saveArchiveEntriesFromAssetsMap } from '../archive/storage'; import { ConcurrentInstallOperationError } from '../../../errors'; import { appContextService, packagePolicyService } from '../..'; @@ -70,8 +69,7 @@ export async function _installPackage({ esClient, logger, installedPkg, - paths, - packageInfo, + packageInstallContext, installType, installSource, spaceId, @@ -88,8 +86,7 @@ export async function _installPackage({ esClient: ElasticsearchClient; logger: Logger; installedPkg?: SavedObject; - paths: string[]; - packageInfo: InstallablePackage; + packageInstallContext: PackageInstallContext; installType: InstallType; installSource: InstallSource; spaceId: string; @@ -99,7 +96,9 @@ export async function _installPackage({ ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; }): Promise { + const { packageInfo, paths } = packageInstallContext; const { name: pkgName, version: pkgVersion, title: pkgTitle } = packageInfo; + try { // if some installation already exists if (installedPkg) { @@ -164,6 +163,7 @@ export async function _installPackage({ savedObjectTagClient, pkgName, pkgTitle, + packageInstallContext, paths, installedPkg, logger, @@ -187,13 +187,12 @@ export async function _installPackage({ appContextService.getConfig()?.internal?.disableILMPolicies ?? false; if (!isILMPoliciesDisabled) { esReferences = await withPackageSpan('Install ILM policies', () => - installILMPolicy(packageInfo, paths, esClient, savedObjectsClient, logger, esReferences) + installILMPolicy(packageInstallContext, esClient, savedObjectsClient, logger, esReferences) ); logger.debug(`Package install - Installing Data Stream ILM policies`); ({ esReferences } = await withPackageSpan('Install Data Stream ILM policies', () => installIlmForDataStream( - packageInfo, - paths, + packageInstallContext, esClient, savedObjectsClient, logger, @@ -205,7 +204,7 @@ export async function _installPackage({ // installs ml models logger.debug(`Package install - installing ML models`); esReferences = await withPackageSpan('Install ML models', () => - installMlModel(packageInfo, paths, esClient, savedObjectsClient, logger, esReferences) + installMlModel(packageInstallContext, esClient, savedObjectsClient, logger, esReferences) ); let indexTemplates: IndexTemplateEntry[] = []; @@ -217,8 +216,7 @@ export async function _installPackage({ const { installedTemplates, esReferences: templateEsReferences } = await installIndexTemplatesAndPipelines({ installedPkg: installedPkg ? installedPkg.attributes : undefined, - packageInfo, - paths, + packageInstallContext, esClient, savedObjectsClient, logger, @@ -249,8 +247,7 @@ export async function _installPackage({ const { installedTemplates, esReferences: templateEsReferences } = await installIndexTemplatesAndPipelines({ installedPkg: installedPkg ? installedPkg.attributes : undefined, - packageInfo, - paths, + packageInstallContext, esClient, savedObjectsClient, logger, @@ -280,8 +277,7 @@ export async function _installPackage({ logger.debug(`Package install - Installing transforms`); ({ esReferences } = await withPackageSpan('Install transforms', () => installTransforms({ - installablePackage: packageInfo, - paths, + packageInstallContext, esClient, savedObjectsClient, logger, @@ -331,9 +327,10 @@ export async function _installPackage({ const installedKibanaAssetsRefs = await kibanaAssetPromise; logger.debug(`Package install - Updating archive entries`); const packageAssetResults = await withPackageSpan('Update archive entries', () => - saveArchiveEntries({ + saveArchiveEntriesFromAssetsMap({ savedObjectsClient, - paths, + assetsMap: packageInstallContext.assetsMap, + paths: packageInstallContext.paths, packageInfo, installSource, }) @@ -351,7 +348,7 @@ export async function _installPackage({ savedObjectType: PACKAGES_SAVED_OBJECT_TYPE, }); logger.debug(`Package install - Updating install status`); - const updatedPackage = await withPackageSpan('Update install status', () => + await withPackageSpan('Update install status', () => savedObjectsClient.update(PACKAGES_SAVED_OBJECT_TYPE, pkgName, { version: pkgVersion, install_version: pkgVersion, @@ -364,8 +361,13 @@ export async function _installPackage({ ), }) ); - logger.debug(`Package install - Install status ${updatedPackage?.attributes?.install_status}`); + // Need to refetch the installation again to retrieve all the attributes + const updatedPackage = await savedObjectsClient.get( + PACKAGES_SAVED_OBJECT_TYPE, + pkgName + ); + logger.debug(`Package install - Install status ${updatedPackage?.attributes?.install_status}`); // If the package is flagged with the `keep_policies_up_to_date` flag, upgrade its // associated package policies after installation if (updatedPackage.attributes.keep_policies_up_to_date) { diff --git a/x-pack/plugins/fleet/server/services/epm/packages/assets.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/assets.test.ts index 1ed525a71b14f..fdddadddd46ec 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/assets.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/assets.test.ts @@ -7,19 +7,9 @@ import type { PackageInfo } from '../../../types'; -import { getArchiveFilelist } from '../archive/cache'; +import { getAssetsFromAssetsMap } from './assets'; -import { getAssets } from './assets'; - -jest.mock('../archive/cache', () => { - return { - getArchiveFilelist: jest.fn(), - }; -}); - -const mockedGetArchiveFilelist = getArchiveFilelist as jest.Mock; - -test('testGetAssets integration pkg', () => { +test('test getAssetsFromAssetsMap integration pkg', () => { const tests = [ { package: { @@ -60,27 +50,41 @@ test('testGetAssets integration pkg', () => { }, ]; - mockedGetArchiveFilelist.mockImplementation(() => [ - 'coredns-1.0.1/data_stream/log/elasticsearch/ingest-pipeline/pipeline-plaintext.json', - 'coredns-1.0.1/data_stream/log/elasticsearch/ingest-pipeline/pipeline-json.json', + const assetsMap = new Map([ + [ + 'coredns-1.0.1/data_stream/log/elasticsearch/ingest-pipeline/pipeline-plaintext.json', + Buffer.from('{}'), + ], + [ + 'coredns-1.0.1/data_stream/log/elasticsearch/ingest-pipeline/pipeline-json.json', + Buffer.from('{}'), + ], ]); + for (const value of tests) { // as needed to pretend it is an InstallablePackage - const assets = getAssets(value.package as PackageInfo, value.filter, value.dataset); + const assets = getAssetsFromAssetsMap( + value.package as PackageInfo, + assetsMap, + value.filter, + value.dataset + ); expect(assets).toStrictEqual(value.expected); } }); test('testGetAssets input pkg', () => { - mockedGetArchiveFilelist.mockImplementation(() => [ - 'input_package_upgrade-1.0.0/agent/input/input.yml.hbs', - 'input_package_upgrade-1.0.0/changelog.yml', - 'input_package_upgrade-1.0.0/docs/README.md', - 'input_package_upgrade-1.0.0/fields/input.yml', - 'input_package_upgrade-1.0.0/img/sample-logo.svg', - 'input_package_upgrade-1.0.0/img/sample-screenshot.png', - 'input_package_upgrade-1.0.0/manifest.yml', - ]); + const assetsMap = new Map( + [ + 'input_package_upgrade-1.0.0/agent/input/input.yml.hbs', + 'input_package_upgrade-1.0.0/changelog.yml', + 'input_package_upgrade-1.0.0/docs/README.md', + 'input_package_upgrade-1.0.0/fields/input.yml', + 'input_package_upgrade-1.0.0/img/sample-logo.svg', + 'input_package_upgrade-1.0.0/img/sample-screenshot.png', + 'input_package_upgrade-1.0.0/manifest.yml', + ].map((path) => [path, Buffer.from('{}')]) + ); const tests = [ { @@ -102,7 +106,12 @@ test('testGetAssets input pkg', () => { for (const value of tests) { // as needed to pretend it is an InstallablePackage - const assets = getAssets(value.package as PackageInfo, value.filter, value.dataset); + const assets = getAssetsFromAssetsMap( + value.package as PackageInfo, + assetsMap, + value.filter, + value.dataset + ); expect(assets).toStrictEqual(value.expected); } }); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/assets.ts b/x-pack/plugins/fleet/server/services/epm/packages/assets.ts index 89bd9b25af75a..a82b5c0d103b2 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/assets.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/assets.ts @@ -5,8 +5,8 @@ * 2.0. */ -import type { PackageInfo } from '../../../types'; -import { getArchiveFilelist, getAsset } from '../archive'; +import type { AssetsMap, PackageInfo } from '../../../types'; +import { getAssetFromAssetsMap } from '../archive'; import type { ArchiveEntry } from '../archive'; const maybeFilterByDataset = @@ -21,18 +21,13 @@ const maybeFilterByDataset = return comparePaths.some((comparePath) => path.includes(comparePath)); }; -// paths from RegistryPackage are routes to the assets on EPR -// e.g. `/package/nginx/1.2.0/data_stream/access/fields/fields.yml` -// paths for ArchiveEntry are routes to the assets in the archive -// e.g. `nginx-1.2.0/data_stream/access/fields/fields.yml` -// RegistryPackage paths have a `/package/` prefix compared to ArchiveEntry paths -// and different package and version structure -export function getAssets( +export function getAssetsFromAssetsMap( packageInfo: Pick, + assetsMap: AssetsMap, filter = (path: string): boolean => true, datasetName?: string ): string[] { - const paths = getArchiveFilelist(packageInfo); + const paths = [...assetsMap.keys()]; if (!paths || paths.length === 0) return []; @@ -46,15 +41,15 @@ export function getAssets( return assets.filter(filter); } -export function getAssetsData( +export function getAssetsDataFromAssetsMap( packageInfo: Pick, + assetsMap: AssetsMap, filter = (path: string): boolean => true, datasetName?: string -): ArchiveEntry[] { - // Gather all asset data - const assets = getAssets(packageInfo, filter, datasetName); +) { + const assets = getAssetsFromAssetsMap(packageInfo, assetsMap, filter, datasetName); const entries: ArchiveEntry[] = assets.map((path) => { - const buffer = getAsset(path); + const buffer = getAssetFromAssetsMap(assetsMap, path); return { path, buffer }; }); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts index 70cdd766b0a66..da5ee0bcc8e5c 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts @@ -19,7 +19,10 @@ import type { BulkInstallResponse, IBulkInstallPackageError } from './install'; interface BulkInstallPackagesParams { savedObjectsClient: SavedObjectsClientContract; - packagesToInstall: Array; + packagesToInstall: Array< + | string + | { name: string; version?: string; prerelease?: boolean; skipDataStreamRollover?: boolean } + >; esClient: ElasticsearchClient; force?: boolean; spaceId: string; @@ -48,10 +51,18 @@ export async function bulkInstallPackages({ name: pkgRes.name, version: pkgRes.version, prerelease: undefined, + skipDataStreamRollover: undefined, })); } if (pkg.version !== undefined) { - return Promise.resolve(pkg as { name: string; version: string; prerelease?: boolean }); + return Promise.resolve( + pkg as { + name: string; + version: string; + prerelease?: boolean; + skipDataStreamRollover?: boolean; + } + ); } return Registry.fetchFindLatestPackageOrThrow(pkg.name, { @@ -60,6 +71,7 @@ export async function bulkInstallPackages({ name: pkgRes.name, version: pkgRes.version, prerelease: pkg.prerelease, + skipDataStreamRollover: pkg.skipDataStreamRollover, })); }) ); @@ -114,6 +126,7 @@ export async function bulkInstallPackages({ force, prerelease: prerelease || ('prerelease' in pkgKeyProps && pkgKeyProps.prerelease), authorizationHeader, + skipDataStreamRollover: pkgKeyProps.skipDataStreamRollover, }); if (installResult.error) { diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts deleted file mode 100644 index e44f6e2b522d7..0000000000000 --- a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/cache.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { setArchiveEntry, setArchiveFilelist } from '../../../archive'; - -interface Assets { - path: string; - content: Buffer; -} -export const cacheAssets = (assets: Assets[], name: string, version: string) => { - const paths = assets.map((asset) => asset.path); - - setArchiveFilelist({ name, version }, paths); - - assets.forEach((asset) => { - setArchiveEntry(asset.path, asset.content); - }); - - return paths; -}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts index b261ccd65b5f9..66e220c328b5f 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.test.ts @@ -425,11 +425,53 @@ test: invalid manifest page: 1, }); - soClient.get.mockResolvedValue({ - id: 'elasticsearch', - attributes: {}, - references: [], - type: PACKAGES_SAVED_OBJECT_TYPE, + soClient.get.mockImplementation((type) => { + if (type === 'epm-packages-assets') { + return Promise.resolve({ + attributes: { + data_utf8: ` +name: elasticsearch +version: 0.0.1 +title: Elastic +description: Elasticsearch description`, + }, + } as any); + } else { + return Promise.resolve({ + id: 'elasticsearch', + attributes: { + name: 'elasticsearch', + version: '0.0.1', + install_source: 'upload', + package_assets: [], + data_utf8: ` + name: elasticsearch + version: 0.0.1 + title: Elastic + description: Elasticsearch description`, + }, + }); + } + }); + + soClient.bulkGet.mockResolvedValue({ + saved_objects: [ + { + id: 'test', + references: [], + type: 'epm-package-assets', + attributes: { + asset_path: 'elasticsearch-0.0.1/manifest.yml', + data_utf8: ` +name: elasticsearch +version: 0.0.1 +title: Elastic +description: Elasticsearch description +format_version: 0.0.1 +owner: elastic`, + }, + }, + ], }); await getPackages({ savedObjectsClient: soClient }); @@ -783,6 +825,7 @@ test: invalid manifest } as RegistryPackage); MockRegistry.getPackage.mockResolvedValue({ paths: [], + assetsMap: new Map(), packageInfo: { name: 'my-package', version: '1.0.0', diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.ts index a3ed5f62d7f1e..614fc8d636816 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.ts @@ -33,6 +33,7 @@ import type { PackageList, InstalledPackage, PackageSpecManifest, + AssetsMap, } from '../../../../common/types'; import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../constants'; import type { @@ -53,7 +54,6 @@ import { appContextService } from '../..'; import * as Registry from '../registry'; import type { PackageAsset } from '../archive/storage'; import { getEsPackage } from '../archive/storage'; -import { getArchivePackage } from '../archive'; import { normalizeKuery } from '../../saved_object'; import { auditLoggingService } from '../../audit_logging'; @@ -289,7 +289,7 @@ export async function getPackageSavedObjects( return result; } -export async function getInstalledPackageSavedObjects( +async function getInstalledPackageSavedObjects( savedObjectsClient: SavedObjectsClientContract, options: Omit ) { @@ -544,16 +544,6 @@ export async function getPackageFromSource(options: { // If the package is installed if (installedPkg && installedPkg.version === pkgVersion) { const { install_source: pkgInstallSource } = installedPkg; - // check cache - res = getArchivePackage({ - name: pkgName, - version: pkgVersion, - }); - - if (res) { - logger.debug(`retrieved installed package ${pkgName}-${pkgVersion} from cache`); - } - if (!res && installedPkg.package_assets) { res = await getEsPackage( pkgName, @@ -582,20 +572,14 @@ export async function getPackageFromSource(options: { } } } else { - res = getArchivePackage({ name: pkgName, version: pkgVersion }); - - if (res) { - logger.debug(`retrieved package ${pkgName}-${pkgVersion} from cache`); - } else { - try { - res = await Registry.getPackage(pkgName, pkgVersion, { ignoreUnverified }); - logger.debug(`retrieved package ${pkgName}-${pkgVersion} from registry`); - } catch (err) { - if (err instanceof RegistryResponseError && err.status === 404) { - res = await Registry.getBundledArchive(pkgName, pkgVersion); - } else { - throw err; - } + try { + res = await Registry.getPackage(pkgName, pkgVersion, { ignoreUnverified }); + logger.debug(`retrieved package ${pkgName}-${pkgVersion} from registry`); + } catch (err) { + if (err instanceof RegistryResponseError && err.status === 404) { + res = await Registry.getBundledArchive(pkgName, pkgVersion); + } else { + throw err; } } } @@ -634,7 +618,7 @@ export async function getInstallationObject(options: { return installation; } -export async function getInstallationObjects(options: { +async function getInstallationObjects(options: { savedObjectsClient: SavedObjectsClientContract; pkgNames: string[]; }) { @@ -665,6 +649,37 @@ export async function getInstallation(options: { return savedObject?.attributes; } +/** + * Return an installed package with his related assets + */ +export async function getInstalledPackageWithAssets(options: { + savedObjectsClient: SavedObjectsClientContract; + pkgName: string; + logger?: Logger; +}) { + const installation = await getInstallation(options); + if (!installation) { + return; + } + const esPackage = await getEsPackage( + installation.name, + installation.version, + installation.package_assets ?? [], + options.savedObjectsClient + ); + + if (!esPackage) { + return; + } + + return { + installation, + assetsMap: esPackage.assetsMap, + packageInfo: esPackage.packageInfo, + paths: esPackage.paths, + }; +} + export async function getInstallationsByName(options: { savedObjectsClient: SavedObjectsClientContract; pkgNames: string[]; @@ -682,3 +697,33 @@ function sortByName(a: { name: string }, b: { name: string }) { return 0; } } + +/** + * Return assets for an installed package from ES or from the registry otherwise + */ +export async function getPackageAssetsMap({ + savedObjectsClient, + packageInfo, + logger, +}: { + savedObjectsClient: SavedObjectsClientContract; + packageInfo: PackageInfo; + logger: Logger; +}) { + const installedPackageWithAssets = await getInstalledPackageWithAssets({ + savedObjectsClient, + pkgName: packageInfo.name, + logger, + }); + + let assetsMap: AssetsMap | undefined; + if (installedPackageWithAssets?.installation.version !== packageInfo.version) { + // Try to get from registry + const pkg = await Registry.getPackage(packageInfo.name, packageInfo.version); + assetsMap = pkg.assetsMap; + } else { + assetsMap = installedPackageWithAssets.assetsMap; + } + + return assetsMap; +} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get_template_inputs.ts b/x-pack/plugins/fleet/server/services/epm/packages/get_template_inputs.ts index 04c65535ad0ad..e81e280c4b943 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get_template_inputs.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get_template_inputs.ts @@ -11,7 +11,7 @@ import { safeDump } from 'js-yaml'; import { packageToPackagePolicy } from '../../../../common/services/package_to_package_policy'; import { getInputsWithStreamIds, _compilePackagePolicyInputs } from '../../package_policy'; - +import { appContextService } from '../../app_context'; import type { PackageInfo, NewPackagePolicy, @@ -22,6 +22,7 @@ import type { import { _sortYamlKeys } from '../../../../common/services/full_agent_policy_to_yaml'; import { getPackageInfo } from '.'; +import { getPackageAssetsMap } from './get'; type Format = 'yml' | 'json'; @@ -89,11 +90,16 @@ export async function getTemplateInputs( } const emptyPackagePolicy = packageToPackagePolicy(packageInfo, ''); const inputsWithStreamIds = getInputsWithStreamIds(emptyPackagePolicy, undefined, true); - + const assetsMap = await getPackageAssetsMap({ + logger: appContextService.getLogger(), + packageInfo, + savedObjectsClient: soClient, + }); const compiledInputs = await _compilePackagePolicyInputs( packageInfo, emptyPackagePolicy.vars || {}, - inputsWithStreamIds + inputsWithStreamIds, + assetsMap ); const packagePolicyWithInputs: NewPackagePolicy = { ...emptyPackagePolicy, 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 bfb99d0f17980..fc85609c4703c 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 @@ -28,6 +28,11 @@ import * as obj from '.'; jest.mock('../../app_context', () => { const logger = { error: jest.fn(), debug: jest.fn(), warn: jest.fn(), info: jest.fn() }; + const mockedSavedObjectTagging = { + createInternalAssignmentService: jest.fn(), + createTagClient: jest.fn(), + }; + return { appContextService: { getLogger: jest.fn(() => { @@ -38,13 +43,12 @@ jest.mock('../../app_context', () => { createImporter: jest.fn(), })), getConfig: jest.fn(() => ({})), - getSavedObjectsTagging: jest.fn(() => ({ - createInternalAssignmentService: jest.fn(), - createTagClient: jest.fn(), - })), + getSavedObjectsTagging: jest.fn(() => mockedSavedObjectTagging), + getInternalUserSOClientForSpaceId: jest.fn(), }, }; }); + jest.mock('.'); jest.mock('../registry', () => { return { @@ -73,7 +77,12 @@ jest.mock('../archive', () => { generatePackageInfoFromArchiveBuffer: jest.fn(() => Promise.resolve({ packageInfo: { name: 'apache', version: '1.3.0' } }) ), - unpackBufferToCache: jest.fn(), + unpackBufferToAssetsMap: jest.fn(() => + Promise.resolve({ + assetsMap: new Map(), + paths: [], + }) + ), setPackageInfo: jest.fn(), deleteVerificationResult: jest.fn(), }; @@ -145,6 +154,7 @@ describe('install', () => { mockGetBundledPackageByPkgKey.mockReset(); (install._installPackage as jest.Mock).mockClear(); + jest.mocked(appContextService.getInternalUserSOClientForSpaceId).mockReset(); }); describe('registry', () => { @@ -348,6 +358,38 @@ describe('install', () => { expect(response.status).toEqual('installed'); }); + + it('should use a scopped to package space soClient for tagging', async () => { + const mockedTaggingSo = savedObjectsClientMock.create(); + jest + .mocked(appContextService.getInternalUserSOClientForSpaceId) + .mockReturnValue(mockedTaggingSo); + jest + .spyOn(obj, 'getInstallationObject') + .mockImplementationOnce(() => Promise.resolve({ attributes: { version: '1.2.0' } } as any)); + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + await installPackage({ + spaceId: 'test', + installSource: 'registry', + pkgkey: 'apache-1.3.0', + savedObjectsClient: savedObjectsClientMock.create(), + esClient: {} as ElasticsearchClient, + }); + + expect(appContextService.getInternalUserSOClientForSpaceId).toBeCalledWith('test'); + expect(appContextService.getSavedObjectsTagging().createTagClient).toBeCalledWith( + expect.objectContaining({ + client: mockedTaggingSo, + }) + ); + expect( + appContextService.getSavedObjectsTagging().createInternalAssignmentService + ).toBeCalledWith( + expect.objectContaining({ + client: mockedTaggingSo, + }) + ); + }); }); describe('upload', () => { @@ -516,7 +558,9 @@ describe('handleInstallPackageFailure', () => { expect(install._installPackage).toBeCalledTimes(1); expect(install._installPackage).toBeCalledWith( expect.objectContaining({ - packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), + packageInstallContext: expect.objectContaining({ + packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), + }), }) ); }); @@ -560,7 +604,9 @@ describe('handleInstallPackageFailure', () => { expect(install._installPackage).toBeCalledTimes(1); expect(install._installPackage).toBeCalledWith( expect.objectContaining({ - packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), + packageInstallContext: expect.objectContaining({ + packageInfo: expect.objectContaining({ name: pkgName, version: '1.0.0' }), + }), }) ); }); 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 33f1b3a6ab73e..8dc9672f01ffc 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts @@ -16,25 +16,16 @@ import type { Logger, } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; - import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; - import pRetry from 'p-retry'; - import { uniqBy } from 'lodash'; - import type { LicenseType } from '@kbn/licensing-plugin/server'; -import type { PackageDataStreamTypes } from '../../../../common/types'; - +import type { PackageDataStreamTypes, PackageInstallContext } from '../../../../common/types'; import type { HTTPAuthorizationHeader } from '../../../../common/http_authorization_header'; - import { isPackagePrerelease, getNormalizedDataStreams } from '../../../../common/services'; - import { FLEET_INSTALL_FORMAT_VERSION } from '../../../constants/fleet_es_assets'; - import { generateESIndexPatterns } from '../elasticsearch/template/template'; - import type { ArchivePackage, BulkInstallPackageInfo, @@ -62,7 +53,6 @@ import { PackagePolicyValidationError, ConcurrentInstallOperationError, FleetUnauthorizedError, - PackageInvalidArchiveError, PackageNotFoundError, } from '../../../errors'; import { PACKAGES_SAVED_OBJECT_TYPE, MAX_TIME_COMPLETE_INSTALL } from '../../../constants'; @@ -72,29 +62,22 @@ import * as Registry from '../registry'; import { setPackageInfo, generatePackageInfoFromArchiveBuffer, - unpackBufferToCache, deleteVerificationResult, - getArchiveFilelist, + unpackBufferToAssetsMap, } from '../archive'; import { toAssetReference } from '../kibana/assets/install'; import type { ArchiveAsset } from '../kibana/assets/install'; - import type { PackageUpdateEvent } from '../../upgrade_sender'; import { sendTelemetryEvents, UpdateEventType } from '../../upgrade_sender'; - import { prepareToInstallPipelines } from '../elasticsearch/ingest_pipeline'; - import { prepareToInstallTemplates } from '../elasticsearch/template/install'; - import { auditLoggingService } from '../../audit_logging'; - import { getFilteredInstallPackages } from '../filtered_packages'; import { formatVerificationResultForSO } from './package_verification'; - import { getInstallation, getInstallationObject } from '.'; import { removeInstallation } from './remove'; -import { getPackageSavedObjects } from './get'; +import { getInstalledPackageWithAssets, getPackageSavedObjects } from './get'; import { _installPackage } from './_install_package'; import { removeOldAssets } from './cleanup'; import { getBundledPackageByPkgKey } from './bundled_packages'; @@ -102,7 +85,6 @@ import { withPackageSpan } from './utils'; import { convertStringToTitle, generateDescription } from './custom_integrations/utils'; import { INITIAL_VERSION } from './custom_integrations/constants'; import { createAssets } from './custom_integrations'; -import { cacheAssets } from './custom_integrations/assets/cache'; import { generateDatastreamEntries } from './custom_integrations/assets/dataset/utils'; import { checkForNamingCollision } from './custom_integrations/validation/check_naming_collision'; import { checkDatasetsNameFormat } from './custom_integrations/validation/check_dataset_name_format'; @@ -417,12 +399,19 @@ async function installPackageFromRegistry({ } // get latest package version and requested version in parallel for performance - const [latestPackage, { paths, packageInfo, verificationResult }] = await Promise.all([ - latestPkg ? Promise.resolve(latestPkg) : queryLatest(), - Registry.getPackage(pkgName, pkgVersion, { - ignoreUnverified: force && !neverIgnoreVerificationError, - }), - ]); + const [latestPackage, { paths, packageInfo, assetsMap, verificationResult }] = + await Promise.all([ + latestPkg ? Promise.resolve(latestPkg) : queryLatest(), + Registry.getPackage(pkgName, pkgVersion, { + ignoreUnverified: force && !neverIgnoreVerificationError, + }), + ]); + + const packageInstallContext: PackageInstallContext = { + packageInfo, + assetsMap, + paths, + }; // let the user install if using the force flag or needing to reinstall or install a previous version due to failed update const installOutOfDateVersionOk = @@ -453,7 +442,7 @@ async function installPackageFromRegistry({ esClient, spaceId, force, - packageInfo, + packageInstallContext, paths, verificationResult, authorizationHeader, @@ -489,7 +478,7 @@ async function installPackageCommon(options: { esClient: ElasticsearchClient; spaceId: string; force?: boolean; - packageInfo: ArchivePackage; + packageInstallContext: PackageInstallContext; paths: string[]; verificationResult?: PackageVerificationResult; telemetryEvent?: PackageUpdateEvent; @@ -497,6 +486,8 @@ async function installPackageCommon(options: { ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; }): Promise { + const packageInfo = options.packageInstallContext.packageInfo; + const { pkgName, pkgVersion, @@ -507,12 +498,11 @@ async function installPackageCommon(options: { force, esClient, spaceId, - packageInfo, - paths, verificationResult, authorizationHeader, ignoreMappingUpdateErrors, skipDataStreamRollover, + packageInstallContext, } = options; let { telemetryEvent } = options; const logger = appContextService.getLogger(); @@ -578,13 +568,16 @@ async function installPackageCommon(options: { .getSavedObjects() .createImporter(savedObjectsClient, { importSizeLimit: 15_000 }); + // Saved object client need to be scopped with the package space for saved object tagging + const savedObjectClientWithSpace = appContextService.getInternalUserSOClientForSpaceId(spaceId); + const savedObjectTagAssignmentService = appContextService .getSavedObjectsTagging() - .createInternalAssignmentService({ client: savedObjectsClient }); + .createInternalAssignmentService({ client: savedObjectClientWithSpace }); const savedObjectTagClient = appContextService .getSavedObjectsTagging() - .createTagClient({ client: savedObjectsClient }); + .createTagClient({ client: savedObjectClientWithSpace }); // try installing the package, if there was an error, call error handler and rethrow // @ts-expect-error status is string instead of InstallResult.status 'installed' | 'already_installed' @@ -596,8 +589,7 @@ async function installPackageCommon(options: { esClient, logger, installedPkg, - paths, - packageInfo, + packageInstallContext, installType, spaceId, verificationResult, @@ -688,20 +680,28 @@ async function installPackageByUpload({ // as we do not verify uploaded packages, we must invalidate the verification cache deleteVerificationResult(packageInfo); - const paths = await unpackBufferToCache({ + + setPackageInfo({ name: packageInfo.name, version: pkgVersion, - archiveBuffer, - contentType, + packageInfo, }); - setPackageInfo({ + const { assetsMap, paths } = await unpackBufferToAssetsMap({ name: packageInfo.name, version: pkgVersion, - packageInfo, + archiveBuffer, + contentType, }); + const packageInstallContext: PackageInstallContext = { + packageInfo: { ...packageInfo, version: pkgVersion }, + assetsMap, + paths, + }; + return await installPackageCommon({ + packageInstallContext, pkgName, pkgVersion, installSource, @@ -711,7 +711,6 @@ async function installPackageByUpload({ esClient, spaceId, force: true, // upload has implicit force - packageInfo, paths, authorizationHeader, ignoreMappingUpdateErrors, @@ -872,9 +871,20 @@ export async function installCustomPackage( datasets, }); - const paths = cacheAssets(assets, pkgName, INITIAL_VERSION); + const assetsMap = assets.reduce((acc, asset) => { + acc.set(asset.path, asset.content); + return acc; + }, new Map()); + const paths = [...Object.keys(assetsMap)]; + + const packageInstallContext: PackageInstallContext = { + assetsMap, + paths, + packageInfo, + }; return await installPackageCommon({ + packageInstallContext, pkgName, pkgVersion: INITIAL_VERSION, installSource: 'custom', @@ -883,7 +893,6 @@ export async function installCustomPackage( esClient, spaceId, force, - packageInfo, paths, authorizationHeader, }); @@ -1216,8 +1225,7 @@ export async function ensurePackagesCompletedInstall( export async function installIndexTemplatesAndPipelines({ installedPkg, - paths, - packageInfo, + packageInstallContext, esReferences, savedObjectsClient, esClient, @@ -1225,8 +1233,7 @@ export async function installIndexTemplatesAndPipelines({ onlyForDataStreams, }: { installedPkg?: Installation; - paths: string[]; - packageInfo: PackageInfo | InstallablePackage; + packageInstallContext: PackageInstallContext; esReferences: EsAssetReference[]; savedObjectsClient: SavedObjectsClientContract; esClient: ElasticsearchClient; @@ -1244,10 +1251,12 @@ export async function installIndexTemplatesAndPipelines({ */ const experimentalDataStreamFeatures = installedPkg?.experimental_data_stream_features ?? []; - const preparedIngestPipelines = prepareToInstallPipelines(packageInfo, paths, onlyForDataStreams); + const preparedIngestPipelines = prepareToInstallPipelines( + packageInstallContext, + onlyForDataStreams + ); const preparedIndexTemplates = prepareToInstallTemplates( - packageInfo, - paths, + packageInstallContext, esReferences, experimentalDataStreamFeatures, onlyForDataStreams @@ -1265,13 +1274,13 @@ export async function installIndexTemplatesAndPipelines({ // so we need to use optimistic concurrency control newEsReferences = await optimisticallyAddEsAssetReferences( savedObjectsClient, - packageInfo.name, + packageInstallContext.packageInfo.name, [...preparedIngestPipelines.assetsToAdd, ...preparedIndexTemplates.assetsToAdd] ); } else { newEsReferences = await updateEsAssetReferences( savedObjectsClient, - packageInfo.name, + packageInstallContext.packageInfo.name, esReferences, { assetsToRemove: preparedIndexTemplates.assetsToRemove, @@ -1312,9 +1321,6 @@ export async function installAssetsForInputPackagePolicy(opts: { if (pkgInfo.type !== 'input') return; - const paths = await getArchiveFilelist(pkgInfo); - if (!paths) throw new PackageInvalidArchiveError(`No paths found for ${pkgInfo.name}`); - const datasetName = packagePolicy.inputs[0].streams[0].vars?.[DATASET_VAR_NAME]?.value; const [dataStream] = getNormalizedDataStreams(pkgInfo, datasetName); const existingDataStreams = await dataStreamService.getMatchingDataStreams(esClient, { @@ -1370,20 +1376,39 @@ export async function installAssetsForInputPackagePolicy(opts: { } } - const installedPkg = await getInstallation({ + const installedPkgWithAssets = await getInstalledPackageWithAssets({ savedObjectsClient: soClient, pkgName: pkgInfo.name, logger, }); - if (!installedPkg) + let packageInstallContext: PackageInstallContext | undefined; + if (!installedPkgWithAssets) { throw new PackageNotFoundError( `Error while creating index templates: unable to find installed package ${pkgInfo.name}` ); + } + if (installedPkgWithAssets.installation.version !== pkgInfo.version) { + const pkg = await Registry.getPackage(pkgInfo.name, pkgInfo.version, { + ignoreUnverified: force, + }); + + packageInstallContext = { + assetsMap: pkg.assetsMap, + packageInfo: pkg.packageInfo, + paths: pkg.paths, + }; + } else { + packageInstallContext = { + assetsMap: installedPkgWithAssets.assetsMap, + packageInfo: installedPkgWithAssets.packageInfo, + paths: installedPkgWithAssets.paths, + }; + } + await installIndexTemplatesAndPipelines({ - installedPkg, - paths, - packageInfo: pkgInfo, - esReferences: installedPkg.installed_es || [], + installedPkg: installedPkgWithAssets.installation, + packageInstallContext, + esReferences: installedPkgWithAssets.installation.installed_es || [], savedObjectsClient: soClient, esClient, logger, diff --git a/x-pack/plugins/fleet/server/services/epm/registry/index.ts b/x-pack/plugins/fleet/server/services/epm/registry/index.ts index de513062f5873..97402447be716 100644 --- a/x-pack/plugins/fleet/server/services/epm/registry/index.ts +++ b/x-pack/plugins/fleet/server/services/epm/registry/index.ts @@ -26,16 +26,16 @@ import type { PackageVerificationResult, ArchivePackage, BundledPackage, + AssetsMap, } from '../../../types'; import { - getArchiveFilelist, getPathParts, - unpackBufferToCache, setVerificationResult, - getVerificationResult, getPackageInfo, setPackageInfo, generatePackageInfoFromArchiveBuffer, + unpackBufferToAssetsMap, + getVerificationResult, } from '../archive'; import { streamToBuffer, streamToString } from '../streams'; import { appContextService } from '../..'; @@ -319,16 +319,15 @@ export async function getPackage( ): Promise<{ paths: string[]; packageInfo: ArchivePackage; + assetsMap: AssetsMap; verificationResult?: PackageVerificationResult; }> { const verifyPackage = appContextService.getExperimentalFeatures().packageVerification; - let paths = getArchiveFilelist({ name, version }); - let packageInfo = getPackageInfo({ name, version }); - let verificationResult = verifyPackage ? getVerificationResult({ name, version }) : undefined; + let packageInfo: ArchivePackage | undefined = getPackageInfo({ name, version }); + let verificationResult: PackageVerificationResult | undefined = verifyPackage + ? getVerificationResult({ name, version }) + : undefined; - if (paths && packageInfo) { - return { paths, packageInfo, verificationResult }; - } const { archiveBuffer, archivePath, @@ -346,22 +345,19 @@ export async function getPackage( verificationResult = latestVerificationResult; setVerificationResult({ name, version }, latestVerificationResult); } - if (!paths || paths.length === 0) { - paths = await withPackageSpan('Unpack archive', () => - unpackBufferToCache({ - name, - version, - archiveBuffer, - contentType: ensureContentType(archivePath), - }) - ); - } + + const { assetsMap, paths } = await unpackBufferToAssetsMap({ + name, + version, + archiveBuffer, + contentType: ensureContentType(archivePath), + }); if (!packageInfo) { packageInfo = await getPackageInfoFromArchiveOrCache(name, version, archiveBuffer, archivePath); } - return { paths, packageInfo, verificationResult }; + return { paths, packageInfo, assetsMap, verificationResult }; } function ensureContentType(archivePath: string) { diff --git a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.test.ts b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.test.ts index 4fb8073ccbf00..fd914e5ce1f80 100644 --- a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.test.ts @@ -12,7 +12,7 @@ import { securityMock } from '@kbn/security-plugin/server/mocks'; import type { NewPackagePolicy, PackagePolicy } from '../../types'; import { appContextService } from '../app_context'; import { updateCurrentWriteIndices } from '../epm/elasticsearch/template/template'; -import { getInstallation } from '../epm/packages'; +import { getInstalledPackageWithAssets } from '../epm/packages/get'; import { handleExperimentalDatastreamFeatureOptIn } from './experimental_datastream_features'; @@ -34,6 +34,35 @@ jest.mock('../epm/packages', () => { }; }); +function mockGetInstalledPackageWithAssets(installation: any) { + jest.mocked(getInstalledPackageWithAssets).mockResolvedValue({ + packageInfo: { + name: 'test', + data_streams: [ + { + dataset: 'test', + type: 'metrics', + }, + ], + }, + installation, + } as any); +} + +jest.mock('../epm/packages/get', () => ({ + getInstalledPackageWithAssets: jest.fn().mockResolvedValue({ + packageInfo: { + name: 'test', + data_streams: [ + { + dataset: 'test', + type: 'metrics', + }, + ], + }, + }), +})); + jest.mock('../app_context'); const mockedAppContextService = appContextService as jest.Mocked; mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ @@ -41,9 +70,6 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ })); jest.mock('../epm/elasticsearch/template/template'); - -const mockGetInstallation = getInstallation as jest.Mock; - jest.mock('../epm/elasticsearch/template/install', () => { return { prepareTemplate: jest.fn().mockReturnValue({ @@ -214,7 +240,7 @@ describe('experimental_datastream_features', () => { describe('when package policy does not exist (create)', () => { beforeEach(() => { - mockGetInstallation.mockResolvedValueOnce({ + mockGetInstalledPackageWithAssets({ experimental_data_stream_features: [ { data_stream: 'metrics-test.test', @@ -376,7 +402,7 @@ describe('experimental_datastream_features', () => { isDocValueOnlyOther: false, }); - mockGetInstallation.mockResolvedValueOnce({ + mockGetInstalledPackageWithAssets({ experimental_data_stream_features: [ { data_stream: 'metrics-test.test', @@ -404,7 +430,7 @@ describe('experimental_datastream_features', () => { isDocValueOnlyOther: false, }); - mockGetInstallation.mockResolvedValueOnce({ + mockGetInstalledPackageWithAssets({ experimental_data_stream_features: [ { data_stream: 'metrics-test.test', @@ -426,7 +452,7 @@ describe('experimental_datastream_features', () => { describe('when opt in status is changed', () => { beforeEach(() => { - mockGetInstallation.mockResolvedValueOnce({ + mockGetInstalledPackageWithAssets({ experimental_data_stream_features: [ { data_stream: 'metrics-test.test', diff --git a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts index b700618f44762..edf31991634b9 100644 --- a/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts +++ b/x-pack/plugins/fleet/server/services/package_policies/experimental_datastream_features.ts @@ -13,6 +13,7 @@ import { merge } from 'lodash'; import { getRegistryDataStreamAssetBaseName } from '../../../common/services'; import type { ExperimentalIndexingFeature } from '../../../common/types'; +import { PackageNotFoundError } from '../../errors'; import type { NewPackagePolicy, PackagePolicy, @@ -22,8 +23,9 @@ import type { import { appContextService } from '../app_context'; import { prepareTemplate } from '../epm/elasticsearch/template/install'; import { updateCurrentWriteIndices } from '../epm/elasticsearch/template/template'; -import { getInstallation, getPackageInfo } from '../epm/packages'; +import { getInstalledPackageWithAssets } from '../epm/packages/get'; import { updateDatastreamExperimentalFeatures } from '../epm/packages/update'; + import { applyDocOnlyValueToMapping, forEachMappings, @@ -38,7 +40,10 @@ export async function handleExperimentalDatastreamFeatureOptIn({ esClient: ElasticsearchClient; packagePolicy: PackagePolicy | NewPackagePolicy; }) { - if (!packagePolicy.package?.experimental_data_stream_features) { + if ( + !packagePolicy.package?.experimental_data_stream_features || + (packagePolicy.package?.experimental_data_stream_features?.length ?? 0) === 0 + ) { return; } @@ -49,16 +54,16 @@ export async function handleExperimentalDatastreamFeatureOptIn({ const templateMappings: { [key: string]: any } = {}; if (packagePolicy.package) { - installation = await getInstallation({ + const installedPackageWithAssets = await getInstalledPackageWithAssets({ savedObjectsClient: soClient, pkgName: packagePolicy.package.name, }); - const packageInfo = await getPackageInfo({ - savedObjectsClient: soClient, - pkgName: packagePolicy.package.name, - pkgVersion: packagePolicy.package.version, - }); + if (!installedPackageWithAssets) { + throw new PackageNotFoundError(`package not found with assets ${packagePolicy.package.name}`); + } + installation = installedPackageWithAssets.installation; + const { packageInfo, paths, assetsMap } = installedPackageWithAssets; // prepare template from package spec to find original index:false values const templates = packageInfo.data_streams?.map((dataStream: any) => { @@ -67,7 +72,15 @@ export async function handleExperimentalDatastreamFeatureOptIn({ (datastreamFeature) => datastreamFeature.data_stream === getRegistryDataStreamAssetBaseName(dataStream) ); - return prepareTemplate({ pkg: packageInfo, dataStream, experimentalDataStreamFeature }); + return prepareTemplate({ + packageInstallContext: { + assetsMap, + packageInfo, + paths, + }, + dataStream, + experimentalDataStreamFeature, + }); }); templates?.forEach((template) => { diff --git a/x-pack/plugins/fleet/server/services/package_policy.test.ts b/x-pack/plugins/fleet/server/services/package_policy.test.ts index 204b3b10e066b..ada094ec9a7d0 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.test.ts @@ -72,63 +72,56 @@ const mockedSendTelemetryEvents = sendTelemetryEvents as jest.MockedFunction< typeof sendTelemetryEvents >; -async function mockedGetAssetsData(_a: any, _b: any, dataset: string) { - if (dataset === 'dataset1') { - return [ - { - buffer: Buffer.from(` -type: log -metricset: ["dataset1"] -paths: -{{#each paths}} -- {{this}} -{{/each}} -{{#if hosts}} -hosts: -{{#each hosts}} -- {{this}} -{{/each}} -{{/if}} -`), - }, - ]; - } - if (dataset === 'dataset1_level1') { - return [ - { - buffer: Buffer.from(` -type: log -metricset: ["dataset1.level1"] -`), - }, - ]; - } - - return [ - { - buffer: Buffer.from(` -hosts: -{{#each hosts}} -- {{this}} -{{/each}} -`), - }, - ]; -} +const ASSETS_MAP_FIXTURES = new Map([ + [ + '/test-1.0.0/data_stream/dataset1/agent/stream/some_template_path.yml', + Buffer.from(` + type: log + metricset: ["dataset1"] + paths: + {{#each paths}} + - {{this}} + {{/each}} + {{#if hosts}} + hosts: + {{#each hosts}} + - {{this}} + {{/each}} + {{/if}} + `), + ], + [ + '/test-1.0.0/data_stream/dataset1_level1/agent/stream/some_template_path.yml', + Buffer.from(` + type: log + metricset: ["dataset1.level1"] + `), + ], + [ + '/test-1.0.0/agent/input/some_template_path.yml', + Buffer.from(` + hosts: + {{#each hosts}} + - {{this}} + {{/each}} + `), + ], +]); async function mockedGetInstallation(params: any) { let pkg; if (params.pkgName === 'apache') pkg = { version: '1.3.2' }; if (params.pkgName === 'aws') pkg = { version: '0.3.3' }; if (params.pkgName === 'endpoint') pkg = { version: '1.0.0' }; + if (params.pkgName === 'test') pkg = { version: '0.0.1' }; return Promise.resolve(pkg); } async function mockedGetPackageInfo(params: any) { let pkg; if (params.pkgName === 'apache') pkg = { version: '1.3.2' }; - if (params.pkgName === 'aws') pkg = { version: '0.3.3' }; - if (params.pkgName === 'endpoint') pkg = { version: '1.0.0' }; + if (params.pkgName === 'aws') pkg = { name: 'aws', version: '0.3.3' }; + if (params.pkgName === 'endpoint') pkg = { name: 'endpoint', version: params.pkgVersion }; if (params.pkgName === 'test') { pkg = { version: '1.0.2', @@ -162,12 +155,6 @@ async function mockedGetPackageInfo(params: any) { return Promise.resolve(pkg); } -jest.mock('./epm/packages/assets', () => { - return { - getAssetsData: mockedGetAssetsData, - }; -}); - jest.mock('./epm/packages', () => { return { getPackageInfo: jest.fn().mockImplementation(mockedGetPackageInfo), @@ -181,7 +168,13 @@ jest.mock('../../common/services/package_to_package_policy', () => ({ packageToPackagePolicy: jest.fn(), })); -jest.mock('./epm/registry'); +jest.mock('./epm/registry', () => ({ + getPackage: jest.fn().mockResolvedValue({ assetsMap: [] }), +})); + +jest.mock('./epm/packages/get', () => ({ + getPackageAssetsMap: jest.fn().mockResolvedValue(new Map()), +})); jest.mock('./agent_policy'); const mockAgentPolicyService = agentPolicyService as jest.Mocked; @@ -488,6 +481,8 @@ describe('Package policy service', () => { it('should work with config variables from the stream', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [ { type: 'logs', @@ -520,7 +515,8 @@ describe('Package policy service', () => { }, ], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -551,6 +547,8 @@ describe('Package policy service', () => { it('should work with a two level dataset name', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [ { type: 'logs', @@ -578,7 +576,8 @@ describe('Package policy service', () => { }, ], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -603,6 +602,8 @@ describe('Package policy service', () => { it('should work with config variables at the input level', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [ { dataset: 'package.dataset1', @@ -635,7 +636,8 @@ describe('Package policy service', () => { }, ], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -666,6 +668,8 @@ describe('Package policy service', () => { it('should work with config variables at the package level', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [ { dataset: 'package.dataset1', @@ -702,7 +706,8 @@ describe('Package policy service', () => { }, ], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -734,6 +739,8 @@ describe('Package policy service', () => { it('should work with an input with a template and no streams', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [], policy_templates: [ { @@ -753,7 +760,8 @@ describe('Package policy service', () => { }, streams: [], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -776,6 +784,8 @@ describe('Package policy service', () => { it('should work with an input with a template and streams', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', data_streams: [ { dataset: 'package.dataset1', @@ -828,7 +838,8 @@ describe('Package policy service', () => { }, streams: [], }, - ] + ], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([ @@ -881,6 +892,8 @@ describe('Package policy service', () => { it('should work with a package without input', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', policy_templates: [ { inputs: undefined, @@ -888,7 +901,8 @@ describe('Package policy service', () => { ], } as unknown as PackageInfo, {}, - [] + [], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([]); @@ -897,6 +911,8 @@ describe('Package policy service', () => { it('should work with a package with a empty inputs array', async () => { const inputs = await _compilePackagePolicyInputs( { + name: 'test', + version: '1.0.0', policy_templates: [ { inputs: [], @@ -904,7 +920,8 @@ describe('Package policy service', () => { ], } as unknown as PackageInfo, {}, - [] + [], + ASSETS_MAP_FIXTURES ); expect(inputs).toEqual([]); diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index d3d49a7f001fc..3f43aaa2d71f2 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -68,6 +68,7 @@ import type { ExperimentalDataStreamFeature, DeletePackagePoliciesResponse, PolicySecretReference, + AssetsMap, } from '../../common/types'; import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../constants'; import { @@ -104,7 +105,7 @@ import { storedPackagePolicyToAgentInputs } from './agent_policies'; import { agentPolicyService } from './agent_policy'; import { getDataOutputForAgentPolicy } from './agent_policies'; import { getPackageInfo, getInstallation, ensureInstalledPackage } from './epm/packages'; -import { getAssetsData } from './epm/packages/assets'; +import { getAssetsDataFromAssetsMap } from './epm/packages/assets'; import { compileTemplate } from './epm/agent/agent'; import { escapeSearchQueryPhrase, normalizeKuery } from './saved_object'; import { appContextService } from '.'; @@ -122,6 +123,7 @@ import { deleteSecretsIfNotReferenced as deleteSecrets, isSecretStorageEnabled, } from './secrets'; +import { getPackageAssetsMap } from './epm/packages/get'; export type InputsOverride = Partial & { vars?: Array; @@ -129,6 +131,38 @@ export type InputsOverride = Partial & { const SAVED_OBJECT_TYPE = PACKAGE_POLICY_SAVED_OBJECT_TYPE; +async function getPkgInfoAssetsMap({ + savedObjectsClient, + packageInfos, + logger, +}: { + savedObjectsClient: SavedObjectsClientContract; + packageInfos: PackageInfo[]; + logger: Logger; +}) { + const packageInfosandAssetsMap = new Map< + string, + { assetsMap: AssetsMap; pkgInfo: PackageInfo } + >(); + await pMap( + packageInfos, + async (pkgInfo) => { + const assetsMap = await getPackageAssetsMap({ + logger, + packageInfo: pkgInfo, + savedObjectsClient, + }); + packageInfosandAssetsMap.set(`${pkgInfo.name}-${pkgInfo.version}`, { + assetsMap, + pkgInfo, + }); + }, + { concurrency: 5 } + ); + + return packageInfosandAssetsMap; +} + export const DATA_STREAM_ALLOWED_INDEX_PRIVILEGES = new Set([ 'auto_configure', 'create_doc', @@ -261,7 +295,17 @@ class PackagePolicyClientImpl implements PackagePolicyClient { inputs = enrichedPackagePolicy.inputs as PackagePolicyInput[]; } - inputs = await _compilePackagePolicyInputs(pkgInfo, enrichedPackagePolicy.vars || {}, inputs); + const assetsMap = await getPackageAssetsMap({ + logger, + packageInfo: pkgInfo, + savedObjectsClient: soClient, + }); + inputs = await _compilePackagePolicyInputs( + pkgInfo, + enrichedPackagePolicy.vars || {}, + inputs, + assetsMap + ); elasticsearchPrivileges = pkgInfo.elasticsearch?.privileges; @@ -366,6 +410,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { return p; }); + const packageInfosandAssetsMap = await getPkgInfoAssetsMap({ + logger, + packageInfos: [...packageInfos.values()], + savedObjectsClient: soClient, + }); + await pMap(packagePoliciesWithIds, async (packagePolicy) => { try { const packagePolicyId = packagePolicy.id ?? uuidv4(); @@ -377,12 +427,24 @@ class PackagePolicyClientImpl implements PackagePolicyClient { let elasticsearch: PackagePolicy['elasticsearch']; if (packagePolicy.package) { - const pkgInfo = packageInfos.get( + const packageInfoAndAsset = packageInfosandAssetsMap.get( `${packagePolicy.package.name}-${packagePolicy.package.version}` ); + if (!packageInfoAndAsset) { + throw new FleetError( + `Package info and assets not found: ${packagePolicy.package.name}-${packagePolicy.package.version}` + ); + } + + const { pkgInfo, assetsMap } = packageInfoAndAsset; inputs = pkgInfo - ? await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs) + ? await _compilePackagePolicyInputs( + pkgInfo, + packagePolicy.vars || {}, + inputs, + assetsMap + ) : inputs; elasticsearch = pkgInfo?.elasticsearch; @@ -475,9 +537,18 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const pkgInfo = packageInfos.get( `${packagePolicy.package.name}-${packagePolicy.package.version}` ); - + if (!pkgInfo) { + throw new FleetError( + `Package info and assets not found: ${packagePolicy.package.name}-${packagePolicy.package.version}` + ); + } + const assetsMap = await getPackageAssetsMap({ + logger: appContextService.getLogger(), + packageInfo: pkgInfo, + savedObjectsClient: soClient, + }); inputs = pkgInfo - ? await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs) + ? await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs, assetsMap) : inputs; elasticsearch = pkgInfo?.elasticsearch; @@ -770,8 +841,17 @@ class PackagePolicyClientImpl implements PackagePolicyClient { secretsToDelete = secretsRes.secretsToDelete; inputs = restOfPackagePolicy.inputs as PackagePolicyInput[]; } - - inputs = await _compilePackagePolicyInputs(pkgInfo, restOfPackagePolicy.vars || {}, inputs); + const assetsMap = await getPackageAssetsMap({ + logger, + packageInfo: pkgInfo, + savedObjectsClient: soClient, + }); + inputs = await _compilePackagePolicyInputs( + pkgInfo, + restOfPackagePolicy.vars || {}, + inputs, + assetsMap + ); elasticsearchPrivileges = pkgInfo.elasticsearch?.privileges; } @@ -891,6 +971,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const packageInfos = await getPackageInfoForPackagePolicies(packagePolicyUpdates, soClient); const allSecretsToDelete: PolicySecretReference[] = []; + const packageInfosandAssetsMap = await getPkgInfoAssetsMap({ + logger: appContextService.getLogger(), + packageInfos: [...packageInfos.values()], + savedObjectsClient: soClient, + }); + const policiesToUpdate: Array> = []; const failedPolicies: Array<{ packagePolicy: NewPackagePolicyWithId; @@ -921,10 +1007,11 @@ class PackagePolicyClientImpl implements PackagePolicyClient { inputs = enforceFrozenInputs(oldPackagePolicy.inputs, inputs, options?.force); let elasticsearchPrivileges: NonNullable['privileges']; if (packagePolicy.package?.name) { - const pkgInfo = packageInfos.get( + const pkgInfoAndAsset = packageInfosandAssetsMap.get( `${packagePolicy.package.name}-${packagePolicy.package.version}` ); - if (pkgInfo) { + if (pkgInfoAndAsset) { + const { pkgInfo, assetsMap } = pkgInfoAndAsset; validatePackagePolicyOrThrow(packagePolicy, pkgInfo); if (await isSecretStorageEnabled(esClient, soClient)) { const secretsRes = await extractAndUpdateSecrets({ @@ -939,7 +1026,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { allSecretsToDelete.push(...secretsRes.secretsToDelete); inputs = restOfPackagePolicy.inputs as PackagePolicyInput[]; } - inputs = await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs); + inputs = await _compilePackagePolicyInputs( + pkgInfo, + packagePolicy.vars || {}, + inputs, + assetsMap + ); elasticsearchPrivileges = pkgInfo.elasticsearch?.privileges; } } @@ -1382,10 +1474,16 @@ class PackagePolicyClientImpl implements PackagePolicyClient { packageInfo, packageToPackagePolicyInputs(packageInfo) as InputsOverride[] ); + const assetsMap = await getPackageAssetsMap({ + logger: appContextService.getLogger(), + packageInfo, + savedObjectsClient: soClient, + }); updatePackagePolicy.inputs = await _compilePackagePolicyInputs( packageInfo, updatePackagePolicy.vars || {}, - updatePackagePolicy.inputs as PackagePolicyInput[] + updatePackagePolicy.inputs as PackagePolicyInput[], + assetsMap ); updatePackagePolicy.elasticsearch = packageInfo.elasticsearch; @@ -1422,6 +1520,11 @@ class PackagePolicyClientImpl implements PackagePolicyClient { ({ packagePolicy, packageInfo, experimentalDataStreamFeatures } = await this.getUpgradePackagePolicyInfo(soClient, id, packagePolicy, pkgVersion)); + const assetsMap = await getPackageAssetsMap({ + logger: appContextService.getLogger(), + packageInfo, + savedObjectsClient: soClient, + }); // Ensure the experimental features from the Installation saved object come through on the package policy // during an upgrade dry run @@ -1429,7 +1532,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { packagePolicy.package.experimental_data_stream_features = experimentalDataStreamFeatures; } - return this.calculateDiff(soClient, packagePolicy, packageInfo); + return this.calculateDiff(soClient, packagePolicy, packageInfo, assetsMap); } catch (error) { return { hasErrors: true, @@ -1441,7 +1544,8 @@ class PackagePolicyClientImpl implements PackagePolicyClient { private async calculateDiff( soClient: SavedObjectsClientContract, packagePolicy: PackagePolicy, - packageInfo: PackageInfo + packageInfo: PackageInfo, + assetsMap: AssetsMap ): Promise { const updatedPackagePolicy = updatePackageInputs( { @@ -1461,7 +1565,8 @@ class PackagePolicyClientImpl implements PackagePolicyClient { updatedPackagePolicy.inputs = await _compilePackagePolicyInputs( packageInfo, updatedPackagePolicy.vars || {}, - updatedPackagePolicy.inputs as PackagePolicyInput[] + updatedPackagePolicy.inputs as PackagePolicyInput[], + assetsMap ); updatedPackagePolicy.elasticsearch = packageInfo.elasticsearch; @@ -1899,11 +2004,12 @@ export function getInputsWithStreamIds( export async function _compilePackagePolicyInputs( pkgInfo: PackageInfo, vars: PackagePolicy['vars'], - inputs: PackagePolicyInput[] + inputs: PackagePolicyInput[], + assetsMap: AssetsMap ): Promise { const inputsPromises = inputs.map(async (input) => { - const compiledInput = await _compilePackagePolicyInput(pkgInfo, vars, input); - const compiledStreams = await _compilePackageStreams(pkgInfo, vars, input); + const compiledInput = await _compilePackagePolicyInput(pkgInfo, vars, input, assetsMap); + const compiledStreams = await _compilePackageStreams(pkgInfo, vars, input, assetsMap); return { ...input, compiled_input: compiledInput, @@ -1917,7 +2023,8 @@ export async function _compilePackagePolicyInputs( async function _compilePackagePolicyInput( pkgInfo: PackageInfo, vars: PackagePolicy['vars'], - input: PackagePolicyInput + input: PackagePolicyInput, + assetsMap: AssetsMap ) { const packagePolicyTemplate = input.policy_template ? pkgInfo.policy_templates?.find( @@ -1945,7 +2052,7 @@ async function _compilePackagePolicyInput( return undefined; } - const [pkgInputTemplate] = await getAssetsData(pkgInfo, (path: string) => + const [pkgInputTemplate] = await getAssetsDataFromAssetsMap(pkgInfo, assetsMap, (path: string) => path.endsWith(`/agent/input/${packageInput.template_path!}`) ); @@ -1965,10 +2072,11 @@ async function _compilePackagePolicyInput( async function _compilePackageStreams( pkgInfo: PackageInfo, vars: PackagePolicy['vars'], - input: PackagePolicyInput + input: PackagePolicyInput, + assetsMap: AssetsMap ) { const streamsPromises = input.streams.map((stream) => - _compilePackageStream(pkgInfo, vars, input, stream) + _compilePackageStream(pkgInfo, vars, input, stream, assetsMap) ); return await Promise.all(streamsPromises); @@ -2026,7 +2134,8 @@ async function _compilePackageStream( pkgInfo: PackageInfo, vars: PackagePolicy['vars'], input: PackagePolicyInput, - streamIn: PackagePolicyInputStream + streamIn: PackagePolicyInputStream, + assetsMap: AssetsMap ) { let stream = streamIn; @@ -2068,8 +2177,9 @@ async function _compilePackageStream( const datasetPath = packageDataStream.path; - const [pkgStreamTemplate] = await getAssetsData( + const [pkgStreamTemplate] = await getAssetsDataFromAssetsMap( pkgInfo, + assetsMap, (path: string) => path.endsWith(streamFromPkg.template_path), datasetPath ); diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index 8c150aabb5b89..bf70ef7652d9a 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -30,7 +30,7 @@ import { } from './preconfiguration'; import { packagePolicyService } from './package_policy'; import { getBundledPackages } from './epm/packages/bundled_packages'; -import type { InstallPackageParams } from './epm/packages/install'; +import { installPackage, type InstallPackageParams } from './epm/packages/install'; jest.mock('./agent_policy_update'); jest.mock('./output'); @@ -144,44 +144,46 @@ jest.mock('./epm/registry', () => ({ })); jest.mock('./epm/packages/install', () => ({ - async installPackage(args: InstallPackageParams): Promise { - if (args.installSource === 'registry') { - const [pkgName, pkgVersion] = args.pkgkey.split('-'); - const installError = mockInstallPackageErrors.get(pkgName); - if (installError) { + installPackage: jest.fn( + async (args: InstallPackageParams): Promise => { + if (args.installSource === 'registry') { + const [pkgName, pkgVersion] = args.pkgkey.split('-'); + const installError = mockInstallPackageErrors.get(pkgName); + if (installError) { + return { + error: new Error(installError), + installType: 'install', + installSource: 'registry', + }; + } + + const installedPackage = mockInstalledPackages.get(pkgName); + if (installedPackage) { + if (installedPackage.version === pkgVersion) return installedPackage; + } + + const packageInstallation = { name: pkgName, version: pkgVersion, title: pkgName }; + mockInstalledPackages.set(pkgName, packageInstallation); + return { - error: new Error(installError), + status: 'installed', installType: 'install', installSource: 'registry', }; - } - - const installedPackage = mockInstalledPackages.get(pkgName); - if (installedPackage) { - if (installedPackage.version === pkgVersion) return installedPackage; - } + } else if (args.installSource === 'upload') { + const { archiveBuffer } = args; - const packageInstallation = { name: pkgName, version: pkgVersion, title: pkgName }; - mockInstalledPackages.set(pkgName, packageInstallation); + // Treat the buffer value passed in tests as the package's name for simplicity + const pkgName = archiveBuffer.toString('utf8'); - return { - status: 'installed', - installType: 'install', - installSource: 'registry', - }; - } else if (args.installSource === 'upload') { - const { archiveBuffer } = args; - - // Treat the buffer value passed in tests as the package's name for simplicity - const pkgName = archiveBuffer.toString('utf8'); - - // Just install every bundled package at version '1.0.0' - const packageInstallation = { name: pkgName, version: '1.0.0', title: pkgName }; - mockInstalledPackages.set(pkgName, packageInstallation); + // Just install every bundled package at version '1.0.0' + const packageInstallation = { name: pkgName, version: '1.0.0', title: pkgName }; + mockInstalledPackages.set(pkgName, packageInstallation); - return { status: 'installed', installType: 'install', installSource: 'upload' }; + return { status: 'installed', installType: 'install', installSource: 'upload' }; + } } - }, + ), ensurePackagesCompletedInstall() { return []; }, @@ -395,6 +397,30 @@ describe('policy preconfiguration', () => { expect(nonFatalErrors.length).toBe(0); }); + it('should pass skipDatastreamRollover flag if configured', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + const { policies, packages, nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + [] as PreconfiguredAgentPolicy[], + [{ name: 'test_package', version: 'latest', skipDataStreamRollover: true }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + + expect(policies.length).toEqual(0); + expect(packages).toEqual(expect.arrayContaining(['test_package-1.0.0'])); + expect(nonFatalErrors.length).toBe(0); + expect(jest.mocked(installPackage)).toBeCalledWith( + expect.objectContaining({ + skipDataStreamRollover: true, + }) + ); + }); + it('should not add new package policy to existing non managed policies', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.ts b/x-pack/plugins/fleet/server/services/preconfiguration.ts index ad1e1c0ddb8b5..8a4944ddb99ad 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.ts @@ -81,7 +81,11 @@ export async function ensurePreconfiguredPackagesAndPolicies( const packagesToInstall = packages.map((pkg) => pkg.version === PRECONFIGURATION_LATEST_KEYWORD - ? { name: pkg.name, prerelease: pkg.prerelease } + ? { + name: pkg.name, + prerelease: pkg.prerelease, + skipDataStreamRollover: pkg.skipDataStreamRollover, + } : pkg ); diff --git a/x-pack/plugins/fleet/server/types/index.tsx b/x-pack/plugins/fleet/server/types/index.tsx index d56c92eb7aa8b..bec381d311937 100644 --- a/x-pack/plugins/fleet/server/types/index.tsx +++ b/x-pack/plugins/fleet/server/types/index.tsx @@ -96,6 +96,7 @@ export type { InstallationInfo, ActionStatusOptions, PackageSpecTags, + AssetsMap, } from '../../common/types'; export { ElasticsearchAssetType, KibanaAssetType, KibanaSavedObjectType } from '../../common/types'; export { dataTypes } from '../../common/constants'; diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index 821debf37bca0..2928db35587d1 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -45,6 +45,7 @@ export const PreconfiguredPackagesSchema = schema.arrayOf( }, }), prerelease: schema.maybe(schema.boolean()), + skipDataStreamRollover: schema.maybe(schema.boolean()), }), { defaultValue: [], diff --git a/x-pack/plugins/graph/public/components/guidance_panel/_guidance_panel.scss b/x-pack/plugins/graph/public/components/guidance_panel/_guidance_panel.scss index add1d0bdf8aa3..28e05afe0c781 100644 --- a/x-pack/plugins/graph/public/components/guidance_panel/_guidance_panel.scss +++ b/x-pack/plugins/graph/public/components/guidance_panel/_guidance_panel.scss @@ -28,7 +28,7 @@ .gphGuidancePanel__itemIcon { position: absolute; left: 0; - top: -($euiSizeXS / 2); + top: -(calc($euiSizeXS / 2)); width: $euiSizeL; height: $euiSizeL; padding: $euiSizeXS; diff --git a/x-pack/plugins/graph/public/components/search_bar.tsx b/x-pack/plugins/graph/public/components/search_bar.tsx index 101a2b3170f0b..ad604ddc59091 100644 --- a/x-pack/plugins/graph/public/components/search_bar.tsx +++ b/x-pack/plugins/graph/public/components/search_bar.tsx @@ -12,6 +12,7 @@ import { i18n } from '@kbn/i18n'; import { connect } from 'react-redux'; import { toElasticsearchQuery, fromKueryExpression, Query } from '@kbn/es-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { QueryStringInput } from '@kbn/unified-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { IUnifiedSearchPluginServices } from '@kbn/unified-search-plugin/public/types'; @@ -27,8 +28,6 @@ import { selectedFieldsSelector, } from '../state_management'; -import { TooltipWrapper } from './tooltip_wrapper'; - export interface SearchBarProps { isLoading: boolean; urlQuery: string | null; diff --git a/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx b/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx deleted file mode 100644 index 5ab7800e05349..0000000000000 --- a/x-pack/plugins/graph/public/components/tooltip_wrapper.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiToolTip, EuiToolTipProps } from '@elastic/eui'; - -export type TooltipWrapperProps = Partial> & { - tooltipContent: string; - /** When the condition is truthy, the tooltip will be shown */ - condition: boolean; -}; - -export const TooltipWrapper: React.FunctionComponent = ({ - children, - condition, - tooltipContent, - ...tooltipProps -}) => { - return ( - <> - {condition ? ( - - <>{children} - - ) : ( - children - )} - - ); -}; diff --git a/x-pack/plugins/graph/tsconfig.json b/x-pack/plugins/graph/tsconfig.json index c1fc3807c4c18..0618744404be4 100644 --- a/x-pack/plugins/graph/tsconfig.json +++ b/x-pack/plugins/graph/tsconfig.json @@ -49,6 +49,7 @@ "@kbn/content-management-utils", "@kbn/logging", "@kbn/content-management-table-list-view-common", + "@kbn/visualization-utils", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/index_management/public/application/store/actions/extension_action.js b/x-pack/plugins/index_management/public/application/store/actions/extension_action.js index 0fb49eea24b4d..95a94bf1d1696 100644 --- a/x-pack/plugins/index_management/public/application/store/actions/extension_action.js +++ b/x-pack/plugins/index_management/public/application/store/actions/extension_action.js @@ -15,7 +15,7 @@ export const performExtensionAction = try { await requestMethod(indexNames, httpService.httpClient); } catch (error) { - notificationService.showDangerToast(error.message); + notificationService.showDangerToast(error.body.message); return; } dispatch(reloadIndices(indexNames)); diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling.tsx index 8f29597326198..5e34f0ca5027e 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling.tsx @@ -18,6 +18,7 @@ import { useProfilingStatusData } from '../../hooks/use_profiling_status_data'; import { useTabSwitcherContext } from '../../hooks/use_tab_switcher'; import { ContentTabIds } from '../../types'; import { ErrorPrompt } from './error_prompt'; +import { Threads } from './threads'; export function Profiling() { const { activeTabId } = useTabSwitcherContext(); @@ -50,6 +51,18 @@ export function Profiling() { ), }, + { + id: 'threads', + name: i18n.translate('xpack.infra.tabs.profiling.threadsTabName', { + defaultMessage: 'Threads', + }), + content: ( + <> + + + + ), + }, ]; if (loading) { diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling_links.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling_links.tsx index e0240ed58086e..4922ce0eafea4 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling_links.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/profiling_links.tsx @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; import { FlamegraphLocator } from '@kbn/observability-shared-plugin/public/locators/profiling/flamegraph_locator'; import { TopNFunctionsLocator } from '@kbn/observability-shared-plugin/public/locators/profiling/topn_functions_locator'; +import { StacktracesLocator } from '@kbn/observability-shared-plugin/public/locators/profiling/stacktraces_locator'; import { HOST_FIELD } from '../../../../../common/constants'; const PROFILING_FEEDBACK_URL = 'https://ela.st/profiling-feedback'; @@ -18,7 +19,7 @@ interface Props { hostname: string; from: string; to: string; - profilingLinkLocator: FlamegraphLocator | TopNFunctionsLocator; + profilingLinkLocator: FlamegraphLocator | TopNFunctionsLocator | StacktracesLocator; profilingLinkLabel: string; } @@ -43,7 +44,12 @@ export function ProfilingLinks({ - + {i18n.translate('xpack.infra.flamegraph.profilingFeedbackLink', { defaultMessage: 'Give feedback about profiling', })} diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/threads.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/threads.tsx new file mode 100644 index 0000000000000..120fe3ca7fd99 --- /dev/null +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/profiling/threads.tsx @@ -0,0 +1,58 @@ +/* + * Copyright 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 { EmbeddableStackTraces } from '@kbn/observability-shared-plugin/public'; +import React from 'react'; +import { TopNType } from '@kbn/profiling-utils'; +import { EuiSpacer } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { HOST_FIELD } from '../../../../../common/constants'; +import { useAssetDetailsRenderPropsContext } from '../../hooks/use_asset_details_render_props'; +import { useDatePickerContext } from '../../hooks/use_date_picker'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; +import { ProfilingLinks } from './profiling_links'; + +export function Threads() { + const { services } = useKibanaContextForPlugin(); + const { getDateRangeInTimestamp, dateRange, setDateRange } = useDatePickerContext(); + const { from, to } = getDateRangeInTimestamp(); + const { asset } = useAssetDetailsRenderPropsContext(); + const stacktracesProfilingLinkLocator = + services.observabilityShared.locators.profiling.stacktracesLocator; + + return ( + <> + + + { + stacktracesProfilingLinkLocator.navigate({ + type: TopNType.Traces, + rangeFrom: dateRange.from, + rangeTo: dateRange.to, + kuery: `(${HOST_FIELD}:"${asset.name}" ) AND process.thread.name:"${category}"`, + }); + }} + onChartBrushEnd={(range) => { + setDateRange({ from: range.rangeFrom, to: range.rangeTo }); + }} + /> + + ); +} diff --git a/x-pack/plugins/infra/server/features.ts b/x-pack/plugins/infra/server/features.ts index 5e6f809645ac1..68fe2503ace14 100644 --- a/x-pack/plugins/infra/server/features.ts +++ b/x-pack/plugins/infra/server/features.ts @@ -8,7 +8,10 @@ import { i18n } from '@kbn/i18n'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { logViewSavedObjectName } from '@kbn/logs-shared-plugin/server'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { + ML_ANOMALY_DETECTION_RULE_TYPE_ID, + OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, +} from '@kbn/rule-data-utils'; import { ES_QUERY_ID } from '@kbn/rule-data-utils'; import { metricsDataSourceSavedObjectName } from '@kbn/metrics-data-access-plugin/server'; import { LOG_DOCUMENT_COUNT_RULE_TYPE_ID } from '../common/alerting/logs/log_threshold/types'; @@ -24,6 +27,7 @@ const metricRuleTypes = [ METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, ES_QUERY_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, ]; export const METRICS_FEATURE = { @@ -89,6 +93,7 @@ const logsRuleTypes = [ LOG_DOCUMENT_COUNT_RULE_TYPE_ID, ES_QUERY_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, ]; export const LOGS_FEATURE = { diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 4a51722288c05..830e50d04f5c7 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -14,7 +14,7 @@ import { AlertInstanceState as AlertState, RecoveredActionGroup, } from '@kbn/alerting-plugin/common'; -import { RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; +import { AlertsClientError, RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; import type { TimeUnitChar } from '@kbn/observability-plugin/common'; import { getAlertUrl } from '@kbn/observability-plugin/common'; import { ObservabilityMetricsAlert } from '@kbn/alerts-as-data-utils'; @@ -120,7 +120,7 @@ export const createMetricThresholdExecutor = const { alertsClient, savedObjectsClient } = services; if (!alertsClient) { - throw new Error(`Expected alertsClient to be defined but it was not!`); + throw new AlertsClientError(); } const alertReporter: MetricThresholdAlertReporter = async ( diff --git a/x-pack/plugins/kubernetes_security/public/test/index.tsx b/x-pack/plugins/kubernetes_security/public/test/index.tsx index 1ca31c8e0baf0..a267169e6cf18 100644 --- a/x-pack/plugins/kubernetes_security/public/test/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/test/index.tsx @@ -11,7 +11,6 @@ import { render as reactRender, RenderOptions, RenderResult } from '@testing-lib import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Router } from '@kbn/shared-ux-router'; import { History } from 'history'; -import useObservable from 'react-use/lib/useObservable'; import { I18nProvider } from '@kbn/i18n-react'; import { CoreStart } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; @@ -65,8 +64,8 @@ const AppRootProvider = memo<{ history: History; coreStart: CoreStart; children: ReactNode | ReactNode[]; -}>(({ history, coreStart: { http, notifications, uiSettings, application }, children }) => { - const isDarkMode = useObservable(uiSettings.get$('theme:darkMode')); +}>(({ history, coreStart: { http, notifications, theme, application }, children }) => { + const isDarkMode = useMemo(() => theme.getTheme().darkMode, [theme]); const services = useMemo( () => ({ http, notifications, application }), [application, http, notifications] diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/counter_rate.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/counter_rate.tsx index a35669c01ca33..93ab93de22f66 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/counter_rate.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/counter_rate.tsx @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { COUNTER_RATE_ID, COUNTER_RATE_NAME } from '@kbn/lens-formula-docs'; import { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn } from '../column_types'; import { FormBasedLayer } from '../../../types'; import { @@ -35,18 +36,16 @@ const ofName = buildLabelFunction((name?: string) => { export type CounterRateIndexPatternColumn = FormattedIndexPatternColumn & ReferenceBasedIndexPatternColumn & { - operationType: 'counter_rate'; + operationType: typeof COUNTER_RATE_ID; }; export const counterRateOperation: OperationDefinition< CounterRateIndexPatternColumn, 'fullReference' > = { - type: 'counter_rate', + type: COUNTER_RATE_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.counterRate', { - defaultMessage: 'Counter rate', - }), + displayName: COUNTER_RATE_NAME, input: 'fullReference', selectionStyle: 'field', requiredReferences: [ @@ -134,24 +133,6 @@ export const counterRateOperation: OperationDefinition< }, timeScalingMode: 'mandatory', filterable: true, - documentation: { - section: 'calculation', - signature: i18n.translate('xpack.lens.indexPattern.counterRate.signature', { - defaultMessage: 'metric: number', - }), - description: i18n.translate('xpack.lens.indexPattern.counterRate.documentation.markdown', { - defaultMessage: ` -Calculates the rate of an ever increasing counter. This function will only yield helpful results on counter metric fields which contain a measurement of some kind monotonically growing over time. -If the value does get smaller, it will interpret this as a counter reset. To get most precise results, \`counter_rate\` should be calculated on the \`max\` of a field. - -This calculation will be done separately for separate series defined by filters or top values dimensions. -It uses the current interval when used in Formula. - -Example: Visualize the rate of bytes received over time by a memcached server: -\`counter_rate(max(memcached.stats.read.bytes))\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.counterRate.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/cumulative_sum.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/cumulative_sum.tsx index 916ecd6f965e6..d7c13d43ba163 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/cumulative_sum.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/cumulative_sum.tsx @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { CUMULATIVE_SUM_ID, CUMULATIVE_SUM_NAME } from '@kbn/lens-formula-docs'; import { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn } from '../column_types'; import { FormBasedLayer } from '../../../types'; import { @@ -35,18 +36,16 @@ const ofName = buildLabelFunction((name?: string) => { export type CumulativeSumIndexPatternColumn = FormattedIndexPatternColumn & ReferenceBasedIndexPatternColumn & { - operationType: 'cumulative_sum'; + operationType: typeof CUMULATIVE_SUM_ID; }; export const cumulativeSumOperation: OperationDefinition< CumulativeSumIndexPatternColumn, 'fullReference' > = { - type: 'cumulative_sum', + type: CUMULATIVE_SUM_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.cumulativeSum', { - defaultMessage: 'Cumulative sum', - }), + displayName: CUMULATIVE_SUM_NAME, input: 'fullReference', selectionStyle: 'field', requiredReferences: [ @@ -127,22 +126,6 @@ export const cumulativeSumOperation: OperationDefinition< return checkForDateHistogram(layer, opName)?.join(', '); }, filterable: true, - documentation: { - section: 'calculation', - signature: i18n.translate('xpack.lens.indexPattern.cumulative_sum.signature', { - defaultMessage: 'metric: number', - }), - description: i18n.translate('xpack.lens.indexPattern.cumulativeSum.documentation.markdown', { - defaultMessage: ` -Calculates the cumulative sum of a metric over time, adding all previous values of a series to each value. To use this function, you need to configure a date histogram dimension as well. - -This calculation will be done separately for separate series defined by filters or top values dimensions. - -Example: Visualize the received bytes accumulated over time: -\`cumulative_sum(sum(bytes))\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.cumulativeSum.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/differences.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/differences.tsx index 9f592be860d77..59943a23ece5e 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/differences.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/differences.tsx @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { DIFFERENCES_ID, DIFFERENCES_NAME } from '@kbn/lens-formula-docs'; import { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn } from '../column_types'; import { FormBasedLayer } from '../../../types'; import { @@ -19,8 +20,6 @@ import { import { OperationDefinition } from '..'; import { getFormatFromPreviousColumn, getFilter } from '../helpers'; -const OPERATION_NAME = 'differences'; - const ofName = buildLabelFunction((name?: string) => { return i18n.translate('xpack.lens.indexPattern.derivativeOf', { defaultMessage: 'Differences of {name}', @@ -36,18 +35,16 @@ const ofName = buildLabelFunction((name?: string) => { export type DerivativeIndexPatternColumn = FormattedIndexPatternColumn & ReferenceBasedIndexPatternColumn & { - operationType: typeof OPERATION_NAME; + operationType: typeof DIFFERENCES_ID; }; export const derivativeOperation: OperationDefinition< DerivativeIndexPatternColumn, 'fullReference' > = { - type: OPERATION_NAME, + type: DIFFERENCES_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.derivative', { - defaultMessage: 'Differences', - }), + displayName: DIFFERENCES_NAME, input: 'fullReference', selectionStyle: 'full', requiredReferences: [ @@ -78,7 +75,7 @@ export const derivativeOperation: OperationDefinition< return { label: ofName(ref?.label, previousColumn?.timeScale, previousColumn?.timeShift), dataType: 'number', - operationType: OPERATION_NAME, + operationType: DIFFERENCES_ID, isBucketed: false, scale: 'ratio', references: referenceIds, @@ -114,23 +111,6 @@ export const derivativeOperation: OperationDefinition< }, timeScalingMode: 'optional', filterable: true, - documentation: { - section: 'calculation', - signature: i18n.translate('xpack.lens.indexPattern.differences.signature', { - defaultMessage: 'metric: number', - }), - description: i18n.translate('xpack.lens.indexPattern.differences.documentation.markdown', { - defaultMessage: ` -Calculates the difference to the last value of a metric over time. To use this function, you need to configure a date histogram dimension as well. -Differences requires the data to be sequential. If your data is empty when using differences, try increasing the date histogram interval. - -This calculation will be done separately for separate series defined by filters or top values dimensions. - -Example: Visualize the change in bytes received over time: -\`differences(sum(bytes))\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.differences.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/moving_average.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/moving_average.tsx index 2594cc558f026..a2689e7d2209c 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/moving_average.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/moving_average.tsx @@ -9,6 +9,11 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useState } from 'react'; import { EuiFieldNumber, EuiFormRow } from '@elastic/eui'; +import { + MOVING_AVERAGE_NAME, + MOVING_AVERAGE_ID, + MOVING_AVERAGE_WINDOW_DEFAULT_VALUE, +} from '@kbn/lens-formula-docs'; import { useDebounceWithOptions } from '../../../../../shared_components'; import { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn } from '../column_types'; import { FormBasedLayer } from '../../../types'; @@ -37,11 +42,9 @@ const ofName = buildLabelFunction((name?: string) => { }); }); -const WINDOW_DEFAULT_VALUE = 5; - export type MovingAverageIndexPatternColumn = FormattedIndexPatternColumn & ReferenceBasedIndexPatternColumn & { - operationType: 'moving_average'; + operationType: typeof MOVING_AVERAGE_ID; params: { window: number; }; @@ -51,11 +54,9 @@ export const movingAverageOperation: OperationDefinition< MovingAverageIndexPatternColumn, 'fullReference' > = { - type: 'moving_average', + type: MOVING_AVERAGE_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.movingAverage', { - defaultMessage: 'Moving average', - }), + displayName: MOVING_AVERAGE_NAME, input: 'fullReference', selectionStyle: 'full', requiredReferences: [ @@ -65,7 +66,12 @@ export const movingAverageOperation: OperationDefinition< }, ], operationParams: [ - { name: 'window', type: 'number', required: false, defaultValue: WINDOW_DEFAULT_VALUE }, + { + name: 'window', + type: 'number', + required: false, + defaultValue: MOVING_AVERAGE_WINDOW_DEFAULT_VALUE, + }, ], getPossibleOperation: (indexPattern) => { if (hasDateField(indexPattern)) { @@ -86,7 +92,7 @@ export const movingAverageOperation: OperationDefinition< }, buildColumn: ({ referenceIds, previousColumn, layer }, columnParams) => { const metric = layer.columns[referenceIds[0]]; - const window = columnParams?.window ?? WINDOW_DEFAULT_VALUE; + const window = columnParams?.window ?? MOVING_AVERAGE_WINDOW_DEFAULT_VALUE; return { label: ofName(metric?.label, previousColumn?.timeScale, previousColumn?.timeShift), @@ -135,28 +141,6 @@ export const movingAverageOperation: OperationDefinition< }, timeScalingMode: 'optional', filterable: true, - documentation: { - section: 'calculation', - signature: i18n.translate('xpack.lens.indexPattern.moving_average.signature', { - defaultMessage: 'metric: number, [window]: number', - }), - description: i18n.translate('xpack.lens.indexPattern.movingAverage.documentation.markdown', { - defaultMessage: ` -Calculates the moving average of a metric over time, averaging the last n-th values to calculate the current value. To use this function, you need to configure a date histogram dimension as well. -The default window value is {defaultValue}. - -This calculation will be done separately for separate series defined by filters or top values dimensions. - -Takes a named parameter \`window\` which specifies how many last values to include in the average calculation for the current value. - -Example: Smooth a line of measurements: -\`moving_average(sum(bytes), window=5)\` - `, - values: { - defaultValue: WINDOW_DEFAULT_VALUE, - }, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.movingAverage.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/overall_metric.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/overall_metric.tsx index f2314dbdc3d58..68c7f18483d12 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/overall_metric.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/overall_metric.tsx @@ -6,6 +6,20 @@ */ import { i18n } from '@kbn/i18n'; +import { + AVG_ID, + MAX_ID, + MIN_ID, + OVERALL_AVERAGE_ID, + OVERALL_AVERAGE_NAME, + OVERALL_MAX_ID, + OVERALL_MAX_NAME, + OVERALL_MIN_ID, + OVERALL_MIN_NAME, + OVERALL_SUM_ID, + OVERALL_SUM_NAME, + SUM_ID, +} from '@kbn/lens-formula-docs'; import type { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn, @@ -19,22 +33,22 @@ type OverallMetricIndexPatternColumn = FormattedIndexPatternCo operationType: T; }; -export type OverallSumIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_sum'>; -export type OverallMinIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_min'>; -export type OverallMaxIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_max'>; -export type OverallAverageIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_average'>; +export type OverallSumIndexPatternColumn = OverallMetricIndexPatternColumn; +export type OverallMinIndexPatternColumn = OverallMetricIndexPatternColumn; +export type OverallMaxIndexPatternColumn = OverallMetricIndexPatternColumn; +export type OverallAverageIndexPatternColumn = OverallMetricIndexPatternColumn< + typeof OVERALL_AVERAGE_ID +>; function buildOverallMetricOperation>({ type, displayName, ofName, - description, metric, }: { type: T['operationType']; displayName: string; ofName: (name?: string) => string; - description: string; metric: string; }): OperationDefinition { return { @@ -90,21 +104,12 @@ function buildOverallMetricOperation({ - type: 'overall_sum', - displayName: i18n.translate('xpack.lens.indexPattern.overallSum', { - defaultMessage: 'Overall sum', - }), + type: OVERALL_SUM_ID, + displayName: OVERALL_SUM_NAME, ofName: (name?: string) => { return i18n.translate('xpack.lens.indexPattern.overallSumOf', { defaultMessage: 'Overall sum of {name}', @@ -117,25 +122,12 @@ export const overallSumOperation = buildOverallMetricOperation({ - type: 'overall_min', - displayName: i18n.translate('xpack.lens.indexPattern.overallMin', { - defaultMessage: 'Overall min', - }), + type: OVERALL_MIN_ID, + displayName: OVERALL_MIN_NAME, ofName: (name?: string) => { return i18n.translate('xpack.lens.indexPattern.overallMinOf', { defaultMessage: 'Overall min of {name}', @@ -148,25 +140,12 @@ export const overallMinOperation = buildOverallMetricOperation({ - type: 'overall_max', - displayName: i18n.translate('xpack.lens.indexPattern.overallMax', { - defaultMessage: 'Overall max', - }), + type: OVERALL_MAX_ID, + displayName: OVERALL_MAX_NAME, ofName: (name?: string) => { return i18n.translate('xpack.lens.indexPattern.overallMaxOf', { defaultMessage: 'Overall max of {name}', @@ -179,26 +158,13 @@ export const overallMaxOperation = buildOverallMetricOperation({ - type: 'overall_average', - displayName: i18n.translate('xpack.lens.indexPattern.overallMax', { - defaultMessage: 'Overall max', - }), + type: OVERALL_AVERAGE_ID, + displayName: OVERALL_AVERAGE_NAME, ofName: (name?: string) => { return i18n.translate('xpack.lens.indexPattern.overallAverageOf', { defaultMessage: 'Overall average of {name}', @@ -211,16 +177,5 @@ export const overallAverageOperation = }, }); }, - metric: 'average', - description: i18n.translate('xpack.lens.indexPattern.overall_average.documentation.markdown', { - defaultMessage: ` -Calculates the average of a metric for all data points of a series in the current chart. A series is defined by a dimension using a date histogram or interval function. -Other dimensions breaking down the data like top values or filter are treated as separate series. - -If no date histograms or interval functions are used in the current chart, \`overall_average\` is calculating the average over all dimensions no matter the used function - -Example: Divergence from the mean: -\`sum(bytes) - overall_average(sum(bytes))\` - `, - }), + metric: AVG_ID, }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/time_scale.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/time_scale.tsx index 5915941938737..3ccb3e0808129 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/time_scale.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/calculations/time_scale.tsx @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { NORMALIZE_BY_UNIT_ID, NORMALIZE_BY_UNIT_NAME } from '@kbn/lens-formula-docs'; import type { FormattedIndexPatternColumn, ReferenceBasedIndexPatternColumn, @@ -15,19 +16,9 @@ import type { OperationDefinition } from '..'; import { combineErrorMessages, getFormatFromPreviousColumn } from '../helpers'; import { FormBasedLayer } from '../../../types'; -type OverallMetricIndexPatternColumn = FormattedIndexPatternColumn & - ReferenceBasedIndexPatternColumn & { - operationType: T; - }; - -export type OverallSumIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_sum'>; -export type OverallMinIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_min'>; -export type OverallMaxIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_max'>; -export type OverallAverageIndexPatternColumn = OverallMetricIndexPatternColumn<'overall_average'>; - export type TimeScaleIndexPatternColumn = FormattedIndexPatternColumn & ReferenceBasedIndexPatternColumn & { - operationType: 'normalize_by_unit'; + operationType: typeof NORMALIZE_BY_UNIT_ID; params: { unit?: string; }; @@ -35,11 +26,9 @@ export type TimeScaleIndexPatternColumn = FormattedIndexPatternColumn & export const timeScaleOperation: OperationDefinition = { - type: 'normalize_by_unit', + type: NORMALIZE_BY_UNIT_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.timeScale', { - defaultMessage: 'Normalize by unit', - }), + displayName: NORMALIZE_BY_UNIT_NAME, input: 'fullReference', selectionStyle: 'hidden', requiredReferences: [ @@ -57,7 +46,7 @@ export const timeScaleOperation: OperationDefinition { - return 'normalize_by_unit'; + return NORMALIZE_BY_UNIT_ID; }, toExpression: (layer, columnId) => { const currentColumn = layer.columns[columnId] as unknown as TimeScaleIndexPatternColumn; @@ -85,9 +74,9 @@ export const timeScaleOperation: OperationDefinition { return { - label: 'Normalize by unit', + label: NORMALIZE_BY_UNIT_NAME, dataType: 'number', - operationType: 'normalize_by_unit', + operationType: NORMALIZE_BY_UNIT_ID, isBucketed: false, scale: 'ratio', references: referenceIds, @@ -102,13 +91,7 @@ export const timeScaleOperation: OperationDefinition { return combineErrorMessages([ - getErrorsForDateReference( - layer, - columnId, - i18n.translate('xpack.lens.indexPattern.timeScale', { - defaultMessage: 'Normalize by unit', - }) - ), + getErrorsForDateReference(layer, columnId, NORMALIZE_BY_UNIT_NAME), !(layer.columns[columnId] as TimeScaleIndexPatternColumn).params.unit ? [ i18n.translate('xpack.lens.indexPattern.timeScale.missingUnit', { @@ -129,21 +112,4 @@ export const timeScaleOperation: OperationDefinition = { - type: OPERATION_TYPE, - displayName: i18n.translate('xpack.lens.indexPattern.cardinality', { - defaultMessage: 'Unique count', - }), + type: CARDINALITY_ID, + displayName: CARDINALITY_NAME, allowAsReference: true, input: 'field', getPossibleOperationForField: ({ @@ -123,7 +121,7 @@ export const cardinalityOperation: OperationDefinition< return { label: ofName(field.displayName, previousColumn?.timeShift, previousColumn?.reducedTimeRange), dataType: 'number', - operationType: OPERATION_TYPE, + operationType: CARDINALITY_ID, scale: SCALE, sourceField: field.name, isBucketed: IS_BUCKETED, @@ -205,23 +203,6 @@ export const cardinalityOperation: OperationDefinition< sourceField: field.name, }; }, - documentation: { - section: 'elasticsearch', - signature: i18n.translate('xpack.lens.indexPattern.cardinality.signature', { - defaultMessage: 'field: string', - }), - description: i18n.translate('xpack.lens.indexPattern.cardinality.documentation.markdown', { - defaultMessage: ` -Calculates the number of unique values of a specified field. Works for number, string, date and boolean values. - -Example: Calculate the number of different products: -\`unique_count(product.name)\` - -Example: Calculate the number of different products from the "clothes" group: -\`unique_count(product.name, kql='product.group=clothes')\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.cardinality.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/count.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/count.tsx index 142e38a144dbb..94b1b36193aed 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/count.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/count.tsx @@ -11,6 +11,7 @@ import { euiThemeVars } from '@kbn/ui-theme'; import { EuiSwitch, EuiText } from '@elastic/eui'; import { AggFunctionsMapping } from '@kbn/data-plugin/public'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; +import { COUNT_ID, COUNT_NAME } from '@kbn/lens-formula-docs'; import { TimeScaleUnit } from '../../../../../common/expressions'; import { OperationDefinition, ParamEditorProps } from '.'; import { FieldBasedIndexPatternColumn, ValueFormatConfig } from './column_types'; @@ -72,7 +73,7 @@ function ofName( } export type CountIndexPatternColumn = FieldBasedIndexPatternColumn & { - operationType: 'count'; + operationType: typeof COUNT_ID; params?: { emptyAsNull?: boolean; format?: ValueFormatConfig; @@ -83,10 +84,8 @@ const SCALE = 'ratio'; const IS_BUCKETED = false; export const countOperation: OperationDefinition = { - type: 'count', - displayName: i18n.translate('xpack.lens.indexPattern.count', { - defaultMessage: 'Count', - }), + type: COUNT_ID, + displayName: COUNT_NAME, input: 'field', getErrorMessage: (layer, columnId, indexPattern) => combineErrorMessages([ @@ -130,7 +129,7 @@ export const countOperation: OperationDefinition('count', previousColumn) + previousColumn && isColumnOfType(COUNT_ID, previousColumn) ? previousColumn.params?.emptyAsNull : !columnParams?.usedInMath, }, @@ -232,25 +231,6 @@ export const countOperation: OperationDefinition { - const fnDescription = getFunctionDescriptionAndExamples(key, operationDefinitionMap); + const fnDescription = getFunctionDescriptionAndExamples(key); return { label: key, description: ( @@ -47,15 +51,12 @@ function createNewSection( }; } -function getFunctionDescriptionAndExamples( - label: string, - operationDefinitionMap: Record -) { +function getFunctionDescriptionAndExamples(label: string) { if (tinymathFunctions[label]) { const [description, examples] = tinymathFunctions[label].help.split(`\`\`\``); return `${description.replace(/\n/g, '\n\n')}${examples ? `\`\`\`${examples}\`\`\`` : ''}`; } - return operationDefinitionMap[label].documentation?.description; + return documentationMap[label].documentation?.description; } export function getDocumentationSections({ @@ -79,120 +80,14 @@ export function getDocumentationSections({ }); helpGroups.push({ - label: i18n.translate('xpack.lens.formulaFrequentlyUsedHeading', { - defaultMessage: 'Common formulas', - }), - description: i18n.translate('xpack.lens.formulaCommonFormulaDocumentation', { - defaultMessage: `The most common formulas are dividing two values to produce a percent. To display accurately, set "value format" to "percent".`, - }), - - items: [ - { - label: i18n.translate('xpack.lens.formulaDocumentation.filterRatio', { - defaultMessage: 'Filter ratio', - }), - description: ( - - ), - }, - { - label: i18n.translate('xpack.lens.formulaDocumentation.weekOverWeek', { - defaultMessage: 'Week over week', - }), - description: ( - - ), - }, - { - label: i18n.translate('xpack.lens.formulaDocumentation.percentOfTotal', { - defaultMessage: 'Percent of total', - }), - description: ( - - ), - }, - { - label: i18n.translate('xpack.lens.formulaDocumentation.recentChange', { - defaultMessage: 'Recent change', - }), - description: ( - - ), - }, - ], + label: formulasSections.common.label, + description: formulasSections.common.description, + items: formulasSections.common.items.map( + ({ label, description }: { label: string; description: string }) => ({ + label, + description: , + }) + ), }); const { @@ -203,7 +98,7 @@ max(system.network.in.bytes, reducedTimeRange="30m") constants: constantsOperations, } = groupBy(getPossibleFunctions(indexPattern), (key) => { if (key in operationDefinitionMap) { - return operationDefinitionMap[key].documentation?.section; + return documentationMap[key].documentation?.section; } if (key in tinymathFunctions) { return tinymathFunctions[key].section; @@ -213,14 +108,8 @@ max(system.network.in.bytes, reducedTimeRange="30m") // Es aggs helpGroups.push( createNewSection( - i18n.translate('xpack.lens.formulaDocumentation.elasticsearchSection', { - defaultMessage: 'Elasticsearch', - }), - i18n.translate('xpack.lens.formulaDocumentation.elasticsearchSectionDescription', { - defaultMessage: - 'These functions will be executed on the raw documents for each row of the resulting table, aggregating all documents matching the break down dimensions into a single value.', - }), - + formulasSections.elasticsearch.label, + formulasSections.elasticsearch.description, esFunctions, operationDefinitionMap ) @@ -229,14 +118,8 @@ max(system.network.in.bytes, reducedTimeRange="30m") // Calculations aggs helpGroups.push( createNewSection( - i18n.translate('xpack.lens.formulaDocumentation.columnCalculationSection', { - defaultMessage: 'Column calculations', - }), - i18n.translate('xpack.lens.formulaDocumentation.columnCalculationSectionDescription', { - defaultMessage: - 'These functions are executed for each row, but are provided with the whole column as context. This is also known as a window function.', - }), - + formulasSections.calculations.label, + formulasSections.calculations.description, calculationFunctions, operationDefinitionMap ) @@ -244,14 +127,8 @@ max(system.network.in.bytes, reducedTimeRange="30m") helpGroups.push( createNewSection( - i18n.translate('xpack.lens.formulaDocumentation.mathSection', { - defaultMessage: 'Math', - }), - i18n.translate('xpack.lens.formulaDocumentation.mathSectionDescription', { - defaultMessage: - 'These functions will be executed for reach row of the resulting table using single values from the same row calculated using other functions.', - }), - + formulasSections.math.label, + formulasSections.math.description, mathOperations, operationDefinitionMap ) @@ -259,13 +136,8 @@ max(system.network.in.bytes, reducedTimeRange="30m") helpGroups.push( createNewSection( - i18n.translate('xpack.lens.formulaDocumentation.comparisonSection', { - defaultMessage: 'Comparison', - }), - i18n.translate('xpack.lens.formulaDocumentation.comparisonSectionDescription', { - defaultMessage: 'These functions are used to perform value comparison.', - }), - + formulasSections.comparison.label, + formulasSections.comparison.description, comparisonOperations, operationDefinitionMap ) @@ -273,13 +145,8 @@ max(system.network.in.bytes, reducedTimeRange="30m") helpGroups.push( createNewSection( - i18n.translate('xpack.lens.formulaDocumentation.constantsSection', { - defaultMessage: 'Kibana context', - }), - i18n.translate('xpack.lens.formulaDocumentation.constantsSectionDescription', { - defaultMessage: - 'These functions are used to retrieve Kibana context variables, which are the date histogram `interval`, the current `now` and the selected `time_range` and help you to compute date math operations.', - }), + formulasSections.context.label, + formulasSections.context.description, constantsOperations, operationDefinitionMap ) @@ -287,46 +154,7 @@ max(system.network.in.bytes, reducedTimeRange="30m") const sections = { groups: helpGroups, - initialSection: ( - - ), + initialSection: , }; return sections; @@ -369,7 +197,9 @@ export function getFunctionSignatureLabel( } } const extraComma = extraArgs.length ? ', ' : ''; - return `${name}(${def.documentation?.signature}${extraComma}${extraArgs.join(', ')})`; + return `${name}(${documentationMap[name].documentation?.signature}${extraComma}${extraArgs.join( + ', ' + )})`; } return ''; } @@ -396,7 +226,7 @@ export function getHelpTextContent( operationDefinitionMap: ParamEditorProps['operationDefinitionMap'] ): { description: string; examples: string[] } { const definition = operationDefinitionMap[type]; - const description = definition.documentation?.description ?? ''; + const description = documentationMap[type].documentation?.description ?? ''; // as for the time being just add examples text. // Later will enrich with more information taken from the operation definitions. diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts index 419208ec48d80..270aa5f2c1bb7 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.test.ts @@ -9,10 +9,10 @@ import { parse } from '@kbn/tinymath'; import { monaco } from '@kbn/monaco'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; +import { tinymathFunctions } from '@kbn/lens-formula-docs'; import { createMockedIndexPattern } from '../../../../mocks'; import { GenericOperationDefinition } from '../..'; import type { OperationMetadata, IndexPatternField } from '../../../../../../types'; -import { tinymathFunctions } from '../util'; import { getSignatureHelp, getHover, @@ -48,11 +48,6 @@ const operationDefinitionMap: Record = { getPossibleOperationForField: jest.fn((field: IndexPatternField) => field.type === 'number' ? numericOperation() : undefined ), - documentation: { - section: 'elasticsearch', - signature: 'field: string', - description: 'description', - }, }), count: createOperationDefinitionMock('count', { getPossibleOperationForField: (field: IndexPatternField) => @@ -93,7 +88,7 @@ const operationDefinitionMap: Record = { ), }; -describe('math completion', () => { +describe('[Lens formula] math completion', () => { describe('signature help', () => { function unwrapSignatures(signatureResult: monaco.languages.SignatureHelpResult) { return signatureResult.value.signatures[0]; @@ -106,15 +101,21 @@ describe('math completion', () => { it('should return a signature for a field-based ES function', () => { expect(unwrapSignatures(getSignatureHelp('sum()', 4, operationDefinitionMap))).toEqual({ label: 'sum(field: string)', - documentation: { value: 'description' }, + documentation: { + value: ` +Returns the sum of a field. This function only works for number fields.`, + }, parameters: [{ label: 'field' }], }); }); it('should return a signature for count', () => { expect(unwrapSignatures(getSignatureHelp('count()', 6, operationDefinitionMap))).toEqual({ - label: 'count(undefined)', - documentation: { value: '' }, + label: 'count([field: string])', + documentation: { + value: ` +The total number of documents. When you provide a field, the total number of field values is counted. When you use the Count function for fields that have multiple values in a single document, all values are counted.`, + }, parameters: [], }); }); @@ -126,7 +127,11 @@ describe('math completion', () => { ) ).toEqual({ label: expect.stringContaining('moving_average('), - documentation: { value: '' }, + documentation: { + value: ` +Calculates the moving average of a metric over time, averaging the last n-th values to calculate the current value. To use this function, you need to configure a date histogram dimension as well. +The default window value is 5.`, + }, parameters: [ { label: 'function' }, { @@ -145,7 +150,10 @@ describe('math completion', () => { ).toEqual({ label: expect.stringContaining('count('), parameters: [], - documentation: { value: '' }, + documentation: { + value: ` +The total number of documents. When you provide a field, the total number of field values is counted. When you use the Count function for fields that have multiple values in a single document, all values are counted.`, + }, }); }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts index 2213391235847..eac9f66c77107 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/editor/math_completion.ts @@ -22,12 +22,13 @@ import type { } from '@kbn/unified-search-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { parseTimeShift } from '@kbn/data-plugin/common'; +import { tinymathFunctions } from '@kbn/lens-formula-docs'; import moment from 'moment'; import { nonNullable } from '../../../../../../utils'; import { DateRange } from '../../../../../../../common/types'; import type { IndexPattern } from '../../../../../../types'; import { memoizedGetAvailableOperationsByMetadata } from '../../../operations'; -import { tinymathFunctions, groupArgsByType, unquotedStringRegex } from '../util'; +import { groupArgsByType, unquotedStringRegex } from '../util'; import type { GenericOperationDefinition } from '../..'; import { getFunctionSignatureLabel, getHelpTextContent } from './formula_help'; import { hasFunctionFieldArgument } from '../validation'; diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx index ea77bc3e429ab..382fd2fa6a9ca 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { tinymathFunctions } from '@kbn/lens-formula-docs'; import { createMockedIndexPattern } from '../../../mocks'; import { formulaOperation, @@ -15,7 +16,6 @@ import type { FormulaIndexPatternColumn } from './formula'; import { insertOrReplaceFormulaColumn } from './parse'; import type { FormBasedLayer } from '../../../types'; import { IndexPattern } from '../../../../../types'; -import { tinymathFunctions } from './util'; import { TermsIndexPatternColumn } from '../terms'; import { MovingAverageIndexPatternColumn } from '../calculations'; import { StaticValueIndexPatternColumn } from '../static_value'; @@ -82,7 +82,7 @@ const operationDefinitionMap: Record = { }), }; -describe('formula', () => { +describe('[Lens] formula', () => { let layer: FormBasedLayer; beforeEach(() => { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/util.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/util.ts index 6dcc727ec0e70..87cdde46843e2 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/util.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/util.ts @@ -6,7 +6,6 @@ */ import { groupBy, isObject } from 'lodash'; -import { i18n } from '@kbn/i18n'; import type { TinymathAST, TinymathFunction, @@ -14,6 +13,7 @@ import type { TinymathVariable, } from '@kbn/tinymath'; import type { Query } from '@kbn/es-query'; +import { tinymathFunctions } from '@kbn/lens-formula-docs'; import { nonNullable } from '../../../../../utils'; import type { OperationDefinition, @@ -108,635 +108,6 @@ export function getOperationParams( }, {}); } -export function getTypeI18n(type: string) { - if (type === 'number') { - return i18n.translate('xpack.lens.formula.number', { defaultMessage: 'number' }); - } - if (type === 'string') { - return i18n.translate('xpack.lens.formula.string', { defaultMessage: 'string' }); - } - if (type === 'boolean') { - return i18n.translate('xpack.lens.formula.boolean', { defaultMessage: 'boolean' }); - } - return ''; -} - -export const tinymathFunctions: Record< - string, - { - section: 'math' | 'comparison'; - positionalArguments: Array<{ - name: string; - optional?: boolean; - defaultValue?: string | number; - type?: string; - alternativeWhenMissing?: string; - }>; - // Help is in Markdown format - help: string; - // When omitted defaults to "number". - // Used for comparison functions return type - outputType?: string; - } -> = { - add: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.addFunction.markdown', { - defaultMessage: ` -Adds up two numbers. -Also works with \`+\` symbol. - -Example: Calculate the sum of two fields - -\`sum(price) + sum(tax)\` - -Example: Offset count by a static value - -\`add(count(), 5)\` - `, - }), - }, - subtract: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.subtractFunction.markdown', { - defaultMessage: ` -Subtracts the first number from the second number. -Also works with \`-\` symbol. - -Example: Calculate the range of a field -\`subtract(max(bytes), min(bytes))\` - `, - }), - }, - multiply: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.multiplyFunction.markdown', { - defaultMessage: ` -Multiplies two numbers. -Also works with \`*\` symbol. - -Example: Calculate price after current tax rate -\`sum(bytes) * last_value(tax_rate)\` - -Example: Calculate price after constant tax rate -\`multiply(sum(price), 1.2)\` - `, - }), - }, - divide: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.divideFunction.markdown', { - defaultMessage: ` -Divides the first number by the second number. -Also works with \`/\` symbol - -Example: Calculate profit margin -\`sum(profit) / sum(revenue)\` - -Example: \`divide(sum(bytes), 2)\` - `, - }), - }, - abs: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.absFunction.markdown', { - defaultMessage: ` -Calculates absolute value. A negative value is multiplied by -1, a positive value stays the same. - -Example: Calculate average distance to sea level \`abs(average(altitude))\` - `, - }), - }, - cbrt: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.cbrtFunction.markdown', { - defaultMessage: ` -Cube root of value. - -Example: Calculate side length from volume -\`cbrt(last_value(volume))\` - `, - }), - }, - ceil: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.ceilFunction.markdown', { - defaultMessage: ` -Ceiling of value, rounds up. - -Example: Round up price to the next dollar -\`ceil(sum(price))\` - `, - }), - }, - clamp: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.min', { defaultMessage: 'min' }), - type: getTypeI18n('number'), - alternativeWhenMissing: 'pick_max', - }, - { - name: i18n.translate('xpack.lens.formula.max', { defaultMessage: 'max' }), - type: getTypeI18n('number'), - alternativeWhenMissing: 'pick_min', - }, - ], - help: i18n.translate('xpack.lens.formula.clampFunction.markdown', { - defaultMessage: ` -Limits the value from a minimum to maximum. - -Example: Make sure to catch outliers -\`\`\` -clamp( - average(bytes), - percentile(bytes, percentile=5), - percentile(bytes, percentile=95) -) -\`\`\` -`, - }), - }, - cube: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.cubeFunction.markdown', { - defaultMessage: ` -Calculates the cube of a number. - -Example: Calculate volume from side length -\`cube(last_value(length))\` - `, - }), - }, - exp: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.expFunction.markdown', { - defaultMessage: ` -Raises *e* to the nth power. - -Example: Calculate the natural exponential function - -\`exp(last_value(duration))\` - `, - }), - }, - fix: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.fixFunction.markdown', { - defaultMessage: ` -For positive values, takes the floor. For negative values, takes the ceiling. - -Example: Rounding towards zero -\`fix(sum(profit))\` - `, - }), - }, - floor: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.floorFunction.markdown', { - defaultMessage: ` -Round down to nearest integer value - -Example: Round down a price -\`floor(sum(price))\` - `, - }), - }, - log: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.base', { defaultMessage: 'base' }), - optional: true, - defaultValue: 'e', - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.logFunction.markdown', { - defaultMessage: ` -Logarithm with optional base. The natural base *e* is used as default. - -Example: Calculate number of bits required to store values -\`\`\` -log(sum(bytes)) -log(sum(bytes), 2) -\`\`\` - `, - }), - }, - mod: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.base', { defaultMessage: 'base' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.modFunction.markdown', { - defaultMessage: ` -Remainder after dividing the function by a number - -Example: Calculate last three digits of a value -\`mod(sum(price), 1000)\` - `, - }), - }, - pow: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.base', { defaultMessage: 'base' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.powFunction.markdown', { - defaultMessage: ` -Raises the value to a certain power. The second argument is required - -Example: Calculate volume based on side length -\`pow(last_value(length), 3)\` - `, - }), - }, - round: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.decimals', { defaultMessage: 'decimals' }), - optional: true, - defaultValue: 0, - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.roundFunction.markdown', { - defaultMessage: ` -Rounds to a specific number of decimal places, default of 0 - -Examples: Round to the cent -\`\`\` -round(sum(bytes)) -round(sum(bytes), 2) -\`\`\` - `, - }), - }, - sqrt: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.sqrtFunction.markdown', { - defaultMessage: ` -Square root of a positive value only - -Example: Calculate side length based on area -\`sqrt(last_value(area))\` - `, - }), - }, - square: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.squareFunction.markdown', { - defaultMessage: ` -Raise the value to the 2nd power - -Example: Calculate area based on side length -\`square(last_value(length))\` - `, - }), - }, - pick_max: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.maxFunction.markdown', { - defaultMessage: ` -Finds the maximum value between two numbers. - -Example: Find the maximum between two fields averages -\`pick_max(average(bytes), average(memory))\` - `, - }), - }, - pick_min: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.minFunction.markdown', { - defaultMessage: ` -Finds the minimum value between two numbers. - -Example: Find the minimum between two fields averages -\`pick_min(average(bytes), average(memory))\` - `, - }), - }, - defaults: { - section: 'math', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.value', { defaultMessage: 'value' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.defaultValue', { defaultMessage: 'default' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.defaultFunction.markdown', { - defaultMessage: ` -Returns a default numeric value when value is null. - -Example: Return -1 when a field has no data -\`defaults(average(bytes), -1)\` -`, - }), - }, - lt: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - outputType: getTypeI18n('boolean'), - help: i18n.translate('xpack.lens.formula.ltFunction.markdown', { - defaultMessage: ` -Performs a lower than comparison between two values. -To be used as condition for \`ifelse\` comparison function. -Also works with \`<\` symbol. - -Example: Returns true if the average of bytes is lower than the average amount of memory -\`average(bytes) <= average(memory)\` - -Example: \`lt(average(bytes), 1000)\` - `, - }), - }, - gt: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - outputType: getTypeI18n('boolean'), - help: i18n.translate('xpack.lens.formula.gtFunction.markdown', { - defaultMessage: ` -Performs a greater than comparison between two values. -To be used as condition for \`ifelse\` comparison function. -Also works with \`>\` symbol. - -Example: Returns true if the average of bytes is greater than the average amount of memory -\`average(bytes) > average(memory)\` - -Example: \`gt(average(bytes), 1000)\` - `, - }), - }, - eq: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - outputType: getTypeI18n('boolean'), - help: i18n.translate('xpack.lens.formula.eqFunction.markdown', { - defaultMessage: ` -Performs an equality comparison between two values. -To be used as condition for \`ifelse\` comparison function. -Also works with \`==\` symbol. - -Example: Returns true if the average of bytes is exactly the same amount of average memory -\`average(bytes) == average(memory)\` - -Example: \`eq(sum(bytes), 1000000)\` - `, - }), - }, - lte: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - outputType: getTypeI18n('boolean'), - help: i18n.translate('xpack.lens.formula.lteFunction.markdown', { - defaultMessage: ` -Performs a lower than or equal comparison between two values. -To be used as condition for \`ifelse\` comparison function. -Also works with \`<=\` symbol. - -Example: Returns true if the average of bytes is lower than or equal to the average amount of memory -\`average(bytes) <= average(memory)\` - -Example: \`lte(average(bytes), 1000)\` - `, - }), - }, - gte: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - outputType: getTypeI18n('boolean'), - help: i18n.translate('xpack.lens.formula.gteFunction.markdown', { - defaultMessage: ` -Performs a greater than comparison between two values. -To be used as condition for \`ifelse\` comparison function. -Also works with \`>=\` symbol. - -Example: Returns true if the average of bytes is greater than or equal to the average amount of memory -\`average(bytes) >= average(memory)\` - -Example: \`gte(average(bytes), 1000)\` - `, - }), - }, - ifelse: { - section: 'comparison', - positionalArguments: [ - { - name: i18n.translate('xpack.lens.formula.condition', { defaultMessage: 'condition' }), - type: getTypeI18n('boolean'), - }, - { - name: i18n.translate('xpack.lens.formula.left', { defaultMessage: 'left' }), - type: getTypeI18n('number'), - }, - { - name: i18n.translate('xpack.lens.formula.right', { defaultMessage: 'right' }), - type: getTypeI18n('number'), - }, - ], - help: i18n.translate('xpack.lens.formula.ifElseFunction.markdown', { - defaultMessage: ` -Returns a value depending on whether the element of condition is true or false. - -Example: Average revenue per customer but in some cases customer id is not provided which counts as additional customer -\`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))\` - `, - }), - }, -}; - export function isMathNode(node: TinymathAST | string) { return isObject(node) && node.type === 'function' && tinymathFunctions[node.name]; } diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/validation.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/validation.ts index 95eb8a84e6849..5d6085c377829 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/validation.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/validation.ts @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import { parse, TinymathLocation, TinymathVariable } from '@kbn/tinymath'; import type { TinymathAST, TinymathFunction, TinymathNamedArgument } from '@kbn/tinymath'; import { luceneStringToDsl, toElasticsearchQuery, fromKueryExpression } from '@kbn/es-query'; +import { tinymathFunctions, getTypeI18n } from '@kbn/lens-formula-docs'; import type { Query } from '@kbn/es-query'; import { isAbsoluteTimeShift, @@ -24,11 +25,9 @@ import { findMathNodes, findVariables, getOperationParams, - getTypeI18n, getValueOrName, groupArgsByType, isMathNode, - tinymathFunctions, } from './util'; import type { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts index 3c62f34cbc1f2..fd6b68c2bf65d 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts @@ -350,11 +350,6 @@ interface BaseOperationDefinitionProps< * Operations can be used as middleware for other operations, hence not shown in the panel UI */ hidden?: boolean; - documentation?: { - signature: string; - description: string; - section: 'elasticsearch' | 'calculation' | 'constants'; - }; quickFunctionDocumentation?: string; /** * React component for operation field specific behaviour diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/last_value.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/last_value.tsx index 6432577173af2..0861148aacc3d 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/last_value.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/last_value.tsx @@ -18,6 +18,7 @@ import { import { AggFunctionsMapping } from '@kbn/data-plugin/public'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; +import { LAST_VALUE_ID, LAST_VALUE_NAME } from '@kbn/lens-formula-docs'; import type { FieldBasedOperationErrorMessage, OperationDefinition } from '.'; import { FieldBasedIndexPatternColumn, ValueFormatConfig } from './column_types'; import type { IndexPatternField, IndexPattern } from '../../../../types'; @@ -136,7 +137,7 @@ function setDefaultShowArrayValues( } export interface LastValueIndexPatternColumn extends FieldBasedIndexPatternColumn { - operationType: 'last_value'; + operationType: typeof LAST_VALUE_ID; params: { sortField: string; showArrayValues: boolean; @@ -161,10 +162,8 @@ export const lastValueOperation: OperationDefinition< Partial, true > = { - type: 'last_value', - displayName: i18n.translate('xpack.lens.indexPattern.lastValue', { - defaultMessage: 'Last value', - }), + type: LAST_VALUE_ID, + displayName: LAST_VALUE_NAME, getDefaultLabel: (column, columns, indexPattern) => ofName( getSafeName(column.sourceField, indexPattern), @@ -250,7 +249,7 @@ export const lastValueOperation: OperationDefinition< return { label: ofName(field.displayName, previousColumn?.timeShift, previousColumn?.reducedTimeRange), dataType: field.type as DataType, - operationType: 'last_value', + operationType: LAST_VALUE_ID, isBucketed: false, scale: getScale(field.type), sourceField: field.name, @@ -450,22 +449,6 @@ export const lastValueOperation: OperationDefinition< ); }, - documentation: { - section: 'elasticsearch', - signature: i18n.translate('xpack.lens.indexPattern.lastValue.signature', { - defaultMessage: 'field: string', - }), - description: i18n.translate('xpack.lens.indexPattern.lastValue.documentation.markdown', { - defaultMessage: ` -Returns the value of a field from the last document, ordered by the default time field of the data view. - -This function is usefull the retrieve the latest state of an entity. - -Example: Get the current status of server A: -\`last_value(server.status, kql=\'server.name="A"\')\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.lastValue.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx index 589b840c29f22..87e3432d54e2f 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/metrics.tsx @@ -10,6 +10,20 @@ import React from 'react'; import { EuiSwitch, EuiText } from '@elastic/eui'; import { euiThemeVars } from '@kbn/ui-theme'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; +import { + AVG_ID, + AVG_NAME, + MAX_ID, + MAX_NAME, + MEDIAN_ID, + MEDIAN_NAME, + MIN_ID, + MIN_NAME, + STD_DEVIATION_ID, + STD_DEVIATION_NAME, + SUM_ID, + SUM_NAME, +} from '@kbn/lens-formula-docs'; import { LayerSettingsFeatures, OperationDefinition, ParamEditorProps } from '.'; import { getFormatFromPreviousColumn, @@ -62,7 +76,6 @@ function buildMetricOperation>({ supportsDate, hideZeroOption, aggConfigParams, - documentationDescription, quickFunctionDocumentation, unsupportedSettings, }: { @@ -228,28 +241,6 @@ function buildMetricOperation>({ ]), filterable: true, canReduceTimeRange: true, - documentation: { - section: 'elasticsearch', - signature: i18n.translate('xpack.lens.indexPattern.metric.signature', { - defaultMessage: 'field: string', - }), - description: - documentationDescription || - i18n.translate('xpack.lens.indexPattern.metric.documentation.markdown', { - defaultMessage: ` -Returns the {metric} of a field. This function only works for number fields. - -Example: Get the {metric} of price: -\`{metric}(price)\` - -Example: Get the {metric} of price for orders from the UK: -\`{metric}(price, kql='location:UK')\` - `, - values: { - metric: type, - }, - }), - }, quickFunctionDocumentation, shiftable: true, } as OperationDefinition; @@ -263,10 +254,8 @@ export type MaxIndexPatternColumn = MetricColumn<'max'>; export type MedianIndexPatternColumn = MetricColumn<'median'>; export const minOperation = buildMetricOperation({ - type: 'min', - displayName: i18n.translate('xpack.lens.indexPattern.min', { - defaultMessage: 'Minimum', - }), + type: MIN_ID, + displayName: MIN_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.minOf', { defaultMessage: 'Minimum of {name}', @@ -287,10 +276,8 @@ export const minOperation = buildMetricOperation({ }); export const maxOperation = buildMetricOperation({ - type: 'max', - displayName: i18n.translate('xpack.lens.indexPattern.max', { - defaultMessage: 'Maximum', - }), + type: MAX_ID, + displayName: MAX_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.maxOf', { defaultMessage: 'Maximum of {name}', @@ -311,11 +298,9 @@ export const maxOperation = buildMetricOperation({ }); export const averageOperation = buildMetricOperation({ - type: 'average', + type: AVG_ID, priority: 2, - displayName: i18n.translate('xpack.lens.indexPattern.avg', { - defaultMessage: 'Average', - }), + displayName: AVG_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.avgOf', { defaultMessage: 'Average of {name}', @@ -335,10 +320,8 @@ export const averageOperation = buildMetricOperation({ export const standardDeviationOperation = buildMetricOperation( { - type: 'standard_deviation', - displayName: i18n.translate('xpack.lens.indexPattern.standardDeviation', { - defaultMessage: 'Standard deviation', - }), + type: STD_DEVIATION_ID, + displayName: STD_DEVIATION_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.standardDeviationOf', { defaultMessage: 'Standard deviation of {name}', @@ -351,20 +334,6 @@ export const standardDeviationOperation = buildMetricOperation({ - type: 'sum', + type: SUM_ID, priority: 1, - displayName: i18n.translate('xpack.lens.indexPattern.sum', { - defaultMessage: 'Sum', - }), + displayName: SUM_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.sumOf', { defaultMessage: 'Sum of {name}', @@ -401,11 +368,9 @@ export const sumOperation = buildMetricOperation({ }); export const medianOperation = buildMetricOperation({ - type: 'median', + type: MEDIAN_ID, priority: 3, - displayName: i18n.translate('xpack.lens.indexPattern.median', { - defaultMessage: 'Median', - }), + displayName: MEDIAN_NAME, ofName: (name) => i18n.translate('xpack.lens.indexPattern.medianOf', { defaultMessage: 'Median of {name}', diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx index 3b9ecf0417313..be40f31c770aa 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx @@ -16,6 +16,7 @@ import { ExpressionAstFunctionBuilder, } from '@kbn/expressions-plugin/public'; import { useDebouncedValue } from '@kbn/visualization-ui-components'; +import { PERCENTILE_ID, PERCENTILE_NAME } from '@kbn/lens-formula-docs'; import { OperationDefinition } from '.'; import { getFormatFromPreviousColumn, @@ -33,7 +34,7 @@ import { getColumnReducedTimeRangeError } from '../../reduced_time_range_utils'; import { getGroupByKey, groupByKey } from './get_group_by_key'; export interface PercentileIndexPatternColumn extends FieldBasedIndexPatternColumn { - operationType: 'percentile'; + operationType: typeof PERCENTILE_ID; params: { percentile: number; format?: { @@ -110,11 +111,9 @@ export const percentileOperation: OperationDefinition< { percentile: number }, true > = { - type: 'percentile', + type: PERCENTILE_ID, allowAsReference: true, - displayName: i18n.translate('xpack.lens.indexPattern.percentile', { - defaultMessage: 'Percentile', - }), + displayName: PERCENTILE_NAME, input: 'field', operationParams: [ { name: 'percentile', type: 'number', required: false, defaultValue: DEFAULT_PERCENTILE_VALUE }, @@ -161,7 +160,7 @@ export const percentileOperation: OperationDefinition< buildColumn: ({ field, previousColumn, indexPattern }, columnParams) => { const existingPercentileParam = previousColumn && - isColumnOfType('percentile', previousColumn) && + isColumnOfType(PERCENTILE_ID, previousColumn) && previousColumn.params.percentile; const newPercentileParam = columnParams?.percentile ?? (existingPercentileParam || DEFAULT_PERCENTILE_VALUE); @@ -173,7 +172,7 @@ export const percentileOperation: OperationDefinition< previousColumn?.reducedTimeRange ), dataType: 'number', - operationType: 'percentile', + operationType: PERCENTILE_ID, sourceField: field.name, isBucketed: false, scale: 'ratio', @@ -431,20 +430,6 @@ export const percentileOperation: OperationDefinition< ); }, - documentation: { - section: 'elasticsearch', - signature: i18n.translate('xpack.lens.indexPattern.percentile.signature', { - defaultMessage: 'field: string, [percentile]: number', - }), - description: i18n.translate('xpack.lens.indexPattern.percentile.documentation.markdown', { - defaultMessage: ` -Returns the specified percentile of the values of a field. This is the value n percent of the values occuring in documents are smaller. - -Example: Get the number of bytes larger than 95 % of values: -\`percentile(bytes, percentile=95)\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.percentile.documentation.quick', { diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile_ranks.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile_ranks.tsx index 54d6f379d9e5f..3eb867442ef17 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile_ranks.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile_ranks.tsx @@ -11,6 +11,7 @@ import { i18n } from '@kbn/i18n'; import { AggFunctionsMapping } from '@kbn/data-plugin/public'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; import { useDebouncedValue } from '@kbn/visualization-ui-components'; +import { PERCENTILE_RANK_ID, PERCENTILE_RANK_NAME } from '@kbn/lens-formula-docs'; import { OperationDefinition } from '.'; import { getFormatFromPreviousColumn, @@ -27,7 +28,7 @@ import { FormRow } from './shared_components'; import { getColumnReducedTimeRangeError } from '../../reduced_time_range_utils'; export interface PercentileRanksIndexPatternColumn extends FieldBasedIndexPatternColumn { - operationType: 'percentile_rank'; + operationType: typeof PERCENTILE_RANK_ID; params: { value: number; }; @@ -63,11 +64,9 @@ export const percentileRanksOperation: OperationDefinition< { value: number }, true > = { - type: 'percentile_rank', + type: PERCENTILE_RANK_ID, allowAsReference: true, - displayName: i18n.translate('xpack.lens.indexPattern.percentileRank', { - defaultMessage: 'Percentile rank', - }), + displayName: PERCENTILE_RANK_NAME, input: 'field', operationParams: [ { @@ -256,20 +255,6 @@ export const percentileRanksOperation: OperationDefinition< ); }, - documentation: { - section: 'elasticsearch', - signature: i18n.translate('xpack.lens.indexPattern.percentileRanks.signature', { - defaultMessage: 'field: string, [value]: number', - }), - description: i18n.translate('xpack.lens.indexPattern.percentileRanks.documentation.markdown', { - defaultMessage: ` -Returns the percentage of values which are below a certain value. For example, if a value is greater than or equal to 95% of the observed values it is said to be at the 95th percentile rank - -Example: Get the percentage of values which are below of 100: -\`percentile_rank(bytes, value=100)\` - `, - }), - }, quickFunctionDocumentation: i18n.translate( 'xpack.lens.indexPattern.percentileRanks.documentation.quick', { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss index cd2ee706c1e18..35606c67382d5 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss @@ -25,8 +25,8 @@ flex: 0 0 auto; height: $lnsSuggestionHeight; margin-right: $euiSizeS; - margin-left: $euiSizeXS / 2; - margin-bottom: $euiSizeXS / 2; + margin-left: calc($euiSizeXS / 2); + margin-bottom: calc($euiSizeXS / 2); padding: 0 $euiSizeS; box-shadow: none !important; // sass-lint:disable-line no-important diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx new file mode 100644 index 0000000000000..521ce1ecaf859 --- /dev/null +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_errors.tsx @@ -0,0 +1,53 @@ +/* + * Copyright 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 } from 'react'; +import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiPagination } from '@elastic/eui'; +import type { UserMessage } from '../../../types'; + +interface Props { + errors: Array; + title: string; +} + +export function WorkspaceErrors(props: Props) { + const [activePage, setActivePage] = useState(0); + + const activeError = props.errors.length ? props.errors[activePage] : ''; + + return ( + 1 ? ( + + + + + + ) : ( + [] + ) + } + body={ +

    + {typeof activeError === 'string' ? activeError : activeError.longMessage} +
    + } + title={

    {props.title}

    } + iconColor="danger" + iconType="warning" + data-test-subj="lnsWorkspaceErrors" + /> + ); +} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx index a8e834e43881c..930dd4940171c 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx @@ -703,9 +703,9 @@ describe('workspace_panel', () => { instance.update(); // EuiFlexItem duplicates internally the attribute, so we need to filter only the most inner one here - expect( - instance.find('[data-test-subj="workspace-more-errors-button"]').last().text() - ).toEqual(' +1 error'); + expect(instance.find('[data-test-subj="workspace-error-message"]').last().text()).toEqual( + `i'm an error` + ); expect(instance.find(expressionRendererMock)).toHaveLength(0); expect(getUserMessages).toHaveBeenCalledWith(['visualization', 'visualizationInEditor'], { severity: 'error', 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 bc3b71c08487a..18ea4791d6847 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 @@ -12,16 +12,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { toExpression } from '@kbn/interpreter'; import type { KibanaExecutionContext } from '@kbn/core-execution-context-common'; import { i18n } from '@kbn/i18n'; -import { - EuiEmptyPrompt, - EuiFlexGroup, - EuiFlexItem, - EuiText, - EuiButtonEmpty, - EuiLink, - EuiTextColor, - EuiSpacer, -} from '@elastic/eui'; +import { EuiText, EuiButtonEmpty, EuiLink, EuiTextColor } from '@elastic/eui'; import type { CoreStart } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { @@ -83,6 +74,7 @@ import { import type { LensInspector } from '../../../lens_inspector_service'; import { inferTimeField, DONT_CLOSE_DIMENSION_CONTAINER_ON_CLICK_CLASS } from '../../../utils'; import { setChangesApplied } from '../../../state_management/lens_slice'; +import { WorkspaceErrors } from './workspace_errors'; export interface WorkspacePanelProps { visualizationMap: VisualizationMap; @@ -98,7 +90,6 @@ export interface WorkspacePanelProps { } interface WorkspaceState { - expandError: boolean; expressionToRender: string | null | undefined; errors: UserMessage[]; } @@ -166,7 +157,6 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ const searchSessionId = useLensSelector(selectSearchSessionId); const [localState, setLocalState] = useState({ - expandError: false, expressionToRender: undefined, errors: [], }); @@ -724,75 +714,35 @@ export const VisualizationWrapper = ({ const searchSessionId = useLensSelector(selectSearchSessionId); if (errors.length) { - const showExtraErrorsAction = - !localState.expandError && errors.length > 1 ? ( - { - setLocalState((prevState: WorkspaceState) => ({ - ...prevState, - expandError: !prevState.expandError, - })); - }} - data-test-subj="workspace-more-errors-button" - > - {i18n.translate('xpack.lens.editorFrame.configurationFailureMoreErrors', { - defaultMessage: ` +{errors} {errors, plural, one {error} other {errors}}`, - values: { errors: errors.length - 1 }, - })} - - ) : null; - - const [firstMessage, ...rest] = errors; - + const configurationErrorTitle = i18n.translate( + 'xpack.lens.editorFrame.configurationFailureErrors', + { + defaultMessage: `A configuration error occurred`, + } + ); return ( - - - -
    {firstMessage.longMessage}
    - {localState.expandError && ( - <> - - {rest.map((message) => ( -
    - {message.longMessage} - -
    - ))} - - )} - - } - iconColor="danger" - iconType="warning" - /> -
    -
    + +
    ); } + const dataLoadingErrorTitle = i18n.translate('xpack.lens.editorFrame.dataFailure', { + defaultMessage: `An error occurred when loading data`, + }); + return (
    { - const errorsFromRequest = getOriginalRequestErrorMessages(error || null, core.docLinks); + const errorsFromRequest = getOriginalRequestErrorMessages(error || null); const visibleErrorMessages = errorsFromRequest.length - ? errorsFromRequest.map((e) => e.longMessage || e.shortMessage) + ? errorsFromRequest : errorMessage ? [errorMessage] : []; @@ -820,54 +770,7 @@ export const VisualizationWrapper = ({ setDynamicError(true); } - return ( - - - { - setLocalState((prevState: WorkspaceState) => ({ - ...prevState, - expandError: !prevState.expandError, - })); - }} - > - {i18n.translate('xpack.lens.editorFrame.expandRenderingErrorButton', { - defaultMessage: 'Show details of error', - })} - - ) : null - } - body={ - <> -

    - -

    - - {localState.expandError - ? visibleErrorMessages.map((visibleErrorMessage) => - typeof visibleErrorMessage === 'string' ? ( -

    - {visibleErrorMessage} -

    - ) : ( - visibleErrorMessage - ) - ) - : null} - - } - iconColor="danger" - iconType="warning" - /> -
    -
    - ); + return ; }} />
    diff --git a/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts b/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts deleted file mode 100644 index 7e3b696a8e75f..0000000000000 --- a/x-pack/plugins/lens/public/editor_frame_service/error_helper.test.ts +++ /dev/null @@ -1,317 +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 { getOriginalRequestErrorMessages } from './error_helper'; -import type { CoreStart } from '@kbn/core/public'; - -const docLinksMock = { links: { fleet: { datastreamsTSDSMetrics: '' } } } as CoreStart['docLinks']; - -const runtimeFieldError = { - stack: 'Error: EsError\n...', - message: '[lens_merge_tables] > [esaggs] > EsError', - name: 'Error', - original: { - name: 'Error', - message: 'Something', - err: { - message: 'status_exception', - statusCode: 400, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'script_exception', - reason: 'runtime error', - script_stack: [ - 'java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)', - 'java.base/java.lang.Integer.parseInt(Integer.java:652)', - 'java.base/java.lang.Integer.parseInt(Integer.java:770)', - "emit(Integer.parseInt('hello'))", - ' ^---- HERE', - ], - script: "emit(Integer.parseInt('hello'))", - lang: 'painless', - position: { offset: 12, start: 0, end: 31 }, - caused_by: { - type: 'number_format_exception', - reason: 'For input string: "hello"', - }, - }, - }, - ], - }, - }, - }, - }, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'script_exception', - reason: 'runtime error', - script_stack: [ - 'java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)', - 'java.base/java.lang.Integer.parseInt(Integer.java:652)', - 'java.base/java.lang.Integer.parseInt(Integer.java:770)', - "emit(Integer.parseInt('hello'))", - ' ^---- HERE', - ], - script: "emit(Integer.parseInt('hello'))", - lang: 'painless', - position: { offset: 12, start: 0, end: 31 }, - caused_by: { type: 'number_format_exception', reason: 'For input string: "hello"' }, - }, - }, - ], - }, - }, - }, - }, -}; - -const scriptedFieldError = { - stack: 'Error: EsError\n...', - message: '[lens_merge_tables] > [esaggs] > EsError', - name: 'Error', - original: { - name: 'Error', - message: 'Some description', - err: { - message: 'status_exception', - statusCode: 500, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'aggregation_execution_exception', - reason: 'Unsupported script value [hello], expected a number, date, or boolean', - }, - }, - ], - }, - }, - }, - }, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'indexpattern_source', - node: 'jtqB1-UhQluyjeXIpQFqAA', - reason: { - type: 'aggregation_execution_exception', - reason: 'Unsupported script value [hello], expected a number, date, or boolean', - }, - }, - ], - }, - }, - }, - }, -}; - -const networkError = { - stack: 'Error: Batch request failed with status 0', - message: '[lens_merge_tables] > [esaggs] > Batch request failed with status 0', - name: 'Error', - original: { - name: 'Error', - message: 'Batch request failed with status 0', - stack: 'Error: Batch request failed with status 0', - }, -}; - -// EsAggs will report an internal error when user attempts to use a runtime field on an indexpattern he has no access to -const indexpatternAccessError = { - stack: "TypeError: Cannot read property 'values' of undefined\n", - message: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - name: 'TypeError', - original: { - message: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - stack: "[lens_merge_tables] > [esaggs] > Cannot read property 'values' of undefined", - }, -}; - -const tsdbCounterUsedWithWrongOperationError = { - stack: - 'Error: EsError: Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - message: - '[layeredXyVis] > [esaggs] > EsError: Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - name: 'Error', - original: { - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'tsdb_index', - reason: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - ], - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - }, - }, - }, - err: { - message: - 'status_exception\n\tCaused by:\n\t\tsearch_phase_execution_exception: all shards failed', - statusCode: 400, - attributes: { - error: { - type: 'status_exception', - reason: 'error while executing search', - caused_by: { - type: 'search_phase_execution_exception', - reason: 'all shards failed', - phase: 'query', - grouped: true, - failed_shards: [ - { - shard: 0, - index: 'tsdb_index', - reason: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - ], - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - caused_by: { - type: 'illegal_argument_exception', - reason: - 'Field [bytes_counter] of type [long][counter] is not supported for aggregation [sum]', - }, - }, - }, - }, - }, - }, - }, -}; - -describe('lens_error_helpers', () => { - describe('getOriginalRequestErrorMessages', () => { - it('should report no errors if not parsable', () => { - expect(getOriginalRequestErrorMessages(null, docLinksMock)).toEqual([]); - }); - - it('should report an error for a runtime field error', () => { - expect(getOriginalRequestErrorMessages(runtimeFieldError, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: - 'Request error: number_format_exception, For input string: "hello" in "emit(Integer.parseInt(\'hello\'))" (Painless script)', - }), - ]); - }); - - it('should report an error for a scripted field error', () => { - expect(getOriginalRequestErrorMessages(scriptedFieldError, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: - 'Request error: aggregation_execution_exception, Unsupported script value [hello], expected a number, date, or boolean in Painless script', - }), - ]); - }); - - it('should report the original es aggs error for runtime fields for indexpattern not accessible', () => { - expect( - getOriginalRequestErrorMessages(indexpatternAccessError as Error, docLinksMock) - ).toEqual([ - expect.objectContaining({ - shortMessage: indexpatternAccessError.message, - }), - ]); - }); - - it("should report a network custom message when there's a network/connection problem", () => { - expect(getOriginalRequestErrorMessages(networkError as Error, docLinksMock)).toEqual([ - expect.objectContaining({ - shortMessage: 'Network error, try again later or contact your administrator.', - }), - ]); - }); - - it('should report two specific errors in case of an unsupported operation applied to a TSDB counter', () => { - expect( - getOriginalRequestErrorMessages( - tsdbCounterUsedWithWrongOperationError as Error, - docLinksMock - ) - ).toEqual([ - expect.objectContaining({ - shortMessage: - 'The field [bytes_counter] of Time series type [counter] has been used with the unsupported operation [sum].', - }), - ]); - }); - }); -}); diff --git a/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx b/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx index 475e2e17da2ea..062cbcc867fa2 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/error_helper.tsx @@ -5,185 +5,31 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; -import { isEqual, uniqWith } from 'lodash'; -import { estypes } from '@elastic/elasticsearch'; import { ExpressionRenderError } from '@kbn/expressions-plugin/public'; -import type { CoreStart } from '@kbn/core/public'; -import { isEsError } from '@kbn/search-errors'; +import { renderSearchError } from '@kbn/search-errors'; import React from 'react'; -import { EuiLink } from '@elastic/eui'; import { RemovableUserMessage } from '../types'; -interface RequestError extends Error { - body?: { attributes?: { error: { caused_by: estypes.ErrorCause } } }; -} - -interface ReasonDescription { - type: string; - reason: string; - context?: ReasonDescription; -} - -interface EsAggError { - message: string; - stack: string; -} - -const isNetworkError = (e: Error): boolean => { - return e.message === 'Batch request failed with status 0'; // Note: 0 here means Network error -}; - -const isRequestError = (e: Error | RequestError): e is RequestError => { - if ('body' in e) { - return e.body?.attributes?.error?.caused_by !== undefined; - } - return false; -}; - -const isTSDBError = (e: ReasonDescription): boolean => { - return ( - e.type === 'illegal_argument_exception' && - /\]\[counter\] is not supported for aggregation/.test(e.reason) - ); -}; - -// what happens for runtime field used on indexpatterns not accessible to the user? -// they will throw on the kibana side as data will be undefined -const isEsAggError = (e: Error | EsAggError): e is EsAggError => { - return 'message' in e && 'stack' in e && !isRequestError(e as Error) && !isEsError(e); -}; - -function getNestedErrorClauseWithContext({ - type, - reason = '', - caused_by: causedBy, - lang, - script, -}: estypes.ErrorCause): ReasonDescription[] { - if (!causedBy) { - // scripted fields error has changed with no particular hint about painless in it, - // so it tries to lookup in the message for the script word - if (/script/.test(reason)) { - return [{ type, reason, context: { type: 'Painless script', reason: '' } }]; - } - return [{ type, reason }]; - } - const [payload] = getNestedErrorClause(causedBy); - if (lang === 'painless') { - return [ - { - ...payload, - context: { type: 'Painless script', reason: `"${script}"` || reason }, - }, - ]; - } - return [{ ...payload, context: { type, reason } }]; -} - -function getNestedErrorClause(e: estypes.ErrorCause): ReasonDescription[] { - const { type, reason = '', caused_by: causedBy } = e; - // Painless scripts errors are nested within the failed_shards property - if ('failed_shards' in e) { - if (e.failed_shards) { - return (e.failed_shards as estypes.ShardFailure[]).flatMap((shardCause) => - getNestedErrorClauseWithContext(shardCause.reason) - ); - } - } - if (causedBy) { - return getNestedErrorClause(causedBy); - } - return [{ type, reason }]; -} - -function getErrorSources(e: Error) { - if (isRequestError(e)) { - return getNestedErrorClause(e.body!.attributes!.error as estypes.ErrorCause); - } - if (isEsError(e)) { - if (e.attributes?.error?.reason) { - return getNestedErrorClause(e.attributes.error); - } - if (e.attributes?.error?.caused_by) { - return getNestedErrorClause(e.attributes.error.caused_by); - } - } - return []; -} - export function getOriginalRequestErrorMessages( - error: ExpressionRenderError | null, - docLinks: CoreStart['docLinks'] + error: ExpressionRenderError | null ): RemovableUserMessage[] { const errorMessages: Array = []; if (error && 'original' in error && error.original) { - if (isEsAggError(error.original)) { - if (isNetworkError(error.original)) { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.networkErrorMessage', { - defaultMessage: 'Network error, try again later or contact your administrator.', - }) - ); - } else { - errorMessages.push(error.message); - } + const searchErrorDisplay = renderSearchError(error.original); + if (searchErrorDisplay) { + errorMessages.push({ + short: error.original.message, + long: searchErrorDisplay.actions ? ( + <> + {searchErrorDisplay.body} + {searchErrorDisplay.actions} + + ) : ( + searchErrorDisplay.body + ), + }); } else { - const rootErrors = uniqWith(getErrorSources(error.original), isEqual); - for (const rootError of rootErrors) { - if (rootError.context) { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.expressionFailureMessageWithContext', { - defaultMessage: 'Request error: {type}, {reason} in {context}', - values: { - reason: rootError.reason, - type: rootError.type, - context: rootError.context.reason - ? `${rootError.context.reason} (${rootError.context.type})` - : rootError.context.type, - }, - }) - ); - } else if (isTSDBError(rootError)) { - const [fieldName, _type, _isCounter, opUsed] = rootError.reason.match(/\[(\w)*\]/g)!; - const shortMessage = i18n.translate( - 'xpack.lens.editorFrame.expressionTSDBDetailedMessage', - { - defaultMessage: - 'The field {field} of Time series type [counter] has been used with the unsupported operation {op}.', - values: { - field: fieldName, - op: opUsed, - }, - } - ); - const message = ( - <> -

    {shortMessage}

    - - {i18n.translate('xpack.lens.editorFrame.expressionTSDBCounterInfo', { - defaultMessage: - 'See more about Time series field types and [counter] supported aggregations', - })} - - - ); - errorMessages.push({ - short: shortMessage, - long: message, - }); - } else { - errorMessages.push( - i18n.translate('xpack.lens.editorFrame.expressionFailureMessage', { - defaultMessage: 'Request error: {type}, {reason}', - values: { - reason: rootError.reason, - type: rootError.type, - }, - }) - ); - } - } + errorMessages.push(error.original.message); } } else if (error?.message) { errorMessages.push(error.message); diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 529f80b803c6f..ff1af09019c1b 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -1126,12 +1126,11 @@ export class Embeddable style={input.style} executionContext={this.getExecutionContext()} addUserMessages={(messages) => this.addUserMessages(messages)} - onRuntimeError={(message) => { - this.updateOutput({ error: new Error(message) }); + onRuntimeError={(error) => { + this.updateOutput({ error }); this.logError('runtime'); }} noPadding={this.visDisplayOptions.noPadding} - docLinks={this.deps.coreStart.docLinks} /> void; + onRuntimeError: (error: Error) => void; executionContext?: KibanaExecutionContext; lensInspector: LensInspector; noPadding?: boolean; - docLinks: CoreStart['docLinks']; } export function ExpressionWrapper({ @@ -72,7 +71,6 @@ export function ExpressionWrapper({ executionContext, lensInspector, noPadding, - docLinks, }: ExpressionWrapperProps) { if (!expression) return null; return ( @@ -95,9 +93,13 @@ export function ExpressionWrapper({ syncCursor={syncCursor} executionContext={executionContext} renderError={(errorMessage, error) => { - const messages = getOriginalRequestErrorMessages(error || null, docLinks); + const messages = getOriginalRequestErrorMessages(error || null); addUserMessages(messages); - onRuntimeError(messages[0].shortMessage ?? (errorMessage || '')); + if (error?.original) { + onRuntimeError(error.original); + } else { + onRuntimeError(new Error(errorMessage ? errorMessage : '')); + } return <>; // the embeddable will take care of displaying the messages }} diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx index a3f4f6f797ee1..dda07ef2c41c8 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx @@ -759,6 +759,47 @@ describe('Datatable Visualization', () => { }).headerRowHeightLines ).toEqual([2]); }); + + it('sets alignment correctly', () => { + datasource.publicAPIMock.getOperationForColumnId.mockReturnValue({ + dataType: 'string', + isBucketed: false, // <= make them metrics + label: 'label', + isStaticValue: false, + hasTimeShift: false, + hasReducedTimeRange: false, + }); + const expression = datatableVisualization.toExpression( + { + ...defaultExpressionTableState, + columns: [ + { columnId: 'b', alignment: 'center' }, + { columnId: 'c', alignment: 'left' }, + { columnId: 'a' }, + ], + }, + frame.datasourceLayers, + {}, + { '1': { type: 'expression', chain: [] } } + ) as Ast; + + const columnArgs = buildExpression(expression).findFunction('lens_datatable_column'); + expect(columnArgs[0].arguments).toEqual( + expect.objectContaining({ + alignment: ['left'], + }) + ); + expect(columnArgs[1].arguments).toEqual( + expect.objectContaining({ + alignment: ['center'], + }) + ); + expect(columnArgs[2].arguments).toEqual( + expect.not.objectContaining({ + alignment: [], + }) + ); + }); }); describe('#onEditAction', () => { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx index 505b20bdc3e58..f22d17afad762 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx @@ -496,6 +496,7 @@ export const getDatatableVisualization = ({ width: column.width, isTransposed: column.isTransposed, transposable: isTransposable, + alignment: column.alignment, colorMode: canColor && column.colorMode ? column.colorMode : 'none', palette: paletteService.get(CUSTOM_PALETTE).toExpression(paletteParams), summaryRow: hasNoSummaryRow ? undefined : column.summaryRow!, diff --git a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx index bd10558d71404..8bd02702c841a 100644 --- a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx @@ -25,7 +25,7 @@ import { } from '@kbn/coloring'; import { GaugeTicksPositions, GaugeColorModes } from '@kbn/expression-gauge-plugin/common'; import { getMaxValue, getMinValue } from '@kbn/expression-gauge-plugin/public'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { isNumericFieldForDatatable } from '../../../common/expressions/datatable/utils'; import { applyPaletteParams, PalettePanelContainer } from '../../shared_components'; import type { VisualizationDimensionEditorProps } from '../../types'; diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx b/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx index ebc0b1040623f..c621a59e9ea9b 100644 --- a/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx +++ b/x-pack/plugins/lens/public/visualizations/heatmap/toolbar_component.tsx @@ -11,7 +11,7 @@ import { Position } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; import { LegendSize } from '@kbn/visualizations-plugin/public'; import { EuiIconAxisLeft, EuiIconAxisBottom } from '@kbn/chart-icons'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { VisualizationToolbarProps } from '../../types'; import { LegendSettingsPopover, diff --git a/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx b/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx index fe070e50449d6..ad3215634a261 100644 --- a/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx +++ b/x-pack/plugins/lens/public/visualizations/legacy_metric/metric_config_panel/appearance_options_popover.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { ToolbarPopover } from '../../../shared_components'; import { TitlePositionOptions } from './title_position_option'; import { FramePublicAPI } from '../../../types'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx index 3697ce988efb5..a02d4c1d82772 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/index.tsx @@ -11,7 +11,7 @@ import { Position, ScaleType } from '@elastic/charts'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { AxisExtentConfig } from '@kbn/expression-xy-plugin/common'; import { LegendSize } from '@kbn/visualizations-plugin/public'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import type { LegendSettingsPopoverProps } from '../../../shared_components/legend/legend_settings_popover'; import type { VisualizationToolbarProps, FramePublicAPI } from '../../../types'; import { State, XYState, AxesSettingsConfig } from '../types'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx index 3f620a9379538..e2b149dfc0eb6 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/shared/marker_decoration_settings.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonGroup, EuiFormRow } from '@elastic/eui'; import { IconPosition } from '@kbn/expression-xy-plugin/common'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { YAxisMode } from '../../types'; import { idPrefix } from '../dimension_editor'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx index bd147779fed8d..b8b244daf85d2 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/visual_options_popover/index.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { TooltipWrapper } from '@kbn/visualization-ui-components'; +import { TooltipWrapper } from '@kbn/visualization-utils'; import { ToolbarPopover, ValueLabelsSettings } from '../../../../shared_components'; import { MissingValuesOptions } from './missing_values_option'; import { LineCurveOption } from './line_curve_option'; diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index dd714b72c998d..8fc8eafc53f11 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -97,7 +97,9 @@ "@kbn/shared-ux-button-toolbar", "@kbn/cell-actions", "@kbn/calculate-width-from-char-count", - "@kbn/discover-utils" + "@kbn/discover-utils", + "@kbn/lens-formula-docs", + "@kbn/visualization-utils" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/maps/public/classes/layers/tile_errors_list.tsx b/x-pack/plugins/maps/public/classes/layers/tile_errors_list.tsx index 38bb078cd98d0..9520184d48753 100644 --- a/x-pack/plugins/maps/public/classes/layers/tile_errors_list.tsx +++ b/x-pack/plugins/maps/public/classes/layers/tile_errors_list.tsx @@ -8,9 +8,10 @@ import React, { useEffect, useState } from 'react'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { i18n } from '@kbn/i18n'; -import { EuiButton, EuiButtonEmpty, EuiCodeBlock, EuiContextMenu, EuiPopover } from '@elastic/eui'; +import { EuiButtonEmpty, EuiContextMenu, EuiPopover } from '@elastic/eui'; +import { createEsError } from '@kbn/search-errors'; import type { TileError } from '../../../common/descriptor_types'; -import { getInspector } from '../../kibana_services'; +import { getApplication, getDocLinks, getInspector } from '../../kibana_services'; import { RESPONSE_VIEW_ID } from '../../inspector/vector_tile_adapter/components/vector_tile_inspector'; interface Props { @@ -57,6 +58,41 @@ export function TileErrorsList(props: Props) { }, ]; + function renderError(tileError: TileError) { + if (!props.isESSource || !tileError.error) { + return tileError.message; + } + + const esError = createEsError( + { + statusCode: 400, + message: tileError.message, + attributes: { + error: tileError.error, + }, + }, + () => { + getInspector().open(props.inspectorAdapters, { + options: { + initialLayerId: props.layerId, + initialTileKey: tileError.tileKey, + initialTab: [RESPONSE_VIEW_ID], + }, + }); + }, + { + application: getApplication(), + docLinks: getDocLinks(), + } + ); + return ( + <> + {esError.getErrorMessage()} + {esError.getActions()} + + ); + } + return ( <> - - {getDescription(selectedTileError)} - - {props.isESSource && ( - { - getInspector().open(props.inspectorAdapters, { - options: { - initialLayerId: props.layerId, - initialTileKey: selectedTileError?.tileKey, - initialTab: [RESPONSE_VIEW_ID], - }, - }); - }} - size="s" - > - {i18n.translate('xpack.maps.tileError.viewDetailsButtonLabel', { - defaultMessage: 'View details', - })} - - )} + {renderError(selectedTileError)} ); } @@ -113,15 +128,3 @@ function getTitle(tileKey: string) { values: { tileKey }, }); } - -function getDescription(tileError: TileError) { - if (tileError.error?.root_cause?.[0]?.reason) { - return tileError.error.root_cause[0].reason; - } - - if (tileError.error?.reason) { - return tileError.error.reason; - } - - return tileError.message; -} diff --git a/x-pack/plugins/maps/public/classes/util/data_request.tsx b/x-pack/plugins/maps/public/classes/util/data_request.tsx index 62fd17cc44277..4554761ac0f4e 100644 --- a/x-pack/plugins/maps/public/classes/util/data_request.tsx +++ b/x-pack/plugins/maps/public/classes/util/data_request.tsx @@ -9,7 +9,6 @@ import React, { ReactNode } from 'react'; import { renderSearchError } from '@kbn/search-errors'; -import { getApplication } from '../../kibana_services'; import type { DataRequestDescriptor, DataRequestMeta } from '../../../common/descriptor_types'; export class DataRequest { @@ -60,10 +59,7 @@ export class DataRequest { return null; } - const searchErrorDisplay = renderSearchError({ - error: this._descriptor.error, - application: getApplication(), - }); + const searchErrorDisplay = renderSearchError(this._descriptor.error); const body = searchErrorDisplay?.body ? ( searchErrorDisplay.body diff --git a/x-pack/plugins/maps/public/connected_components/right_side_controls/layer_control/layer_toc/toc_entry/_toc_entry.scss b/x-pack/plugins/maps/public/connected_components/right_side_controls/layer_control/layer_toc/toc_entry/_toc_entry.scss index c88f343f7dbfa..7f1c61801a4f3 100644 --- a/x-pack/plugins/maps/public/connected_components/right_side_controls/layer_control/layer_toc/toc_entry/_toc_entry.scss +++ b/x-pack/plugins/maps/public/connected_components/right_side_controls/layer_control/layer_toc/toc_entry/_toc_entry.scss @@ -128,7 +128,7 @@ background-color: $euiColorEmptyShade; border: $euiBorderThin; color: $euiTextColor; - border-radius: $euiBorderRadius / 2; + border-radius: calc($euiBorderRadius / 2); height: $euiSize; width: $euiSizeXL; line-height: $euiSize; diff --git a/x-pack/plugins/ml/common/constants/alerts.ts b/x-pack/plugins/ml/common/constants/alerts.ts index 4582f06b214b6..81081cd79306a 100644 --- a/x-pack/plugins/ml/common/constants/alerts.ts +++ b/x-pack/plugins/ml/common/constants/alerts.ts @@ -12,11 +12,12 @@ import { ALERT_RULE_NAME, ALERT_START, ALERT_STATUS, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, } from '@kbn/rule-data-utils'; import { JobsHealthTests } from '../types/alerts'; export const ML_ALERT_TYPES = { - ANOMALY_DETECTION: 'xpack.ml.anomaly_detection_alert', + ANOMALY_DETECTION: ML_ANOMALY_DETECTION_RULE_TYPE_ID, AD_JOBS_HEALTH: 'xpack.ml.anomaly_detection_jobs_health', } as const; diff --git a/x-pack/plugins/ml/common/index.ts b/x-pack/plugins/ml/common/index.ts index 1aed6088b79d8..f994ae95682cc 100644 --- a/x-pack/plugins/ml/common/index.ts +++ b/x-pack/plugins/ml/common/index.ts @@ -9,3 +9,4 @@ export { composeValidators, patternValidator } from './util/validators'; export { getDefaultCapabilities as getDefaultMlCapabilities } from './types/capabilities'; export { DATAFEED_STATE, JOB_STATE } from './constants/states'; export type { MlSummaryJob, SummaryJobState } from './types/anomaly_detection_jobs'; +export { ML_ALERT_TYPES } from './constants/alerts'; diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/alert_actions.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/alert_actions.tsx index 395c4361d4881..0ba523793d86c 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/alert_actions.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_alerts_table/alert_actions.tsx @@ -16,19 +16,17 @@ import { import React, { useCallback, useMemo, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { CaseAttachmentsWithoutOwner } from '@kbn/cases-plugin/public'; -import { AttachmentType } from '@kbn/cases-plugin/common'; +import { AttachmentType, APP_ID as CASE_APP_ID } from '@kbn/cases-plugin/common'; import { ALERT_RULE_NAME, ALERT_RULE_UUID, ALERT_UUID } from '@kbn/rule-data-utils'; import type { AlertActionsProps } from '@kbn/triggers-actions-ui-plugin/public/types'; import { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { PLUGIN_ID } from '../../../common/constants/app'; import { useMlKibana } from '../../application/contexts/kibana'; -const CASES_ACTIONS_ENABLED = false; - export function AlertActions(props: AlertActionsProps) { const { alert, refresh } = props; const { cases, triggersActionsUi } = useMlKibana().services; - const casesPrivileges = cases?.helpers.canUseCases(); + const casesPrivileges = cases?.helpers.canUseCases([CASE_APP_ID]); const [isPopoverOpen, setIsPopoverOpen] = useState(false); @@ -64,8 +62,8 @@ export function AlertActions(props: AlertActionsProps) { refresh(); }, [refresh]); - const createCaseFlyout = cases!.hooks.useCasesAddToNewCaseFlyout({ onSuccess }); - const selectCaseModal = cases!.hooks.useCasesAddToExistingCaseModal({ onSuccess }); + const createCaseFlyout = cases?.hooks?.useCasesAddToNewCaseFlyout({ onSuccess }); + const selectCaseModal = cases?.hooks?.useCasesAddToExistingCaseModal({ onSuccess }); const closeActionsPopover = () => { setIsPopoverOpen(false); @@ -76,12 +74,12 @@ export function AlertActions(props: AlertActionsProps) { }; const handleAddToNewCaseClick = () => { - createCaseFlyout.open({ attachments: caseAttachments }); + createCaseFlyout?.open({ attachments: caseAttachments }); closeActionsPopover(); }; const handleAddToExistingCaseClick = () => { - selectCaseModal.open({ getAttachments: () => caseAttachments }); + selectCaseModal?.open({ getAttachments: () => caseAttachments }); closeActionsPopover(); }; @@ -101,7 +99,7 @@ export function AlertActions(props: AlertActionsProps) { ); const actionsMenuItems = [ - ...(CASES_ACTIONS_ENABLED && casesPrivileges?.create && casesPrivileges.read + ...(casesPrivileges && casesPrivileges?.create && casesPrivileges.read ? [ ; }, }), + ruleTypeIds: [ML_ALERT_TYPES.ANOMALY_DETECTION], }; triggersActionsUi.alertsTableConfigurationRegistry.register(config); diff --git a/x-pack/plugins/ml/public/application/components/influencers_list/_influencers_list.scss b/x-pack/plugins/ml/public/application/components/influencers_list/_influencers_list.scss index e33811aa9a8cc..1b091e4046c50 100644 --- a/x-pack/plugins/ml/public/application/components/influencers_list/_influencers_list.scss +++ b/x-pack/plugins/ml/public/application/components/influencers_list/_influencers_list.scss @@ -28,7 +28,7 @@ } .progress-bar { - height: $euiSizeXS / 2; + height: calc($euiSizeXS / 2); margin-top: $euiSizeM; text-align: right; line-height: 18px; // SASSTODO: Calc proper value @@ -96,7 +96,7 @@ font-size: 11px; line-height: 14px; border-radius: $euiBorderRadius; - padding: $euiSizeXS / 2; + padding: calc($euiSizeXS / 2); margin-top: $euiSizeXS; display: inline-block; border: $euiBorderThin; diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/_rule_editor.scss b/x-pack/plugins/ml/public/application/components/rule_editor/_rule_editor.scss index 03eca2842c300..09605c4016565 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/_rule_editor.scss +++ b/x-pack/plugins/ml/public/application/components/rule_editor/_rule_editor.scss @@ -41,7 +41,7 @@ // SASSTODO: Dangerous EUI overwrite .scope-field-checkbox { - margin-right: $euiSizeXS / 2; + margin-right: calc($euiSizeXS / 2); .euiCheckbox { margin-top: $euiSizeXS; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/_explorer_chart.scss b/x-pack/plugins/ml/public/application/explorer/explorer_charts/_explorer_chart.scss index 55ebfe8ab3edb..29967e8db9b3f 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/_explorer_chart.scss +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/_explorer_chart.scss @@ -15,7 +15,7 @@ rect.selected-interval { fill: rgba(200, 200, 200, .1); stroke: $euiColorDarkShade; - stroke-width: $euiSizeXS / 2; + stroke-width: calc($euiSizeXS / 2); stroke-opacity: .8; } diff --git a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx index 102af34d3e95d..7482f66fd4460 100644 --- a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx +++ b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx @@ -92,6 +92,7 @@ export const DeploymentSetup: FC = ({ id, label: id, value, + 'data-test-subj': `mlModelsStartDeploymentModalThreadsPerAllocation_${id}`, }; }), [maxSingleMlNodeProcessors] @@ -215,6 +216,7 @@ export const DeploymentSetup: FC = ({ defaultMessage: 'low', } ), + 'data-test-subj': 'mlModelsStartDeploymentModalLowPriority', }, { id: 'normal', @@ -225,6 +227,7 @@ export const DeploymentSetup: FC = ({ defaultMessage: 'normal', } ), + 'data-test-subj': 'mlModelsStartDeploymentModalNormalPriority', }, ]} data-test-subj={'mlModelsStartDeploymentModalPriority'} diff --git a/x-pack/plugins/ml/public/application/services/get_shared_ml_services.ts b/x-pack/plugins/ml/public/application/services/get_shared_ml_services.ts index 23ac82737044f..44e6a5e5746e8 100644 --- a/x-pack/plugins/ml/public/application/services/get_shared_ml_services.ts +++ b/x-pack/plugins/ml/public/application/services/get_shared_ml_services.ts @@ -21,5 +21,6 @@ export function getMlSharedServices(httpStart: HttpStart) { return { elasticModels: new ElasticModels(mlApiServices.trainedModels), + mlApiServices, }; } diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer_annotations.scss b/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer_annotations.scss index a7186597b4135..656f38590d3a5 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer_annotations.scss +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/_timeseriesexplorer_annotations.scss @@ -40,10 +40,10 @@ $mlAnnotationRectDefaultFillOpacity: .05; } .mlAnnotationRect-isBlur { - stroke-opacity: $mlAnnotationRectDefaultStrokeOpacity / 2; + stroke-opacity: calc($mlAnnotationRectDefaultStrokeOpacity / 2); transition: stroke-opacity $euiAnimSpeedFast; - fill-opacity: $mlAnnotationRectDefaultFillOpacity / 2; + fill-opacity: calc($mlAnnotationRectDefaultFillOpacity / 2); transition: fill-opacity $euiAnimSpeedFast; } @@ -95,9 +95,9 @@ $mlAnnotationRectDefaultFillOpacity: .05; } .mlContextAnnotationRect-isBlur { - stroke-opacity: $mlAnnotationRectDefaultStrokeOpacity / 2; + stroke-opacity: calc($mlAnnotationRectDefaultStrokeOpacity / 2); transition: stroke-opacity $euiAnimSpeedFast; - fill-opacity: $mlAnnotationRectDefaultFillOpacity / 2; + fill-opacity: calc($mlAnnotationRectDefaultFillOpacity / 2); transition: fill-opacity $euiAnimSpeedFast; } diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index a4f0e6e230541..b476ea10ac72d 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -69,6 +69,7 @@ import { } from '../common/constants/app'; import type { MlCapabilities } from './shared'; import { ElasticModels } from './application/services/elastic_models_service'; +import type { MlApiServices } from './application/services/ml_api_service'; export interface MlStartDependencies { cases?: CasesUiStart; @@ -283,7 +284,11 @@ export class MlPlugin implements Plugin { start( core: CoreStart, deps: MlStartDependencies - ): { locator?: LocatorPublic; elasticModels?: ElasticModels } { + ): { + locator?: LocatorPublic; + elasticModels?: ElasticModels; + mlApi?: MlApiServices; + } { setDependencyCache({ docLinks: core.docLinks!, basePath: core.http.basePath, @@ -295,6 +300,7 @@ export class MlPlugin implements Plugin { return { locator: this.locator, elasticModels: this.sharedMlServices?.elasticModels, + mlApi: this.sharedMlServices?.mlApiServices, }; } diff --git a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts index 2dadf5e510268..d270ca3166e2f 100644 --- a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts +++ b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts @@ -15,7 +15,11 @@ import type { RuleTypeParams, RuleTypeState, } from '@kbn/alerting-plugin/common'; -import { IRuleTypeAlerts, RuleExecutorOptions } from '@kbn/alerting-plugin/server'; +import { + AlertsClientError, + IRuleTypeAlerts, + RuleExecutorOptions, +} from '@kbn/alerting-plugin/server'; import { ALERT_REASON, ALERT_URL } from '@kbn/rule-data-utils'; import { MlAnomalyDetectionAlert } from '@kbn/alerts-as-data-utils'; import { ES_FIELD_TYPES } from '@kbn/field-types'; @@ -249,7 +253,9 @@ export function registerAnomalyDetectionAlertType({ ); const { alertsClient } = services; - if (!alertsClient) return { state: {} }; + if (!alertsClient) { + throw new AlertsClientError(); + } const executionResult = await execute(params, spaceId); diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index f1383ef078c89..6b6deb51c3c9a 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -113,5 +113,6 @@ "@kbn/securitysolution-ecs", "@kbn/ml-data-view-utils", "@kbn/ml-creation-wizard-utils", + "@kbn/deeplinks-management", ], } diff --git a/x-pack/plugins/monitoring/public/application/index.tsx b/x-pack/plugins/monitoring/public/application/index.tsx index f34cde0837050..b9fd25f60c367 100644 --- a/x-pack/plugins/monitoring/public/application/index.tsx +++ b/x-pack/plugins/monitoring/public/application/index.tsx @@ -8,11 +8,10 @@ import { AppMountParameters, CoreStart, CoreTheme, MountPoint } from '@kbn/core/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import React, { useMemo } from 'react'; +import React from 'react'; import ReactDOM from 'react-dom'; import { Redirect } from 'react-router-dom'; import { Router, Routes, Route } from '@kbn/shared-ux-router'; -import useObservable from 'react-use/lib/useObservable'; import { Observable } from 'rxjs'; import { CODE_PATH_APM, @@ -100,12 +99,7 @@ const MonitoringApp: React.FC<{ theme$: Observable; }> = ({ core, plugins, externalConfig, setHeaderActionMenu, theme$ }) => { const history = createPreserveQueryHistory(); - - const darkModeObservable: Observable = useMemo( - () => core.uiSettings!.get$('theme:darkMode'), - [core.uiSettings] - ); - const darkMode = useObservable(darkModeObservable, core.uiSettings!.get('theme:darkMode')); + const darkMode = core.theme.getTheme().darkMode; return ( diff --git a/x-pack/plugins/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.scss b/x-pack/plugins/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.scss index c46d7a048b93b..961e0350ccc85 100644 --- a/x-pack/plugins/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.scss +++ b/x-pack/plugins/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.scss @@ -22,7 +22,7 @@ margin: $euiSizeS; border: 1px solid $euiColorMediumShade; border-radius: $euiSizeXS; - padding: $euiSizeXS / 2 0; + padding: calc($euiSizeXS / 2) 0; &.monChild--index { border-left: $euiSizeXS solid $euiColorSuccess; diff --git a/x-pack/plugins/monitoring/public/components/status_icon/_status_icon.scss b/x-pack/plugins/monitoring/public/components/status_icon/_status_icon.scss index 2d36e7fc90f22..50c705f80650e 100644 --- a/x-pack/plugins/monitoring/public/components/status_icon/_status_icon.scss +++ b/x-pack/plugins/monitoring/public/components/status_icon/_status_icon.scss @@ -1,7 +1,7 @@ .monStatusIcon { display: inline-block; margin-left: $euiSizeXS; - padding: ($euiSizeXS / 2) $euiSizeS; + padding: calc($euiSizeXS / 2) $euiSizeS; border-radius: $euiBorderRadius; color: $euiColorGhost; min-width: 1.9em; diff --git a/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.test.ts b/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.test.ts new file mode 100644 index 0000000000000..6971ff2d33c2d --- /dev/null +++ b/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.test.ts @@ -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 { DiscoverAppLocatorParams } from '@kbn/discover-plugin/common'; +import { Aggregators } from './types'; +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { getViewInAppUrl, GetViewInAppUrlArgs } from './get_view_in_app_url'; + +describe('getViewInAppUrl', () => { + const logExplorerLocator = { + getRedirectUrl: jest.fn(() => 'mockedGetRedirectUrl'), + } as unknown as LocatorPublic; + const startedAt = '2023-12-07T16:30:15.403Z'; + const endedAt = '2023-12-07T20:30:15.403Z'; + const returnedTimeRange = { + // Duration 4 hour, time range will be extended it with 30 minutes from each side + from: '2023-12-07T16:00:15.403Z', + to: '2023-12-07T21:00:15.403Z', + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('Should return empty string if logExplorerLocator is not provided', () => { + const args: GetViewInAppUrlArgs = { + metrics: [], + startedAt, + endedAt, + }; + + expect(getViewInAppUrl(args)).toBe(''); + }); + + it('should call getRedirectUrl with data view, time range and filters', () => { + const args: GetViewInAppUrlArgs = { + metrics: [ + { + name: 'A', + aggType: Aggregators.COUNT, + filter: 'mockedCountFilter', + }, + ], + logExplorerLocator, + startedAt, + endedAt, + filter: 'mockedFilter', + dataViewId: 'mockedDataViewId', + }; + + expect(getViewInAppUrl(args)).toBe('mockedGetRedirectUrl'); + expect(logExplorerLocator.getRedirectUrl).toHaveBeenCalledWith({ + dataset: args.dataViewId, + timeRange: returnedTimeRange, + query: { + query: 'mockedFilter and mockedCountFilter', + language: 'kuery', + }, + }); + }); + + it('should call getRedirectUrl with only count filter', () => { + const args: GetViewInAppUrlArgs = { + metrics: [ + { + name: 'A', + aggType: Aggregators.COUNT, + filter: 'mockedCountFilter', + }, + ], + logExplorerLocator, + startedAt, + endedAt, + }; + + expect(getViewInAppUrl(args)).toBe('mockedGetRedirectUrl'); + expect(logExplorerLocator.getRedirectUrl).toHaveBeenCalledWith({ + dataset: undefined, + timeRange: returnedTimeRange, + query: { + query: 'mockedCountFilter', + language: 'kuery', + }, + }); + }); + + it('should call getRedirectUrl with only filter', () => { + const args: GetViewInAppUrlArgs = { + logExplorerLocator, + startedAt, + endedAt, + filter: 'mockedFilter', + }; + + expect(getViewInAppUrl(args)).toBe('mockedGetRedirectUrl'); + expect(logExplorerLocator.getRedirectUrl).toHaveBeenCalledWith({ + dataset: undefined, + timeRange: returnedTimeRange, + query: { + query: 'mockedFilter', + language: 'kuery', + }, + }); + }); + + it('should call getRedirectUrl with empty query if metrics and filter are not not provided', () => { + const args: GetViewInAppUrlArgs = { + logExplorerLocator, + startedAt, + endedAt, + }; + + expect(getViewInAppUrl(args)).toBe('mockedGetRedirectUrl'); + expect(logExplorerLocator.getRedirectUrl).toHaveBeenCalledWith({ + dataset: undefined, + timeRange: returnedTimeRange, + query: { + query: '', + language: 'kuery', + }, + }); + }); + + it('should call getRedirectUrl with empty if there are multiple metrics', () => { + const args: GetViewInAppUrlArgs = { + metrics: [ + { + name: 'A', + aggType: Aggregators.COUNT, + filter: 'mockedCountFilter', + }, + { + name: 'A', + aggType: Aggregators.AVERAGE, + field: 'mockedAvgField', + }, + ], + logExplorerLocator, + startedAt, + endedAt, + }; + + expect(getViewInAppUrl(args)).toBe('mockedGetRedirectUrl'); + expect(logExplorerLocator.getRedirectUrl).toHaveBeenCalledWith({ + dataset: undefined, + timeRange: returnedTimeRange, + query: { + query: '', + language: 'kuery', + }, + }); + }); +}); diff --git a/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.ts b/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.ts index 658d1debe0a94..27efa730dccb7 100644 --- a/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.ts +++ b/x-pack/plugins/observability/common/custom_threshold_rule/get_view_in_app_url.ts @@ -11,21 +11,27 @@ import type { TimeRange } from '@kbn/es-query'; import type { LocatorPublic } from '@kbn/share-plugin/common'; import type { CustomThresholdExpressionMetric } from './types'; -export const getViewInAppUrl = ( - metrics: CustomThresholdExpressionMetric[], - startedAt?: string, - logExplorerLocator?: LocatorPublic, - filter?: string, - dataViewId?: string, - endedAt?: string -) => { +export interface GetViewInAppUrlArgs { + dataViewId?: string; + endedAt?: string; + startedAt?: string; + filter?: string; + logExplorerLocator?: LocatorPublic; + metrics?: CustomThresholdExpressionMetric[]; +} + +export const getViewInAppUrl = ({ + dataViewId, + endedAt, + startedAt = new Date().toISOString(), + filter, + logExplorerLocator, + metrics = [], +}: GetViewInAppUrlArgs) => { if (!logExplorerLocator) return ''; - let timeRange: TimeRange | undefined; - if (startedAt) { - timeRange = getPaddedAlertTimeRange(startedAt, endedAt); - timeRange.to = endedAt ? timeRange.to : 'now'; - } + const timeRange: TimeRange | undefined = getPaddedAlertTimeRange(startedAt, endedAt); + timeRange.to = endedAt ? timeRange.to : 'now'; const query = { query: '', diff --git a/x-pack/plugins/observability/common/index.ts b/x-pack/plugins/observability/common/index.ts index 143bf77a1b0cc..3bd302b262fbc 100644 --- a/x-pack/plugins/observability/common/index.ts +++ b/x-pack/plugins/observability/common/index.ts @@ -45,7 +45,6 @@ export { profilingCo2PerKWH, profilingDatacenterPUE, profilingPervCPUWattX86, - profilingUseLegacyCo2Calculation, profilingPervCPUWattArm64, profilingAWSCostDiscountRate, profilingCostPervCPUPerHour, diff --git a/x-pack/plugins/observability/common/ui_settings_keys.ts b/x-pack/plugins/observability/common/ui_settings_keys.ts index bcc2f0451caac..b647fc8361db8 100644 --- a/x-pack/plugins/observability/common/ui_settings_keys.ts +++ b/x-pack/plugins/observability/common/ui_settings_keys.ts @@ -33,6 +33,5 @@ export const profilingPervCPUWattX86 = 'observability:profilingPerVCPUWattX86'; export const profilingPervCPUWattArm64 = 'observability:profilingPervCPUWattArm64'; export const profilingCo2PerKWH = 'observability:profilingCo2PerKWH'; export const profilingDatacenterPUE = 'observability:profilingDatacenterPUE'; -export const profilingUseLegacyCo2Calculation = 'observability:profilingUseLegacyCo2Calculation'; export const profilingAWSCostDiscountRate = 'observability:profilingAWSCostDiscountRate'; export const profilingCostPervCPUPerHour = 'observability:profilingCostPervCPUPerHour'; diff --git a/x-pack/plugins/observability/public/application/index.tsx b/x-pack/plugins/observability/public/application/index.tsx index 7b01bc1f8eeb1..23a0952ed91db 100644 --- a/x-pack/plugins/observability/public/application/index.tsx +++ b/x-pack/plugins/observability/public/application/index.tsx @@ -67,7 +67,7 @@ export const renderApp = ({ }) => { const { element, history, theme$ } = appMountParameters; const i18nCore = core.i18n; - const isDarkMode = core.uiSettings.get('theme:darkMode'); + const isDarkMode = core.theme.getTheme().darkMode; core.chrome.setHelpExtension({ appName: i18n.translate('xpack.observability.feedbackMenu.appName', { diff --git a/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx b/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx index 7a88f9b90dc0b..38eb92c2ff267 100644 --- a/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx +++ b/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx @@ -54,4 +54,5 @@ export const getAlertsTableConfiguration = ( const { header, body, footer } = useGetAlertFlyoutComponents(observabilityRuleTypeRegistry); return { header, body, footer }; }, + ruleTypeIds: observabilityRuleTypeRegistry.list(), }); diff --git a/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx index 010642acdf551..fb90056b5193e 100644 --- a/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx @@ -67,7 +67,7 @@ export function ExpressionChart({ timeRange, timeFieldName, }: Props) { - const { charts, uiSettings } = useKibana().services; + const { charts, uiSettings, theme } = useKibana().services; const { isLoading, data } = useExpressionChartData( expression, derivedIndexPattern, @@ -90,7 +90,7 @@ export function ExpressionChart({ return ; } - const isDarkMode = uiSettings?.get('theme:darkMode') || false; + const isDarkMode = theme?.getTheme().darkMode ?? false; const firstSeries = first(first(data.pages)!.series); // Creating a custom series where the ID is changed to 0 // so that we can get a proper domain diff --git a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_data_views.ts b/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_data_views.ts index 5affe18c75d03..238d03c2a650f 100644 --- a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_data_views.ts +++ b/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_data_views.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { DataView } from '@kbn/data-views-plugin/public'; import { UseFetchDataViewsResponse } from '../use_fetch_data_views'; export const useFetchDataViews = (): UseFetchDataViewsResponse => { @@ -16,10 +15,9 @@ export const useFetchDataViews = (): UseFetchDataViewsResponse => { data: Array(20) .fill(0) .map((_, i) => ({ + id: `dataview-${i}`, title: `dataview-${i}`, type: 'foo', - getName: () => `dataview-${i}`, - getIndexPattern: () => `.index-pattern-dataview-${i}`, - })) as DataView[], + })), }; }; diff --git a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts b/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts deleted file mode 100644 index a709dea0600f8..0000000000000 --- a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Index, UseFetchIndicesResponse } from '../use_fetch_indices'; - -export const useFetchIndices = (): UseFetchIndicesResponse => { - return { - isLoading: false, - isError: false, - isSuccess: true, - data: [ - ...Array(10) - .fill(0) - .map((_, i) => `.index-${i}`), - ...Array(10) - .fill(0) - .map((_, i) => `.some-other-index-${i}`), - ] as Index[], - }; -}; diff --git a/x-pack/plugins/observability/public/hooks/use_create_data_view.ts b/x-pack/plugins/observability/public/hooks/use_create_data_view.ts index e2257ef71ab06..128f012094793 100644 --- a/x-pack/plugins/observability/public/hooks/use_create_data_view.ts +++ b/x-pack/plugins/observability/public/hooks/use_create_data_view.ts @@ -22,6 +22,7 @@ export function useCreateDataView({ indexPatternString }: UseCreateDataViewProps useEffect(() => { const createDataView = () => dataViews.create({ + id: `${indexPatternString}-id`, title: indexPatternString, allowNoIndex: true, }); diff --git a/x-pack/plugins/observability/public/hooks/use_fetch_data_views.ts b/x-pack/plugins/observability/public/hooks/use_fetch_data_views.ts index bff276181e95f..2d7602431266f 100644 --- a/x-pack/plugins/observability/public/hooks/use_fetch_data_views.ts +++ b/x-pack/plugins/observability/public/hooks/use_fetch_data_views.ts @@ -6,29 +6,23 @@ */ import { useQuery } from '@tanstack/react-query'; -import { DataView } from '@kbn/data-views-plugin/public'; +import { DataViewListItem } from '@kbn/data-views-plugin/public'; import { useKibana } from '../utils/kibana_react'; export interface UseFetchDataViewsResponse { isLoading: boolean; isSuccess: boolean; isError: boolean; - data: DataView[] | undefined; + data: DataViewListItem[] | undefined; } -interface Params { - name?: string; - size?: number; -} - -export function useFetchDataViews({ name = '', size = 10 }: Params): UseFetchDataViewsResponse { +export function useFetchDataViews(): UseFetchDataViewsResponse { const { dataViews } = useKibana().services; - const search = name.endsWith('*') ? name : `${name}*`; const { isLoading, isError, isSuccess, data } = useQuery({ - queryKey: ['fetchDataViews', search], + queryKey: ['fetchDataViewsList'], queryFn: async () => { - return dataViews.find(search, size); + return dataViews.getIdsWithTitle(); }, retry: false, keepPreviousData: true, diff --git a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts index 24e8a0fc107fb..99a448a36405d 100644 --- a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts +++ b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts @@ -6,13 +6,17 @@ */ import { useMemo } from 'react'; -import { ES_QUERY_ID } from '@kbn/rule-data-utils'; +import { ES_QUERY_ID, ML_ANOMALY_DETECTION_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { usePluginContext } from './use_plugin_context'; export function useGetFilteredRuleTypes() { const { observabilityRuleTypeRegistry } = usePluginContext(); return useMemo(() => { - return [ES_QUERY_ID, ...observabilityRuleTypeRegistry.list()]; + return [ + ES_QUERY_ID, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, + ...observabilityRuleTypeRegistry.list(), + ]; }, [observabilityRuleTypeRegistry]); } diff --git a/x-pack/plugins/observability/public/pages/alerts/helpers/parse_alert.ts b/x-pack/plugins/observability/public/pages/alerts/helpers/parse_alert.ts index 33cff33c663a1..2ffea65799867 100644 --- a/x-pack/plugins/observability/public/pages/alerts/helpers/parse_alert.ts +++ b/x-pack/plugins/observability/public/pages/alerts/helpers/parse_alert.ts @@ -38,10 +38,17 @@ export const parseAlert = }; const formatter = observabilityRuleTypeRegistry.getFormatter(parsedFields[ALERT_RULE_TYPE_ID]!); + let formattedFields = {}; + try { + formattedFields = + formatter?.({ fields: parsedFields, formatters: { asDuration, asPercent } }) ?? {}; + } catch (error) { + // Ignore formatted fields if there is a formatting error + } const formatted = { link: undefined, reason: parsedFields[ALERT_REASON] ?? parsedFields[ALERT_RULE_NAME] ?? '', - ...(formatter?.({ fields: parsedFields, formatters: { asDuration, asPercent } }) ?? {}), + ...formattedFields, }; return { diff --git a/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx b/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx index 3e4b0476b5075..bd292a2bf88cb 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx +++ b/x-pack/plugins/observability/public/pages/overview/components/sections/metrics/metric_with_sparkline.tsx @@ -36,7 +36,7 @@ export function MetricWithSparkline({ id, formatter, value, timeseries, color }: const theme = [EUI_SPARKLINE_THEME_PARTIAL]; const baseTheme = isDarkTheme ? DARK_THEME : LIGHT_THEME; - const colors = theme[1].colors?.vizColors ?? []; + const colors = baseTheme.colors?.vizColors ?? []; if (!value) { return ( diff --git a/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/palette_legends.tsx b/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/palette_legends.tsx index 1887f20320085..20f7d47e08d23 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/palette_legends.tsx +++ b/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/palette_legends.tsx @@ -17,7 +17,7 @@ import { import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n-react'; import { euiLightVars, euiDarkVars } from '@kbn/ui-theme'; -import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; +import { useDarkMode } from '@kbn/kibana-react-plugin/public'; import { getCoreVitalTooltipMessage, Thresholds } from './core_vital_item'; import { LEGEND_NEEDS_IMPROVEMENT_LABEL, @@ -50,8 +50,7 @@ interface Props { } export function PaletteLegends({ ranks, title, onItemHover, thresholds, isCls }: Props) { - const [darkMode] = useUiSetting$('theme:darkMode'); - + const darkMode = useDarkMode(false); const palette = euiPaletteForStatus(3); const labels = [LEGEND_GOOD_LABEL, LEGEND_NEEDS_IMPROVEMENT_LABEL, LEGEND_POOR_LABEL]; diff --git a/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx b/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx index a2939bb4876e9..ae896b66d990f 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx @@ -9,6 +9,7 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router-dom'; import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { RuleStatus } from '@kbn/triggers-actions-ui-plugin/public'; +import { AlertConsumers } from '@kbn/rule-data-utils'; import { useKibana } from '../../utils/kibana_react'; import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; import { observabilityAlertFeatureIds } from '../../../common/constants'; @@ -97,6 +98,7 @@ export function RulesTab({ setRefresh, stateRefresh }: RulesTabProps) { onSearchFilterChange={handleSearchFilterChange} onStatusFilterChange={handleStatusFilterChange} onTypeFilterChange={handleTypeFilterChange} + initialSelectedConsumer={AlertConsumers.LOGS} /> ); } diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/common/data_preview_chart.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/data_preview_chart.tsx index 81556c2feb0f7..8fd1039c0c53c 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/common/data_preview_chart.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/data_preview_chart.tsx @@ -16,8 +16,11 @@ import { ScaleType, Settings, Tooltip, + TooltipTable, + TooltipTableColumn, } from '@elastic/charts'; import { + EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiFormRow, @@ -77,6 +80,8 @@ export function DataPreviewChart({ isError, } = useDebouncedGetPreviewData(isIndicatorSectionValid, watch('indicator'), range); + const isMoreThan100 = previewData?.find((row) => row.sliValue > 1) != null; + const baseTheme = charts.theme.useChartsBaseTheme(); const dateFormat = uiSettings.get('dateFormat'); const numberFormat = @@ -165,9 +170,54 @@ export function DataPreviewChart({ ); + const columns: TooltipTableColumn[] = [ + { + id: 'color', + type: 'color', + }, + { + id: 'label', + type: 'custom', + truncate: true, + cell: ({ label }) => {label}, + style: { + textAlign: 'left', + }, + }, + { + id: 'value', + type: 'custom', + cell: ({ formattedValue }) => ( + <> + + {formattedValue} + + + ), + style: { + textAlign: 'right', + }, + }, + ]; + return ( {title} + {isMoreThan100 && ( + <> + + + + + )} {(isPreviewLoading || isError) && ( @@ -189,7 +239,40 @@ export function DataPreviewChart({ )} {isSuccess && ( - + { + const firstItem = items[0]; + const events = firstItem.datum.events; + const rows = [items[0]]; + if (events) { + rows.push({ + ...firstItem, + formattedValue: events.good, + value: events.good, + label: i18n.translate( + 'xpack.observability.slo.sloEdit.dataPreviewChart.goodEvents', + { + defaultMessage: 'Good events', + } + ), + }); + rows.push({ + ...firstItem, + value: events.total, + formattedValue: events.total, + label: i18n.translate( + 'xpack.observability.slo.sloEdit.dataPreviewChart.badEvents', + { + defaultMessage: 'Total events', + } + ), + }); + } + + return ; + }} + /> ({ date: new Date(datum.date).getTime(), value: datum.sliValue >= 0 ? datum.sliValue : null, + events: datum.events, }))} /> diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/common/index_field_selector.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/index_field_selector.tsx index 0a07515a8915f..46d4af15de628 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/common/index_field_selector.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/index_field_selector.tsx @@ -6,16 +6,16 @@ */ import { EuiComboBox, EuiComboBoxOptionOption, EuiFlexItem, EuiFormRow } from '@elastic/eui'; -import { FieldSpec } from '@kbn/data-views-plugin/common'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, ReactNode } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; +import { FieldSpec } from '@kbn/data-views-plugin/common'; import { createOptionsFromFields, Option } from '../../helpers/create_options'; import { CreateSLOForm } from '../../types'; interface Props { indexFields: FieldSpec[]; name: 'groupBy' | 'indicator.params.timestampField'; - label: React.ReactNode | string; + label: ReactNode | string; placeholder: string; isDisabled: boolean; isLoading: boolean; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx index 954b89991f528..ab60a66daa2fd 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/query_builder.tsx @@ -32,11 +32,14 @@ export function QueryBuilder({ required, tooltip, }: Props) { - const { data, dataViews, docLinks, http, notifications, storage, uiSettings, unifiedSearch } = + const { data, docLinks, dataViews, http, notifications, storage, uiSettings, unifiedSearch } = useKibana().services; const { control, getFieldState } = useFormContext(); - const { dataView } = useCreateDataView({ indexPatternString }); + + const { dataView } = useCreateDataView({ + indexPatternString, + }); return ( ; -} - export function IndexSelection() { - const { control, getFieldState } = useFormContext(); - const [searchValue, setSearchValue] = useState(''); + const { control, getFieldState, setValue, watch } = useFormContext(); + const { dataViews: dataViewsService } = useKibana().services; - const { isLoading: isIndicesLoading, data: indices = [] } = useFetchIndices({ - search: searchValue, - }); - const { isLoading: isDataViewsLoading, data: dataViews = [] } = useFetchDataViews({ - name: searchValue, - }); + const { isLoading: isDataViewsLoading, data: dataViews = [] } = useFetchDataViews(); - const options: Option[] = []; - if (!isDataViewsLoading && dataViews.length > 0) { - options.push(createDataViewsOption(dataViews)); - } - if (!isIndicesLoading && !!searchValue) { - options.push(createIndexPatternOption(searchValue, indices)); - } + const { dataViewEditor } = useKibana().services; + + const [adHocDataViews, setAdHocDataViews] = useState([]); + + const currentIndexPattern = watch('indicator.params.index'); - const onSearchChange = debounce((value: string) => setSearchValue(value), 300); + useEffect(() => { + if (!isDataViewsLoading) { + const missingAdHocDataView = + dataViews.find((dataView) => dataView.title === currentIndexPattern) || + adHocDataViews.find((dataView) => dataView.getIndexPattern() === currentIndexPattern); - const placeholder = i18n.translate('xpack.observability.slo.sloEdit.indexSelection.placeholder', { - defaultMessage: 'Select an index pattern', - }); + if (!missingAdHocDataView && currentIndexPattern) { + async function loadMissingDataView() { + const dataView = await dataViewsService.create( + { + title: currentIndexPattern, + allowNoIndex: true, + }, + true + ); + if (dataView.getIndexPattern() === currentIndexPattern) { + setAdHocDataViews((prev) => [...prev, dataView]); + } + } + + loadMissingDataView(); + } + } + }, [adHocDataViews, currentIndexPattern, dataViews, dataViewsService, isDataViewsLoading]); + + const getDataViewPatternById = (id?: string) => { + return ( + dataViews.find((dataView) => dataView.id === id)?.title || + adHocDataViews.find((dataView) => dataView.id === id)?.getIndexPattern() + ); + }; + + const getDataViewIdByIndexPattern = (indexPattern: string) => { + return ( + dataViews.find((dataView) => dataView.title === indexPattern) || + adHocDataViews.find((dataView) => dataView.getIndexPattern() === indexPattern) + ); + }; return ( - + ( - { - if (selected.length) { - return field.onChange(selected[0].value); - } - - field.onChange(''); + { + field.onChange(getDataViewPatternById(newId)); + dataViewsService.get(newId).then((dataView) => { + if (dataView.timeFieldName) { + setValue('indicator.params.timestampField', dataView.timeFieldName); + } + }); + }} + currentDataViewId={getDataViewIdByIndexPattern(field.value)?.id} + onDataViewCreated={() => { + dataViewEditor.openEditor({ + allowAdHocDataView: true, + onSave: (dataView: DataView) => { + if (!dataView.isPersisted()) { + setAdHocDataViews([...adHocDataViews, dataView]); + field.onChange(dataView.getIndexPattern()); + } else { + field.onChange(getDataViewPatternById(dataView.id)); + } + if (dataView.timeFieldName) { + setValue('indicator.params.timestampField', dataView.timeFieldName); + } + }, + }); }} - options={options} - onSearchChange={onSearchChange} - selectedOptions={ - !!field.value - ? [ - { - value: field.value, - label: field.value, - 'data-test-subj': 'indexSelectionSelectedValue', - }, - ] - : [] - } - singleSelection /> )} /> @@ -99,50 +116,16 @@ export function IndexSelection() { ); } -function createDataViewLabel(dataView: DataView) { - return `${dataView.getName()} (${dataView.getIndexPattern()})`; -} - -function createDataViewsOption(dataViews: DataView[]): Option { - return { - label: i18n.translate('xpack.observability.slo.sloEdit.indexSelection.dataViewOptionsLabel', { - defaultMessage: 'Select an index pattern from an existing Data View', - }), - options: dataViews - .map((view) => ({ - label: createDataViewLabel(view), - value: view.getIndexPattern(), - })) - .sort((a, b) => String(a.label).localeCompare(b.label)), - }; -} - -function createIndexPatternOption(searchValue: string, indices: string[]): Option { - const indexPattern = searchValue.endsWith('*') ? searchValue : `${searchValue}*`; - const hasMatchingIndices = indices.length > 0; +const SELECT_DATA_VIEW = i18n.translate( + 'xpack.observability.slo.sloEdit.customKql.dataViewSelection.label', + { + defaultMessage: 'Select a Data view', + } +); - return { - label: i18n.translate( - 'xpack.observability.slo.sloEdit.customKql.indexSelection.indexPatternLabel', - { defaultMessage: 'Use the index pattern' } - ), - options: [ - { - value: indexPattern, - label: hasMatchingIndices - ? i18n.translate( - 'xpack.observability.slo.sloEdit.customKql.indexSelection.indexPatternFoundLabel', - { - defaultMessage: - '{searchPattern} (match {num, plural, one {# index} other {# indices}})', - values: { searchPattern: indexPattern, num: indices.length }, - } - ) - : i18n.translate( - 'xpack.observability.slo.sloEdit.indexSelection.indexPatternNoMatchLabel', - { defaultMessage: '{searchPattern}', values: { searchPattern: indexPattern } } - ), - }, - ], - }; -} +const INDEX_LABEL = i18n.translate( + 'xpack.observability.slo.sloEdit.customKql.indexSelection.label', + { + defaultMessage: 'Index', + } +); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx index 42130cf204df6..5f528d117bbb4 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx @@ -10,8 +10,8 @@ import { i18n } from '@kbn/i18n'; import { ALL_VALUE } from '@kbn/slo-schema/src/schema/common'; import React from 'react'; import { useFormContext } from 'react-hook-form'; +import { useCreateDataView } from '../../../../hooks/use_create_data_view'; import { useFetchGroupByCardinality } from '../../../../hooks/slo/use_fetch_group_by_cardinality'; -import { useFetchIndexPatternFields } from '../../../../hooks/slo/use_fetch_index_pattern_fields'; import { CreateSLOForm } from '../../types'; import { DataPreviewChart } from '../common/data_preview_chart'; import { IndexFieldSelector } from '../common/index_field_selector'; @@ -24,10 +24,11 @@ export function CustomKqlIndicatorTypeForm() { const timestampField = watch('indicator.params.timestampField'); const groupByField = watch('groupBy'); - const { isLoading: isIndexFieldsLoading, data: indexFields = [] } = - useFetchIndexPatternFields(index); - const timestampFields = indexFields.filter((field) => field.type === 'date'); - const groupByFields = indexFields.filter((field) => field.aggregatable); + const { dataView, loading: isIndexFieldsLoading } = useCreateDataView({ + indexPatternString: index, + }); + const timestampFields = dataView?.fields?.filter((field) => field.type === 'date') ?? []; + const groupByFields = dataView?.fields?.filter((field) => field.aggregatable) ?? []; const { isLoading: isGroupByCardinalityLoading, data: groupByCardinality } = useFetchGroupByCardinality(index, timestampField, groupByField); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx index 553969637129d..3eca039382b35 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx @@ -82,10 +82,13 @@ const mockKibana = () => { dataViews: { find: jest.fn().mockReturnValue([]), get: jest.fn().mockReturnValue([]), + getDefault: jest.fn(), }, }, dataViews: { - create: jest.fn().mockResolvedValue(42), + create: jest.fn().mockResolvedValue({ + getIndexPattern: jest.fn().mockReturnValue('some-index'), + }), }, docLinks: { links: { @@ -110,7 +113,6 @@ const mockKibana = () => { triggersActionsUi: { getAddRuleFlyout: jest .fn() - .mockReturnValue(
    Add Rule Flyout
    ), }, uiSettings: { diff --git a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts index 643d5ffd4f337..c9079991bdf4d 100644 --- a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts @@ -145,13 +145,13 @@ export const registerObservabilityRuleTypes = async ( const dataViewId = getDataViewId(searchConfiguration); return { reason: fields[ALERT_REASON] ?? '-', - link: getViewInAppUrl( + link: getViewInAppUrl({ metrics, - fields[ALERT_START], + startedAt: fields[ALERT_START], logExplorerLocator, - (searchConfiguration?.query as { query: string }).query, - dataViewId - ), + filter: (searchConfiguration?.query as { query: string }).query, + dataViewId, + }), hasBasePath: true, }; }, diff --git a/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts b/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts index f2c1a08d47c46..79494de1d7cf1 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts @@ -16,8 +16,8 @@ describe('computeSLI', () => { expect(computeSLI(100, 1000)).toEqual(0.1); }); - it('returns 1 when good is greater than total events', () => { - expect(computeSLI(9999, 9)).toEqual(1); + it('returns when good is greater than total events', () => { + expect(computeSLI(9999, 9)).toEqual(1111); }); it('returns rounds the value to 6 digits', () => { diff --git a/x-pack/plugins/observability/server/domain/services/compute_sli.ts b/x-pack/plugins/observability/server/domain/services/compute_sli.ts index eb7d0493f5534..bafab79104134 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_sli.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_sli.ts @@ -14,9 +14,5 @@ export function computeSLI(good: number, total: number): number { return NO_DATA; } - if (good >= total) { - return 1; - } - return toHighPrecision(good / total); } diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts index b769f5f32b73b..f581236e22925 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts @@ -27,10 +27,11 @@ import { CustomMetricExpressionParams, CustomThresholdExpressionMetric, } from '../../../../common/custom_threshold_rule/types'; +import { getViewInAppUrl } from '../../../../common/custom_threshold_rule/get_view_in_app_url'; jest.mock('./lib/evaluate_rule', () => ({ evaluateRule: jest.fn() })); jest.mock('../../../../common/custom_threshold_rule/get_view_in_app_url', () => ({ - getViewInAppUrl: () => 'mockedViewInApp', + getViewInAppUrl: jest.fn().mockReturnValue('mockedViewInApp'), })); interface AlertTestInstance { @@ -67,6 +68,7 @@ const logger = { const STARTED_AT_MOCK_DATE = new Date(); +const mockQuery = 'mockQuery'; const mockOptions = { executionId: '', startedAt: STARTED_AT_MOCK_DATE, @@ -74,7 +76,7 @@ const mockOptions = { params: { searchConfiguration: { query: { - query: '', + query: mockQuery, language: 'kuery', }, }, @@ -1058,6 +1060,7 @@ describe('The custom threshold alert type', () => { ); }); }); + describe('querying with the count aggregator', () => { afterAll(() => clearInstances()); const instanceID = '*'; @@ -1196,6 +1199,63 @@ describe('The custom threshold alert type', () => { }); }); }); + + describe('querying recovered alert with a count aggregator', () => { + afterAll(() => clearInstances()); + const execute = (comparator: Comparator, threshold: number[], sourceId: string = 'default') => + executor({ + ...mockOptions, + services, + params: { + ...mockOptions.params, + sourceId, + criteria: [ + { + ...customThresholdCountCriterion, + comparator, + threshold, + }, + ], + }, + }); + test('alerts based on the doc_count value instead of the aggregatedValue', async () => { + setEvaluationResults([ + { + '*': { + ...customThresholdCountCriterion, + comparator: Comparator.GT, + threshold: [0.9], + currentValue: 1, + timestamp: new Date().toISOString(), + shouldFire: true, + isNoData: false, + bucketKey: { groupBy0: 'a' }, + }, + }, + ]); + const mockedSetContext = jest.fn(); + services.alertFactory.done.mockImplementation(() => { + return { + getRecoveredAlerts: jest.fn().mockReturnValue([ + { + setContext: mockedSetContext, + getId: jest.fn().mockReturnValue('mockedId'), + }, + ]), + }; + }); + await execute(Comparator.GT, [0.9]); + const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/; + expect(getViewInAppUrl).toBeCalledWith({ + dataViewId: 'c34a7c79-a88b-4b4a-ad19-72f6d24104e4', + filter: mockQuery, + logExplorerLocator: undefined, + metrics: customThresholdCountCriterion.metrics, + startedAt: expect.stringMatching(ISO_DATE_REGEX), + }); + }); + }); + describe("querying a metric that hasn't reported data", () => { afterAll(() => clearInstances()); const instanceID = '*'; @@ -1901,12 +1961,14 @@ const customThresholdNonCountCriterion: CustomMetricExpressionParams = { threshold: [0], }; +const mockedCountFilter = 'mockedCountFilter'; const customThresholdCountCriterion: CustomMetricExpressionParams = { comparator: Comparator.GT, metrics: [ { aggType: Aggregators.COUNT, name: 'A', + filter: mockedCountFilter, }, ], timeSize: 1, diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts index 2aa9ee09a073d..1be464f0fbbc3 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts @@ -295,13 +295,13 @@ export const createCustomThresholdExecutor = ({ } return formatAlertResult(evaluation).currentValue; }), - viewInAppUrl: getViewInAppUrl( - alertResults.length === 1 ? alertResults[0][group].metrics : [], - indexedStartedAt, + viewInAppUrl: getViewInAppUrl({ + dataViewId: params.searchConfiguration?.index?.title ?? dataViewId, + filter: params.searchConfiguration.query.query, logExplorerLocator, - params.searchConfiguration.query.query, - params.searchConfiguration?.index?.title ?? dataViewId - ), + metrics: alertResults.length === 1 ? alertResults[0][group].metrics : [], + startedAt: indexedStartedAt, + }), ...additionalContext, }); } @@ -321,6 +321,7 @@ export const createCustomThresholdExecutor = ({ const alertUuid = getAlertUuid(recoveredAlertId); const timestamp = startedAt.toISOString(); const indexedStartedAt = getAlertStartedDate(recoveredAlertId) ?? timestamp; + const group = groupByKeysObjectForRecovered[recoveredAlertId]; const alertHits = alertUuid ? await getAlertByAlertUuid(alertUuid) : undefined; const additionalContext = getContextForRecoveredAlerts(alertHits); @@ -333,8 +334,15 @@ export const createCustomThresholdExecutor = ({ alertsLocator, basePath.publicBaseUrl ), - group: groupByKeysObjectForRecovered[recoveredAlertId], + group, timestamp: startedAt.toISOString(), + viewInAppUrl: getViewInAppUrl({ + dataViewId: params.searchConfiguration?.index?.title ?? dataViewId, + filter: params.searchConfiguration.query.query, + logExplorerLocator, + metrics: params.criteria[0]?.metrics, + startedAt: indexedStartedAt, + }), ...additionalContext, }); } diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 791ddc8108312..b5be8fb9f622e 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -28,6 +28,7 @@ import { i18n } from '@kbn/i18n'; import { ApmRuleType, ES_QUERY_ID, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, } from '@kbn/rule-data-utils'; @@ -89,6 +90,7 @@ const o11yRuleTypes = [ SLO_BURN_RATE_RULE_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, ES_QUERY_ID, + ML_ANOMALY_DETECTION_RULE_TYPE_ID, METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, ...Object.values(ApmRuleType), ]; diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap index 8c2cfc3b0d1f5..7c0ea00b409c9 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap @@ -149,8 +149,8 @@ Array [ "goodEvents": 0, "isTempDoc": true, "service": Object { - "environment": null, - "name": null, + "environment": "irrelevant", + "name": "irrelevant", }, "sliValue": -1, "slo": Object { @@ -180,8 +180,8 @@ Array [ "statusCode": 0, "totalEvents": 0, "transaction": Object { - "name": null, - "type": null, + "name": "irrelevant", + "type": "irrelevant", }, }, "id": "slo-unique-id", diff --git a/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap index 9ad1d09bd1ef8..d70d8ebfc0073 100644 --- a/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap @@ -435,8 +435,8 @@ exports[`ResetSLO resets all associated resources 11`] = ` "goodEvents": 0, "isTempDoc": true, "service": Object { - "environment": null, - "name": null, + "environment": "irrelevant", + "name": "irrelevant", }, "sliValue": -1, "slo": Object { @@ -469,8 +469,8 @@ exports[`ResetSLO resets all associated resources 11`] = ` "statusCode": 0, "totalEvents": 0, "transaction": Object { - "name": null, - "type": null, + "name": "irrelevant", + "type": "irrelevant", }, }, "id": "slo-irrelevant", diff --git a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts index 166ca0198dbb8..8e1939647bac8 100644 --- a/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts +++ b/x-pack/plugins/observability/server/services/slo/summary_transform_generator/helpers/create_temp_summary.ts @@ -9,14 +9,16 @@ import { ALL_VALUE } from '@kbn/slo-schema'; import { SLO } from '../../../../domain/models'; export function createTempSummaryDocument(slo: SLO, spaceId: string) { + const apmParams = 'environment' in slo.indicator.params ? slo.indicator.params : null; + return { service: { - environment: null, - name: null, + environment: apmParams?.environment ?? null, + name: apmParams?.service ?? null, }, transaction: { - name: null, - type: null, + name: apmParams?.transactionName ?? null, + type: apmParams?.transactionType ?? null, }, slo: { indicator: { diff --git a/x-pack/plugins/observability/server/ui_settings.ts b/x-pack/plugins/observability/server/ui_settings.ts index 8029b412ebb6a..5890dd4e16611 100644 --- a/x-pack/plugins/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability/server/ui_settings.ts @@ -33,7 +33,6 @@ import { profilingCo2PerKWH, profilingDatacenterPUE, profilingPervCPUWattX86, - profilingUseLegacyCo2Calculation, profilingPervCPUWattArm64, profilingAWSCostDiscountRate, profilingCostPervCPUPerHour, @@ -479,14 +478,6 @@ export const uiSettings: Record = { schema: schema.number({ min: 0 }), requiresPageReload: true, }, - [profilingUseLegacyCo2Calculation]: { - category: [observabilityFeatureId], - name: i18n.translate('xpack.observability.profilingUseLegacyCo2Calculation', { - defaultMessage: 'Use legacy CO2 and Dollar cost calculations in Universal Profiling', - }), - value: false, - schema: schema.boolean(), - }, [profilingAWSCostDiscountRate]: { category: [observabilityFeatureId], name: i18n.translate('xpack.observability.profilingAWSCostDiscountRateUiSettingName', { diff --git a/x-pack/plugins/observability_ai_assistant/common/types.ts b/x-pack/plugins/observability_ai_assistant/common/types.ts index 2584a1c7083fd..b7ef771378403 100644 --- a/x-pack/plugins/observability_ai_assistant/common/types.ts +++ b/x-pack/plugins/observability_ai_assistant/common/types.ts @@ -6,15 +6,12 @@ */ import type { JSONSchema } from 'json-schema-to-ts'; -import type { - CreateChatCompletionResponse, - CreateChatCompletionResponseChoicesInner, -} from 'openai'; +import type OpenAI from 'openai'; import type { Observable } from 'rxjs'; -export type CreateChatCompletionResponseChunk = Omit & { +export type CreateChatCompletionResponseChunk = Omit & { choices: Array< - Omit & { + Omit & { delta: { content?: string; function_call?: { name?: string; arguments?: string } }; } >; diff --git a/x-pack/plugins/observability_ai_assistant/jest.config.js b/x-pack/plugins/observability_ai_assistant/jest.config.js index ff54dbc08c2b0..61cc1b353b1cf 100644 --- a/x-pack/plugins/observability_ai_assistant/jest.config.js +++ b/x-pack/plugins/observability_ai_assistant/jest.config.js @@ -8,11 +8,16 @@ module.exports = { preset: '@kbn/test', rootDir: '../../..', - roots: ['/x-pack/plugins/observability_ai_assistant'], + roots: [ + '/x-pack/plugins/observability_ai_assistant/public', + '/x-pack/plugins/observability_ai_assistant/common', + '/x-pack/plugins/observability_ai_assistant/server', + ], setupFiles: ['/x-pack/plugins/observability_ai_assistant/.storybook/jest_setup.js'], collectCoverage: true, collectCoverageFrom: [ '/x-pack/plugins/observability_ai_assistant/{common,public,server}/**/*.{js,ts,tsx}', ], + coverageReporters: ['html'], }; diff --git a/x-pack/plugins/observability_ai_assistant/kibana.jsonc b/x-pack/plugins/observability_ai_assistant/kibana.jsonc index cd2d4b788bc78..4024a9361a372 100644 --- a/x-pack/plugins/observability_ai_assistant/kibana.jsonc +++ b/x-pack/plugins/observability_ai_assistant/kibana.jsonc @@ -20,7 +20,8 @@ "share", "taskManager", "triggersActionsUi", - "dataViews" + "dataViews", + "ml" ], "requiredBundles": [ "kibanaReact", "kibanaUtils"], "optionalPlugins": [], diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_item.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_item.tsx index fc5552d008fa7..9f581b31795f1 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_item.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_item.tsx @@ -12,7 +12,6 @@ import { EuiComment, EuiErrorBoundary, EuiPanel, - EuiSpacer, useGeneratedHtmlId, } from '@elastic/eui'; import { ChatItemActions } from './chat_item_actions'; @@ -27,7 +26,7 @@ import type { Feedback } from '../feedback_buttons'; import type { ChatActionClickHandler } from './types'; import type { TelemetryEventTypeWithPayload } from '../../analytics'; -export interface ChatItemProps extends ChatTimelineItem { +export interface ChatItemProps extends Omit { onActionClick: ChatActionClickHandler; onEditSubmit: (message: Message) => void; onFeedbackClick: (feedback: Feedback) => void; @@ -36,15 +35,19 @@ export interface ChatItemProps extends ChatTimelineItem { onStopGeneratingClick: () => void; } -const normalMessageClassName = css` - .euiCommentEvent__body { - padding: 0; - } - +const moreCompactHeaderClassName = css` .euiCommentEvent__header > .euiPanel { padding-top: 4px; padding-bottom: 4px; } +`; + +const normalMessageClassName = css` + ${moreCompactHeaderClassName} + + .euiCommentEvent__body { + padding: 0; + } /* targets .*euiTimelineItemEvent-top, makes sure text properly wraps and doesn't overflow */ > :last-child { @@ -74,12 +77,13 @@ const noPanelMessageClassName = css` export function ChatItem({ actions: { canCopy, canEdit, canGiveFeedback, canRegenerate }, content, + function_call: functionCall, + role, currentUser, display: { collapsed }, element, error, loading, - message, title, onActionClick, onEditSubmit, @@ -96,10 +100,13 @@ export function ChatItem({ const actions = [canCopy, collapsed, canCopy].filter(Boolean); const noBodyMessageClassName = css` + ${moreCompactHeaderClassName} + .euiCommentEvent__body { padding: 0; height: ${expanded ? 'fit-content' : '0px'}; overflow: hidden; + border: none; } `; @@ -132,7 +139,9 @@ export function ChatItem({ - {contentElement} ); @@ -155,10 +163,8 @@ export function ChatItem({ return ( - } - username={getRoleTranslation(message.message.role)} + timelineAvatar={} + username={getRoleTranslation(role)} event={title} actions={ void; onSubmit: (message: Message) => void; } + +const textContainerClassName = css` + padding: 4px 0; +`; + +const editorContainerClassName = css` + padding: 12px 0; +`; + export function ChatItemContentInlinePromptEditor({ editing, loading, - message, + functionCall, + content, + role, onActionClick, onSendTelemetry, onSubmit, }: Props) { return !editing ? ( - + + + ) : ( -