diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index b8c70aa567697..c74c3d0cfcddf 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -341,7 +341,6 @@ enabled: - x-pack/test/monitoring_api_integration/config.ts - x-pack/test/observability_api_integration/basic/config.ts - x-pack/test/observability_api_integration/trial/config.ts - - x-pack/test/observability_api_integration/apis/config.ts - x-pack/test/observability_functional/with_rac_write.config.ts - x-pack/test/observability_onboarding_api_integration/basic/config.ts - x-pack/test/observability_onboarding_api_integration/cloud/config.ts diff --git a/.buildkite/pipelines/flaky_tests/groups.json b/.buildkite/pipelines/flaky_tests/groups.json index 2d715fcd8f27d..1a5799a862850 100644 --- a/.buildkite/pipelines/flaky_tests/groups.json +++ b/.buildkite/pipelines/flaky_tests/groups.json @@ -24,6 +24,14 @@ "key": "cypress/security_serverless_explore", "name": "[Serverless] Security Solution Explore - Cypress" }, + { + "key": "cypress/defend_workflows", + "name": "Security Solution Defend Workflows - Cypress" + }, + { + "key": "cypress/defend_workflows_serverless", + "name": "[Serverless] Security Solution Defend Workflows - Cypress" + }, { "key": "cypress/osquery_cypress", "name": "Osquery - Cypress" diff --git a/.buildkite/pipelines/pipeline.kibana-serverless-release.yaml b/.buildkite/pipelines/pipeline.kibana-serverless-release.yaml index 9c3e235c5564a..84dae4c24db48 100644 --- a/.buildkite/pipelines/pipeline.kibana-serverless-release.yaml +++ b/.buildkite/pipelines/pipeline.kibana-serverless-release.yaml @@ -2,7 +2,7 @@ steps: - label: ":releasethekraken: Release kibana" # https://regex101.com/r/tY52jo/1 if: build.tag =~ /^deploy@\d+\$/ - trigger: gpctl-promote-with-e2e-tests + trigger: gpctl-promote build: env: SERVICE_COMMIT_HASH: "${BUILDKITE_COMMIT:0:12}" diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index fd47dd6c08225..abc6436e7ee0a 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -63,7 +63,7 @@ steps: queue: n2-4-spot depends_on: build timeout_in_minutes: 60 - parallelism: 2 + parallelism: 4 retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-production-canary.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-production-canary.yaml new file mode 100644 index 0000000000000..8b30d4e141b08 --- /dev/null +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-production-canary.yaml @@ -0,0 +1,25 @@ +# These pipeline steps constitute the quality gate for your service within the production-canary environment. +# Incorporate any necessary additional logic to validate the service's integrity. +# A failure in this pipeline build will prevent further progression to the subsequent stage. + +steps: + - label: ":pipeline::kibana::seedling: Trigger SLO check" + trigger: "serverless-quality-gates" # https://buildkite.com/elastic/serverless-quality-gates + build: + message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production-canary.yaml)" + env: + TARGET_ENV: production-canary + CHECK_SLO: true + CHECK_SLO_TAG: kibana + soft_fail: true + + - label: ":pipeline::rocket::seedling: Trigger control-plane e2e tests" + trigger: "ess-k8s-production-e2e-tests" # https://buildkite.com/elastic/ess-k8s-production-e2e-tests + build: + env: + REGION_ID: aws-us-east-1 + NAME_PREFIX: ci_test_kibana-promotion_ + message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production-canary.yaml)" + + - label: ":cookie: 24h bake time before continuing promotion" + command: "sleep 86400" diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-production-noncanary.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-production-noncanary.yaml new file mode 100644 index 0000000000000..13c974a344f98 --- /dev/null +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-production-noncanary.yaml @@ -0,0 +1,22 @@ +# These pipeline steps constitute the quality gate for your service within the production-noncanary environment. +# Incorporate any necessary additional logic to validate the service's integrity. +# A failure in this pipeline build will prevent further progression to the subsequent stage. + +steps: + - label: ":pipeline::kibana::seedling: Trigger SLO check" + trigger: "serverless-quality-gates" # https://buildkite.com/elastic/serverless-quality-gates + build: + message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production-noncanary.yaml)" + env: + TARGET_ENV: production-noncanary + CHECK_SLO: true + CHECK_SLO_TAG: kibana + soft_fail: true + + - label: ":pipeline::rocket::seedling: Trigger control-plane e2e tests" + trigger: "ess-k8s-production-e2e-tests" # https://buildkite.com/elastic/ess-k8s-production-e2e-tests + build: + env: + REGION_ID: aws-us-east-1 + NAME_PREFIX: ci_test_kibana-promotion_ + message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production-noncanary.yaml)" diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml index 2161b000dc412..4b0bb30d3084c 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-production.yaml @@ -2,7 +2,21 @@ # Incorporate any necessary additional logic to validate the service's integrity. # A failure in this pipeline build will prevent further progression to the subsequent stage. +# DEPRECATION NOTICE: +# PRODUCTION WILL SOON BE SPLIT INTO "CANARY" AND "NONCANARY" AND THIS FILE WILL BE DELETED. +# ENSURE ANY CHANGE MADE TO THIS FILE IS REFLECTED IN THOSE FILES AS WELL. + steps: + - label: ":pipeline::kibana::seedling: Trigger SLO check" + trigger: "serverless-quality-gates" # https://buildkite.com/elastic/serverless-quality-gates + build: + message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production.yaml)" + env: + TARGET_ENV: production + CHECK_SLO: true + CHECK_SLO_TAG: kibana + soft_fail: true + - label: ":pipeline::rocket::seedling: Trigger control-plane e2e tests" trigger: "ess-k8s-production-e2e-tests" # https://buildkite.com/elastic/ess-k8s-production-e2e-tests build: @@ -10,11 +24,3 @@ steps: REGION_ID: aws-us-east-1 NAME_PREFIX: ci_test_kibana-promotion_ message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-production.yaml)" - - - wait: ~ - - - label: ":judge::seedling: Trigger Manual Tests Phase" - command: "make -C /agent trigger-manual-verification-phase" - if: build.branch == "main" - agents: - image: "docker.elastic.co/ci-agent-images/manual-verification-agent:0.0.2" diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-qa.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-qa.yaml index 962da8da4d86e..c4545b6ecfaed 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.tests-qa.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-qa.yaml @@ -3,18 +3,6 @@ # A failure in this pipeline build will prevent further progression to the subsequent stage. steps: - - label: ":pipeline::kibana::seedling: Trigger SLO check" - trigger: "serverless-quality-gates" # https://buildkite.com/elastic/serverless-quality-gates - build: - message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-qa.yaml)" - env: - TARGET_ENV: qa - CHECK_SLO: true - CHECK_SLO_TAG: kibana - CHECK_SLO_WAITING_PERIOD: 10m - CHECK_SLO_BURN_RATE_THRESHOLD: 0.1 - soft_fail: true - - label: ":pipeline::kibana::seedling: Trigger Kibana Serverless Tests for ${ENVIRONMENT}" trigger: appex-qa-serverless-kibana-ftr-tests # https://buildkite.com/elastic/appex-qa-serverless-kibana-ftr-tests soft_fail: true # Remove this before release or when tests stabilize @@ -30,6 +18,7 @@ steps: steps: - label: ":pipeline::female-detective::seedling: Trigger Security Solution quality gate script" command: .buildkite/scripts/pipelines/security_solution_quality_gate/pipeline.sh + soft_fail: true # Remove this when tests are fixed - label: ":pipeline::ship::seedling: Trigger Fleet serverless smoke tests for ${ENVIRONMENT}" trigger: fleet-smoke-tests # https://buildkite.com/elastic/fleet-smoke-tests diff --git a/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml b/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml index 42fa2b34ea84f..d5cce621002b3 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.tests-staging.yaml @@ -3,16 +3,6 @@ # A failure in this pipeline build will prevent further progression to the subsequent stage. steps: - - label: ":pipeline::kibana::seedling: Trigger SLO check" - trigger: "serverless-quality-gates" # https://buildkite.com/elastic/serverless-quality-gates - build: - message: "${BUILDKITE_MESSAGE} (triggered by pipeline.tests-staging.yaml)" - env: - TARGET_ENV: staging - CHECK_SLO: true - CHECK_SLO_TAG: kibana - soft_fail: true - - label: ":pipeline::rocket::seedling: Trigger control-plane e2e tests" trigger: "ess-k8s-staging-e2e-tests" # https://buildkite.com/elastic/ess-k8s-staging-e2e-tests build: diff --git a/.buildkite/scripts/pipelines/security_solution_quality_gate/pipeline.sh b/.buildkite/scripts/pipelines/security_solution_quality_gate/pipeline.sh index 87dfe7b752e6e..3d61d70cf6828 100755 --- a/.buildkite/scripts/pipelines/security_solution_quality_gate/pipeline.sh +++ b/.buildkite/scripts/pipelines/security_solution_quality_gate/pipeline.sh @@ -1,5 +1,19 @@ #!/bin/bash - set -euo pipefail -echo "In the entrypoint for the quality gate" \ No newline at end of file +source .buildkite/scripts/common/util.sh +source .buildkite/scripts/steps/functional/common_cypress.sh +.buildkite/scripts/bootstrap.sh + +export JOB=kibana-security-solution-chrome + +buildkite-agent meta-data set "${BUILDKITE_JOB_ID}_is_test_execution_step" "true" + +echo "--- Serverless Security Second Quality Gate" +cd x-pack/test/security_solution_cypress +set +e + +VAULT_DEC_KEY=$(vault read -field=key secret/kibana-issues/dev/security-solution-qg-enc-key) +ENV_PWD=$(echo $TEST_ENV_PWD | openssl aes-256-cbc -d -a -pass pass:$VAULT_DEC_KEY) + +CYPRESS_ELASTICSEARCH_URL=$TEST_ENV_ES_URL CYPRESS_BASE_URL=$TEST_ENV_KB_URL CYPRESS_ELASTICSEARCH_USERNAME=$TEST_ENV_USERNAME CYPRESS_ELASTICSEARCH_PASSWORD=$ENV_PWD CYPRESS_KIBANA_URL=$CYPRESS_BASE_URL yarn cypress:run:qa:serverless; status=$?; yarn junit:merge || :; exit $status \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bd7585c307486..ccb65e643d219 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1095,6 +1095,10 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib /test/interactive_setup_api_integration/ @elastic/kibana-security /test/interactive_setup_functional/ @elastic/kibana-security /test/plugin_functional/test_suites/core_plugins/rendering.ts @elastic/kibana-security +/x-pack/test/accessibility/apps/login_page.ts @elastic/kibana-security +/x-pack/test/accessibility/apps/roles.ts @elastic/kibana-security +/x-pack/test/accessibility/apps/spaces.ts @elastic/kibana-security +/x-pack/test/accessibility/apps/users.ts @elastic/kibana-security /x-pack/test/api_integration/apis/security/ @elastic/kibana-security /x-pack/test/api_integration/apis/spaces/ @elastic/kibana-security /x-pack/test/ui_capabilities/ @elastic/kibana-security @@ -1155,6 +1159,7 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib /x-pack/plugins/security_solution/common/types/timeline @elastic/security-threat-hunting-investigations /x-pack/test/security_solution_cypress/cypress/e2e/investigations @elastic/security-threat-hunting-investigations +/x-pack/test/security_solution_cypress/cypress/e2e/sourcerer/sourcerer_timeline.cy.ts @elastic/security-threat-hunting-investigations /x-pack/plugins/security_solution/public/common/components/alerts_viewer @elastic/security-threat-hunting-investigations /x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_action @elastic/security-threat-hunting-investigations @@ -1293,8 +1298,8 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib /x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals @elastic/security-detection-engine /x-pack/plugins/security_solution/server/lib/sourcerer @elastic/security-detection-engine -/x-pack/test/security_solution_cypress/cypress/e2e/data_sources @elastic/security-detection-engine -/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts @elastic/security-detection-engine +/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer @elastic/security-detection-engine +/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts @elastic/security-detection-engine /x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions @elastic/security-detection-engine /x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_creation @elastic/security-detection-engine /x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_edit @elastic/security-detection-engine diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 18eef6b23d835..02a173fc12ed9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 5b24b8a76b9b2..120774eb8af0e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 6448bc18342d2..0dc4119e36902 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-10-12 +date: 2023-10-16 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 05ddcbac18e52..d92d8b3859a2b 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3395,10 +3395,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts" }, - { - "plugin": "infra", - "path": "x-pack/plugins/infra/server/lib/alerting/metric_anomaly/metric_anomaly_executor.ts" - }, { "plugin": "monitoring", "path": "x-pack/plugins/monitoring/server/alerts/base_rule.ts" @@ -5470,6 +5466,101 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage", + "type": "Function", + "tags": [], + "label": "getRuleCircuitBreakerErrorMessage", + "description": [], + "signature": [ + "({ name, interval, intervalAvailable, action, rules, }: { name?: string | undefined; interval: number; intervalAvailable: number; action: \"create\" | \"update\" | \"bulkEdit\" | \"enable\" | \"bulkEnable\"; rules?: number | undefined; }) => string" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1", + "type": "Object", + "tags": [], + "label": "{\n name = '',\n interval,\n intervalAvailable,\n action,\n rules = 1,\n}", + "description": [], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1.interval", + "type": "number", + "tags": [], + "label": "interval", + "description": [], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1.intervalAvailable", + "type": "number", + "tags": [], + "label": "intervalAvailable", + "description": [], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1.action", + "type": "CompoundType", + "tags": [], + "label": "action", + "description": [], + "signature": [ + "\"create\" | \"update\" | \"bulkEdit\" | \"enable\" | \"bulkEnable\"" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.getRuleCircuitBreakerErrorMessage.$1.rules", + "type": "number", + "tags": [], + "label": "rules", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-common.getRuleTagsAggregation", @@ -5649,6 +5740,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-common.parseRuleCircuitBreakerErrorMessage", + "type": "Function", + "tags": [], + "label": "parseRuleCircuitBreakerErrorMessage", + "description": [], + "signature": [ + "(message: string) => { summary: string; details?: string | undefined; }" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-common.parseRuleCircuitBreakerErrorMessage.$1", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-common.validateDurationSchema", diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index b7bcb786f707c..d0b7f097d8490 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-10-12 +date: 2023-10-16 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 | |-------------------|-----------|------------------------|-----------------| -| 776 | 1 | 745 | 50 | +| 785 | 1 | 754 | 50 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 568292e806e7f..a4162a8b9474c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 07318ac6f5738..ea1c59df4e5cd 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index e463c00fa53cc..08106abfb2a0b 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-10-12 +date: 2023-10-16 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 48ae51ec91e05..0771bd378592e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 056ac22d50f2d..3255c0f66ae68 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 9dfea4db85baf..460f5fe590832 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 461772ce8f4fd..3cd9a27751c4b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 3d00f01f35811..fafbfa25cef9e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 3d03e7f4974c1..cc3d2d8103019 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index f8b90926bf3e0..b21f4f6b3e761 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index be76eeb02cc3a..3d8628300a460 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 098d4e54d7d15..5ba408c46f260 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index bb537024262c8..a2e8dbf230742 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-10-12 +date: 2023-10-16 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 2a89072ad3d53..cc00d1a3822d1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index eefab87652203..dafd936416ad2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 5734e71ab34fd..601040eeba457 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 88482645b3f1c..a742cf4a9b9e0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index b8b6b35107117..b466360ca1ab9 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-10-12 +date: 2023-10-16 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 c384b992d0bc4..976dc794e74b0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 83f4f01db8b1f..3bfacc6037264 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -7805,6 +7805,20 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-public.GetFieldsOptions.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -13219,16 +13233,16 @@ "path": "x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts" + "plugin": "threatIntelligence", + "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts" }, { - "plugin": "threatIntelligence", - "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts" }, { "plugin": "securitySolution", @@ -13668,7 +13682,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx" }, { "plugin": "transform", @@ -14244,6 +14258,22 @@ "index pattern string" ] }, + { + "parentPluginId": "data", + "id": "def-server.DataView.getAllowHidden", + "type": "Function", + "tags": [], + "label": "getAllowHidden", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "src/plugins/data_views/common/data_views/data_view.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-server.DataView.setIndexPattern", @@ -17235,7 +17265,7 @@ "signature": [ "(options: { pattern: string | string[]; metaFields?: string[] | undefined; fieldCapsOptions?: { allow_no_indices: boolean; includeUnmapped?: boolean | undefined; } | undefined; type?: string | undefined; rollupIndex?: string | undefined; indexFilter?: ", "QueryDslQueryContainer", - " | undefined; fields?: string[] | undefined; }) => Promise<{ fields: ", + " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; }) => Promise<{ fields: ", { "pluginId": "dataViews", "scope": "server", @@ -17358,6 +17388,20 @@ "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -20978,16 +21022,16 @@ "path": "x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts" + "plugin": "threatIntelligence", + "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts" }, { - "plugin": "threatIntelligence", - "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts" }, { "plugin": "securitySolution", @@ -21427,7 +21471,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx" }, { "plugin": "transform", @@ -22003,6 +22047,22 @@ "index pattern string" ] }, + { + "parentPluginId": "data", + "id": "def-common.DataView.getAllowHidden", + "type": "Function", + "tags": [], + "label": "getAllowHidden", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "src/plugins/data_views/common/data_views/data_view.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-common.DataView.setIndexPattern", @@ -26905,6 +26965,22 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-common.DataViewAttributes.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [ + "\nAllow hidden and system indices when loading field list" + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -27154,6 +27230,20 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-common.GetFieldsOptions.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -27331,7 +27421,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts", "deprecated": false, @@ -28458,7 +28548,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/data_views/common/types.ts", "deprecated": false, diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 6c423b32d1583..36f38886235f1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.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 | |-------------------|-----------|------------------------|-----------------| -| 3284 | 33 | 2549 | 24 | +| 3290 | 33 | 2554 | 24 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index ce1b32ab4901c..8fa593404cf86 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.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 | |-------------------|-----------|------------------------|-----------------| -| 3284 | 33 | 2549 | 24 | +| 3290 | 33 | 2554 | 24 | ## Client diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index f8629628a5612..b3d92f1f8bdb8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.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 | |-------------------|-----------|------------------------|-----------------| -| 3284 | 33 | 2549 | 24 | +| 3290 | 33 | 2554 | 24 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 3ff78bc170c3b..c61754c59a02a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index f97d3ca425605..7278635456972 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 0cd978640fe98..cd0ece04e34d9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 068d11d335ab7..872458d9a15e3 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -180,16 +180,16 @@ "path": "x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts" + "plugin": "threatIntelligence", + "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts" }, { - "plugin": "threatIntelligence", - "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts" }, { "plugin": "securitySolution", @@ -625,7 +625,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx" }, { "plugin": "transform", @@ -1225,6 +1225,22 @@ "index pattern string" ] }, + { + "parentPluginId": "dataViews", + "id": "def-public.DataView.getAllowHidden", + "type": "Function", + "tags": [], + "label": "getAllowHidden", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "src/plugins/data_views/common/data_views/data_view.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-public.DataView.setIndexPattern", @@ -6126,6 +6142,22 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-public.DataViewAttributes.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [ + "\nAllow hidden and system indices when loading field list" + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -7782,7 +7814,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/data_views/common/types.ts", "deprecated": false, @@ -8187,16 +8219,16 @@ "path": "x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts" + "plugin": "threatIntelligence", + "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts" }, { - "plugin": "threatIntelligence", - "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts" }, { "plugin": "securitySolution", @@ -8632,7 +8664,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx" }, { "plugin": "transform", @@ -9232,6 +9264,22 @@ "index pattern string" ] }, + { + "parentPluginId": "dataViews", + "id": "def-server.DataView.getAllowHidden", + "type": "Function", + "tags": [], + "label": "getAllowHidden", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "src/plugins/data_views/common/data_views/data_view.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-server.DataView.setIndexPattern", @@ -12517,7 +12565,7 @@ "signature": [ "(options: { pattern: string | string[]; metaFields?: string[] | undefined; fieldCapsOptions?: { allow_no_indices: boolean; includeUnmapped?: boolean | undefined; } | undefined; type?: string | undefined; rollupIndex?: string | undefined; indexFilter?: ", "QueryDslQueryContainer", - " | undefined; fields?: string[] | undefined; }) => Promise<{ fields: ", + " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; }) => Promise<{ fields: ", { "pluginId": "dataViews", "scope": "server", @@ -12640,6 +12688,20 @@ "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -15255,16 +15317,16 @@ "path": "x-pack/plugins/lists/public/exceptions/components/builder/helpers.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts" + "plugin": "threatIntelligence", + "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts" }, { - "plugin": "threatIntelligence", - "path": "x-pack/plugins/threat_intelligence/public/mocks/mock_security_context.tsx" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts" }, { "plugin": "securitySolution", @@ -15700,7 +15762,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx" }, { "plugin": "transform", @@ -16300,6 +16362,22 @@ "index pattern string" ] }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataView.getAllowHidden", + "type": "Function", + "tags": [], + "label": "getAllowHidden", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "src/plugins/data_views/common/data_views/data_view.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-common.DataView.setIndexPattern", @@ -20723,6 +20801,22 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewAttributes.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [ + "\nAllow hidden and system indices when loading field list" + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -23055,6 +23149,20 @@ "path": "src/plugins/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-common.GetFieldsOptions.allowHidden", + "type": "CompoundType", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -23737,7 +23845,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/data_views/common/expressions/load_index_pattern.ts", "deprecated": false, @@ -25460,7 +25568,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/data_views/common/types.ts", "deprecated": false, diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 86c6c16d076a4..60c227f73d38f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.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 | |-------------------|-----------|------------------------|-----------------| -| 1041 | 0 | 257 | 2 | +| 1048 | 0 | 262 | 2 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 44681b2e10007..2617bfe9dcc8e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index c967a5f3aa9d4..685b039a4a767 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -25,7 +25,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, dataViews, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, ml, apm, exploratoryView, logsShared, fleet, stackAlerts, dataVisualizer, infra, canvas, presentationUtil, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega, data | - | | | @kbn/es-query, @kbn/visualization-ui-components, observability, securitySolution, timelines, lists, threatIntelligence, savedSearch, data, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, ml, apm, exploratoryView, logsShared, fleet, stackAlerts, dataVisualizer, infra, canvas, presentationUtil, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | -| | home, data, esUiShared, savedObjectsManagement, exploratoryView, fleet, observability, ml, apm, indexLifecycleManagement, observabilityOnboarding, synthetics, upgradeAssistant, uptime, ux, kibanaOverview | - | +| | home, data, esUiShared, savedObjectsManagement, exploratoryView, fleet, ml, apm, indexLifecycleManagement, observabilityOnboarding, synthetics, upgradeAssistant, uptime, ux, kibanaOverview | - | | | share, uiActions, guidedOnboarding, home, serverless, management, spaces, savedObjects, indexManagement, visualizations, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, security, alerting, triggersActionsUi, cases, aiops, advancedSettings, exploratoryView, fleet, licenseManagement, maps, dataVisualizer, ml, infra, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, 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 | - | @@ -130,7 +130,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visTypePie | - | | | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, observabilityOnboarding, console | - | | | @kbn/content-management-table-list-view, filesManagement | - | -| | navigation | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | encryptedSavedObjects | - | | | @kbn/core | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a99c238f31f51..76b5879735994 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1004,7 +1004,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [metric_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts#:~:text=alertFactory), [inventory_metric_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts#:~:text=alertFactory), [metric_anomaly_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/metric_anomaly_executor.ts#:~:text=alertFactory) | - | +| | [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [log_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts#:~:text=alertFactory), [metric_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts#:~:text=alertFactory), [inventory_metric_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts#:~:text=alertFactory) | - | | | [use_kibana_index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/hooks/use_kibana_index_patterns.ts#:~:text=indexPatterns) | - | | | [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [use_data_view.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_data_view.test.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title)+ 6 more | - | | | [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/common/dependency_mocks/index_patterns.ts#:~:text=title), [use_data_view.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/metrics/hosts/hooks/use_data_view.test.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title), [validation_errors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts#:~:text=title)+ 6 more | - | @@ -1217,14 +1217,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## navigation - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [top_nav_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx#:~:text=MountPointPortal), [top_nav_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx#:~:text=MountPointPortal), [top_nav_menu.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx#:~:text=MountPointPortal) | - | - - - ## newsfeed | Deprecated API | Reference location(s) | Remove By | @@ -1241,7 +1233,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | | | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | | | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks) | - | | | [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps), [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps) | - | @@ -1481,7 +1472,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps) | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields) | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [table_tab.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx#:~:text=BrowserField)+ 31 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [helpers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [columns.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [enrichment_summary.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/enrichment_summary.tsx#:~:text=BrowserField), [table_tab.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx#:~:text=BrowserField)+ 31 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/timeline/cells/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/types/header_actions/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts#:~:text=BrowserFields)+ 108 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyRequest) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=IndexFieldsStrategyResponse) | - | @@ -1628,7 +1619,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [data_apis.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts#:~:text=title), [data_apis.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts#:~:text=title) | - | | | [data_apis.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts#:~:text=title), [data_apis.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts#:~:text=title) | - | | | [data_apis.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/common/lib/data_apis.ts#:~:text=title) | - | -| | [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [rule_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx#:~:text=toMountPoint), [rule_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx#:~:text=toMountPoint) | - | +| | [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_edit_response.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [use_bulk_operation_toast.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx#:~:text=toMountPoint), [rule_add.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx#:~:text=toMountPoint), [rule_add.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx#:~:text=toMountPoint), [rule_edit.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx#:~:text=toMountPoint), [rule_edit.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx#:~:text=toMountPoint)+ 6 more | - | | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [connectors_app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx#:~:text=KibanaThemeProvider), [test_utils.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx#:~:text=KibanaThemeProvider), [test_utils.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx#:~:text=KibanaThemeProvider), [test_utils.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx#:~:text=KibanaThemeProvider) | - | | | [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute), [rule_reducer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts#:~:text=SavedObjectAttribute) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index b6a65938d1dd9..88c85793f503b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index dcec7f6659382..7a264a5af132e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index a5036089786d7..39d5d32e4e648 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-10-12 +date: 2023-10-16 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 6d13ea11c8c9a..c38060e7d1d05 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-10-12 +date: 2023-10-16 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 59fc1926bd773..6dd92fa085843 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 88c39d0e46fdb..4dcf948b32183 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-10-12 +date: 2023-10-16 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 d438e7ed82a94..cfb99c994084b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index e38f8e152d8f0..8fe3ea014673f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index d60a7a1fc20b6..f81e66ec955ad 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index ee880baa0230c..9b332c975c363 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 84b422f167e86..b8ffe348d9ba6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.devdocs.json b/api_docs/event_annotation.devdocs.json index 1eb8c01aefbad..f107d3ee6c768 100644 --- a/api_docs/event_annotation.devdocs.json +++ b/api_docs/event_annotation.devdocs.json @@ -1100,6 +1100,40 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupCrudTypes", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupCrudTypes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-utils", + "scope": "common", + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-common.ContentManagementCrudTypes", + "text": "ContentManagementCrudTypes" + }, + "<\"event-annotation-group\", ", + { + "pluginId": "eventAnnotation", + "scope": "common", + "docId": "kibEventAnnotationPluginApi", + "section": "def-common.EventAnnotationGroupSavedObjectAttributes", + "text": "EventAnnotationGroupSavedObjectAttributes" + }, + ", ", + "CreateOptions", + ", ", + "UpdateOptions", + ", {}>" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "eventAnnotation", "id": "def-common.EventAnnotationGroupDeleteIn", diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 15897e921e39c..82cb16d5842d2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.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 | |-------------------|-----------|------------------------|-----------------| -| 200 | 0 | 200 | 6 | +| 201 | 0 | 201 | 6 | ## Client diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 250e4645a47d5..17287d9316e8a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index dc555f4dcea83..cd35f2b641e1a 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-10-12 +date: 2023-10-16 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 ed957b46a8c0d..51ee00757e282 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 87635e89a1f76..0a151648b62e3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 3bd1d6393a9f8..c59e2ab78ed8f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 98a5b4f40d5e7..3a36768794390 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 3dfbebfb96858..61708668f245e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 7f892949c9340..3bb76659b5d28 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 6c9a6f033ab83..75ffff92d9061 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 13bc6dc533b51..776f7071f6165 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 75e66f340ed26..dd7e434ce1d1a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 8c6611da92e6e..9c52d0df22115 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 50c6fa3e26034..eb1464eaa4a9c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 8c58b6962640d..fb171d78b6329 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index ba95728559a15..a3b0c82f024da 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 5893208653bb8..d61407753deb4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 3dc8ea14bbce0..c6a74b5d7d534 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 53f464fde04fe..619e97c4d6390 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 9563c0579470c..0226d1d60ac98 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 631e92ca18b74..f8f823203cb47 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 37e3707a8eaf6..bd6927e3c1dee 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 7022f19fae12b..0b1c090034ba8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 2fd6234d5ad99..02ed3c1694265 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index d155b9752001d..a04076c6a281b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index c2214a67d4f92..05cf43c1e714b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 60bcb2741c5db..e92f5b3d1ab9f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index b7314771a36a0..20979791622d5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index a1b77604da052..d393024f11bd8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 2f5d2ff736308..8b364acc2fdf4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.devdocs.json b/api_docs/infra.devdocs.json index d7cc18fa9ee64..afd2f2c938d06 100644 --- a/api_docs/infra.devdocs.json +++ b/api_docs/infra.devdocs.json @@ -491,7 +491,7 @@ "label": "featureFlags", "description": [], "signature": [ - "{ customThresholdAlertsEnabled: boolean; logsUIEnabled: boolean; metricsExplorerEnabled: boolean; osqueryEnabled: boolean; }" + "{ customThresholdAlertsEnabled: boolean; logsUIEnabled: boolean; metricsExplorerEnabled: boolean; osqueryEnabled: boolean; inventoryThresholdAlertRuleEnabled: boolean; metricThresholdAlertRuleEnabled: boolean; logThresholdAlertRuleEnabled: boolean; }" ], "path": "x-pack/plugins/infra/common/plugin_config_types.ts", "deprecated": false, diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 2b998224dafe0..e92b8e63be537 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-10-12 +date: 2023-10-16 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 b7b8e78b1702e..3d6b2868bf4e6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index ae08a35784052..5f68c8ba978c7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 742c564369e25..ec551aa93720c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index d833b8c370707..2ee6f9b796310 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-10-12 +date: 2023-10-16 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 fd5105e9e9dd5..e7f86e6ac1b76 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-10-12 +date: 2023-10-16 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 8acd6485e0679..c780f49b43613 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 84b15efef89af..aa7af34168576 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 5fe8f333b7980..937ef4eb0b34b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 27cee4677a85e..07f9af265aa08 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 209322cb5e9d8..235261cafecec 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 7fbed68c4e1ad..c689d9e90a584 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.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 ef5ee4d9d4290..8947f4f2d79db 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 1dfe9e20de67a..6e46476771688 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 2502e9ab0ad2b..609e7048fd7d4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index cdc08bdcbe000..1105dcffcf960 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index edcbf71eb7e0c..eb6033495b6bf 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-10-12 +date: 2023-10-16 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 162ec11d0190d..33a1fa60ffab6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.devdocs.json b/api_docs/kbn_apm_synthtrace.devdocs.json index 8b54b2e9a2299..721b44855b3cb 100644 --- a/api_docs/kbn_apm_synthtrace.devdocs.json +++ b/api_docs/kbn_apm_synthtrace.devdocs.json @@ -503,6 +503,40 @@ } ], "functions": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.addObserverVersionTransform", + "type": "Function", + "tags": [], + "label": "addObserverVersionTransform", + "description": [], + "signature": [ + "(observerVersion: string) => ", + "Transform" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.addObserverVersionTransform.$1", + "type": "string", + "tags": [], + "label": "observerVersion", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/apm-synthtrace", "id": "def-server.createLogger", @@ -550,6 +584,24 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.deleteSummaryFieldTransform", + "type": "Function", + "tags": [], + "label": "deleteSummaryFieldTransform", + "description": [], + "signature": [ + "() => ", + "Transform" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 83dd12e8f69e2..fc04c18ad6df0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) for ques | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 28 | 0 | 28 | 7 | +| 31 | 0 | 31 | 7 | ## Server diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 57cfcfe7494e4..321996700884f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index d1dca276aa327..9014bb355f5ce 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index abc766c7ccffb..fe4aa453204a2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 9a9d5ef16097c..cda82805b6629 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index fe43ec6f8cc6f..957da597bbe22 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index ded3b25980ab3..29d0075d5b5d8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 580f1e5dcd1db..1225e4f2ee8d9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index fe87fc4edd785..b0d4d982f3e2b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 286a7ba87c68d..d48aab93d9e61 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index ed3c958bb470e..72e8321ad6125 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 2e29aaae7992b..50df06c013c77 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index f353987d4cb02..8f524597cf0a4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index eac12bf5914f0..9d9c29db5ac95 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 688f8b67c74e8..aac4ad27d45c8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 06826988dd050..7077a1a025516 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index dce437126a309..7351b9c05fcb8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 6182e0f947220..4ac0ff8f19a6a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 87747801208a4..25e88da08a90c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index fd9e636ec4348..fd3c483e75ccf 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 7eec3aa2a7acc..5b69279df6367 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index fb5a25869824f..063df01ba4edc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index 545ea911e0490..4225db663ec83 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -81,8 +81,8 @@ "pluginId": "@kbn/content-management-utils", "scope": "common", "docId": "kibKbnContentManagementUtilsPluginApi", - "section": "def-common.SOContentStorageConstrutorParams", - "text": "SOContentStorageConstrutorParams" + "section": "def-common.SOContentStorageConstructorParams", + "text": "SOContentStorageConstructorParams" }, "" ], @@ -2725,18 +2725,18 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams", + "id": "def-common.SOContentStorageConstructorParams", "type": "Interface", "tags": [], - "label": "SOContentStorageConstrutorParams", + "label": "SOContentStorageConstructorParams", "description": [], "signature": [ { "pluginId": "@kbn/content-management-utils", "scope": "common", "docId": "kibKbnContentManagementUtilsPluginApi", - "section": "def-common.SOContentStorageConstrutorParams", - "text": "SOContentStorageConstrutorParams" + "section": "def-common.SOContentStorageConstructorParams", + "text": "SOContentStorageConstructorParams" }, "" ], @@ -2746,7 +2746,7 @@ "children": [ { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.savedObjectType", + "id": "def-common.SOContentStorageConstructorParams.savedObjectType", "type": "string", "tags": [], "label": "savedObjectType", @@ -2757,7 +2757,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.cmServicesDefinition", + "id": "def-common.SOContentStorageConstructorParams.cmServicesDefinition", "type": "Object", "tags": [], "label": "cmServicesDefinition", @@ -2777,7 +2777,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.allowedSavedObjectAttributes", + "id": "def-common.SOContentStorageConstructorParams.allowedSavedObjectAttributes", "type": "Array", "tags": [], "label": "allowedSavedObjectAttributes", @@ -2791,7 +2791,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.createArgsToSoCreateOptions", + "id": "def-common.SOContentStorageConstructorParams.createArgsToSoCreateOptions", "type": "Function", "tags": [], "label": "createArgsToSoCreateOptions", @@ -2812,7 +2812,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.updateArgsToSoUpdateOptions", + "id": "def-common.SOContentStorageConstructorParams.updateArgsToSoUpdateOptions", "type": "Function", "tags": [], "label": "updateArgsToSoUpdateOptions", @@ -2833,7 +2833,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.searchArgsToSOFindOptions", + "id": "def-common.SOContentStorageConstructorParams.searchArgsToSOFindOptions", "type": "Function", "tags": [], "label": "searchArgsToSOFindOptions", @@ -2854,11 +2854,13 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.enableMSearch", + "id": "def-common.SOContentStorageConstructorParams.enableMSearch", "type": "CompoundType", "tags": [], "label": "enableMSearch", - "description": [], + "description": [ + "\nMSearch is a feature that allows searching across multiple content types\n(for example, could be used in a general content finder or the like)\n\ndefaults to false" + ], "signature": [ "boolean | undefined" ], @@ -2868,7 +2870,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.mSearchAdditionalSearchFields", + "id": "def-common.SOContentStorageConstructorParams.mSearchAdditionalSearchFields", "type": "Array", "tags": [], "label": "mSearchAdditionalSearchFields", @@ -2882,7 +2884,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.logger", + "id": "def-common.SOContentStorageConstructorParams.logger", "type": "Object", "tags": [], "label": "logger", @@ -2902,7 +2904,7 @@ }, { "parentPluginId": "@kbn/content-management-utils", - "id": "def-common.SOContentStorageConstrutorParams.throwOnResultValidationError", + "id": "def-common.SOContentStorageConstructorParams.throwOnResultValidationError", "type": "boolean", "tags": [], "label": "throwOnResultValidationError", diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index c408509ec1104..3a8e5cb87cfeb 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.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 | |-------------------|-----------|------------------------|-----------------| -| 191 | 1 | 126 | 0 | +| 191 | 1 | 125 | 0 | ## Common diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 454ad52ab5613..3cd3125ab493e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index e98feb9f46caa..82a125e513553 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index ba91dbcaeea07..c6920f72a3134 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 6d956a67cfb98..00bc996e29325 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index a6f1927cd0b3d..fe9063f64cf2a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index e0b6b69e6f49b..5485e3700f843 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 6a06b983e0269..4e121a0202be9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 7867e20d1deaf..315da2cd036dc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 7e1671e1def1d..a2b3e15379011 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index f25c4ac5581c5..3eb12df2a9676 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 89c219c55bfd4..05e7bf7754fb0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index aa207c3f94e18..57d137fb0fec4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 0555fdeacc054..f2d28f856a98f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 3193848c81f58..b0eec5a4af374 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index fc09e63b2f396..1bad44ae2cdc5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 7aa51d4b2f46a..2f360400c5f86 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 6d9d48a1040c4..7aafeb1e05033 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 121af2a79de92..3e5281a82d196 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 719a3d11ac7a4..5a2e9033536df 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 323c0bdb82164..aaa18d2fdc686 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 553d9f576aa36..3cac10066ef68 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index ec9d657d541ed..f036d6d208253 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index bae3dc6bff75b..c42f7676c913e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 814e6c81b806c..2497797159de6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 0615b97568b27..02e53c58ce374 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 0b1c3e5dab04f..e1c21c2d4478e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 3e02dbcf92e54..48da918642a63 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index b8510b05aa41a..ed1d65f37c8e0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 120500b7af1be..814301bc1531e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 8ba915260d91d..ecf12445c2a89 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 3a4336337a276..e003df0b6cd24 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index a27c417e8b05c..23b723b1c5575 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index c4019d1b05462..dadb6931dd14b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 30c11d5134356..63d783e0a8967 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index f43f87cdd531b..fccfb2f6fcac0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 19c9c82a16824..562568dfbf56b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 6adacc5b696ed..37f1cfdf744ea 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 72f52cb2354ea..ca98c79bbb050 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 717a44e5ae51f..0eed7981fe2a9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index bf8aae929a3c8..091dedaf8f183 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 2c04c01b5f8fb..cb179a925865f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 33cf08dc01fb0..275377e6e46f1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 3395d08a47345..60eed9dbe4ba7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 67c3412764fe6..f81fab3b16a49 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index a15c8fb2edb21..ecbbc111882ef 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index c5127ca1ed9e2..1d4d67d43d931 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 598e698f57bdd..64826635697a8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index da85523bb2a6d..54fd698da013c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index f52213d2bf717..ff2214ac484c1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index ce3c05223ba8c..4c4183cbc6af9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index cbb8f180cb675..f32ef3ceeea7c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 2ec5913928f2e..5976d20798c8a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index ca2fd2fdf12ce..7cdac601fb0b2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 1cf8a5a0f67cb..3be65c0d8ccba 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 39a16d987d3b5..c57df615c38a6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 965d5b006e945..6cc14ca40d8ae 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 5aeec222bdcfb..356ea2ec84019 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index d2cf0f20b2829..d94d8d35f146f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 2c6efbc2cb596..e74373b828bd0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index bffbe825c23ee..d43205bc6bab8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 64e202dd90b80..c8184fde36da5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index bb8131f2588de..8f3ecc0e07cce 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 48fc0a7fa9250..cb39bb3805fd7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 09a826ece5e58..c32feb28d39d6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 8ea4caf6df565..350bdb076b4ec 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 9f5f10420cc92..a714f73163fa9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 06acbeec69ef5..4831b14a96f0a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 5f67f39807132..197367fe2e91d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index c9303552d3b3f..1f3f5eac95556 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index f727f06c2202f..ca3dcfb8872e1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 89880fa6bbfaf..c0e253ff28ecc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 218d8b6b65bf0..cbf313cb07906 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 8161fc06b9445..3193d20175b6a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index a22d71ffa1d50..4650f03c18279 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 3a62a1065c2e5..532002fba3e11 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index a9189f11fa1df..6799f662bb0dd 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index 72aaf73abd597..304d1082a1fb3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index f2cc730fdc671..a98020173db1c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 01268eaba9a4a..493b2c4bb3feb 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 3be9c6e712185..01fd1a84853c2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 9d7a35ed1d8c7..c5edc9234b348 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 0e615694717f8..5f3ff98bd39aa 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index b1b5659268d32..29bd12e94523c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 1d28374d87cd8..101068313b1f5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index e5380ce0c261a..36896a3ef5d3e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index aca9815eb45d7..ad3e3de4b948f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 322b687d64407..e873472203192 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 5aedd528c5425..1f97e30bda487 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index c8161d80cef2d..2d585ad885b0f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 17522501bc38a..e6e46973bd6a8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index dfde888f922fd..d315f7a17c390 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index fc6b86d600818..abf17ce0da48d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index a69c68be994fa..5569420888d4e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index e4f476454b551..73f2d545a7b15 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index ab7b8a787154c..db8b8b7c15948 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index ca8fb59de9420..8c312aea79285 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 571153f1826c3..e0dc9e7a50bce 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 91f81bf492846..1052a2c97ea57 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 16cb996986410..b578688efe7db 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index bfd1c1609ce7f..d440777cf50c0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index a4fce69d39d48..c344bada51e29 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index c1d09b622a802..14a2dc3293235 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index a0550c33f9fca..f289ed664b3c6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 620faf2adaf67..23c911546e8e6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index cb7726a7f69bb..5464caa2ac347 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index ae76d3f88d5f6..5c633b6242ed7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 76a449ac129ca..6148030a9ed49 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index eca0df06ddd84..a7991bc66cd60 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 945ca0c23c401..f606f93c6b1a0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 9fc22421c071f..ed6117020c0fc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index abf5dde2dcfdc..cf3be58a5185d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index fe0de81ef0493..7f32ad19cb229 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 52cc443de09e0..13c3cbb2ebe1f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 98b1b953e840a..1f2da43b5e026 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index cacb708fa50b4..29f3be2031a1b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 5376d3c3679c5..6020cabc1b8ec 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-10-12 +date: 2023-10-16 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 574a96e81b841..33eefae0e038f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 8b844bbffff65..402fb39f80577 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; 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 e1c9170299474..2249c29b5ab84 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 7137596202b43..4be8337f36804 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 4d19c73dabd5f..a5d8205ade38a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index c50b042f348f7..67971673ea0f0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 610f0c5191b87..9ef9823515cb9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 6e4faec2a85d5..22d97abdd20f6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index dce9cae56efca..d1a97d5dab626 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index e5b610733e6aa..2ab99c2f92c34 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 5412a6f7a9c33..4e64806e388c9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 6346b48eb6cfc..10c99eb797109 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index f1b7dcf529e58..fe0a8c100dd9b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 97daba69360ca..319e699c4ea98 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 918afc987952e..6f4aad8004728 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index a0e258e2b1681..b14e63761844b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index b7c20f1e24ea8..3ba07fe2813e6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index f9a5361d1b666..1e25708e4fe56 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 8886afc1291ed..8b7e1bfa5c81d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index ecb150997aa02..753e7e48dd127 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 022a47e9c88fe..1c63557bfa824 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 2f09d7d781770..bf0093070e494 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index d70493f1354a0..adc8e8eef25fc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 7e72abdbc3913..85533c5d6181c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 34161ed9f8b20..c0412ac840a82 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index abddeba543b72..8bc49543e34d3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 5c47c05cc741a..e65cac93ea077 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 7df2290ee741b..f09c587333a06 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 7d5f033e1c2b5..6ff5edbf3a58e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 804ef832b119d..ced93ecc2fefc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index fce932708705c..4420a4598f97e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index eba6379950788..e6d637da6ac7a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index a115673ddaaf6..9cd54f6f60053 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 4d8628f24a2cb..0a9fcf8f4ae1c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index c028e2d197bb1..b505df20fdce0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 03ba48a89fa5d..f7da18c6ddbff 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index b9540f67dfb9b..697c81e5085e9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 0c8c27f901469..77f45a60d4a0f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 14de542946b8f..077727b2f9222 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 7e5504ee4bcd9..25be6c576897b 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-10-12 +date: 2023-10-16 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 4cd57c28e436f..6492cc8e8ffcb 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 9d651eaa3749f..8ba8a187b414d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 22a2a940f1c7b..2a66c46ec9639 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 4aa6d9c6fb21e..9dcda0273936a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 4fae9c337f50b..a4484f1cef7fd 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-10-12 +date: 2023-10-16 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 28ea395958c65..57a3c95464d88 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-10-12 +date: 2023-10-16 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 e69db5800a132..4f3c04a720eb8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index fb5c679ace1c5..80cd90fb516ad 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 2cd448119198e..9eff7dfdd4ea2 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-10-12 +date: 2023-10-16 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 59dc1f71301b1..9824c4194ebc7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index f084d68074fdd..98da60e812f4c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 96d434c82deef..ddfb2445d51fb 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index a1e677b7ee490..e6a38eda98e74 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-10-12 +date: 2023-10-16 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 a65cc5be10cb4..c825f742c6161 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 84cce2e1c748e..a0dca38a23f1a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 6faef0d610954..f51d792f0dadc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 0c43e038f0baa..87679fe0aef81 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 17f984370a9c1..d23ab5a5b1629 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index dbf633a970fd9..f0b8ca10bd6f7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index a3b9620232b4c..8365756902783 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 8055479c7d0c3..a1bc9ae340896 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 11e1d5dcda03d..ef16b507146ed 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 19fedfba57bc6..ad30c71e18cad 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index d11561dca5aba..66e5b5ab04638 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index a5011eeebf7bb..c1243158ec503 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 4edb8d8797eae..6b086f32b908f 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-10-12 +date: 2023-10-16 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 6cfa9d9f9b4ac..68cf71de5abce 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-10-12 +date: 2023-10-16 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 6b6fa1b92a4ab..4ae2207818e40 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 8b3b714293165..a37a1935ff08f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index deb7a637a8f0a..f9371046745b6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 2bdb4016c7ee4..1c2850e560cf5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 57f36010da009..e5efeb8c15c70 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 4df61d46c8fb1..fb48376da0b66 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 504a15af87de8..ddadfe3d86efc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 49c5c283ece51..426bf89609162 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index ef79e2cdb895a..ea0d58d6cc446 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 9978ed66ce8f0..f234d4a0f2eac 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index b51e6b876e750..b3a8b5265956f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 9e6d6cb88b274..22c95b5d45bd7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 192b0d113b636..cd03b222a1bd4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index b74f5f6e6a246..f799a209c8477 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 4b0bca178de3b..4b3606d88e274 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 8cec6d7fa3bbd..55707e5ea8049 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 2a3b69c3dd614..bb88307a5038f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index bebde79128804..c791a996a6c1b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index 0baef3f3dda28..44e5fc2f1696d 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index b62f7452e20ac..7d3ccbee88f21 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 51a8e15372774..d46faa6058672 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 0314e1ccb6eaa..766c43d3f508f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 7ef4d44f8b93c..c531cd5cf3e94 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 2ed3a0bbb663b..276ed63a9b705 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 6fe63b8dd491f..ffa9af9744542 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index a0f8c12a42f0f..9751305dff623 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 53c8b93260982..3033ea9f09e6c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 2146ff9e21761..a70b07ccede1b 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-10-12 +date: 2023-10-16 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 d66951d321463..792f3c7149e94 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 27a7205efea07..1846ac148f7a3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 6840063be81ae..83c209acf919c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 57164012c46f1..f6e8428fb8cc0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 2526994dfc23f..4ba9d02340107 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 98cd52c85370c..5153baafc9ed3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 40e1f5e14cd72..b5a6dccb8a749 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index cd1a825a538eb..d703c9b0e953a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 155d49ac6f6cb..2b6c35c07ea88 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index e00c56a663346..42645ded452a9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 036bf07a0f55c..d3b4d089690b8 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-10-12 +date: 2023-10-16 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 1fd88de1df339..da1edd6557aad 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index b6703f9ddc75a..788d3c511f82d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index a78d4addfa73d..3634915dcf97e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index ffabbb2184705..0f8fa389c07d4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 05226a001679e..9e27e65b8f807 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 42f68e347d851..0a1240291a10d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index a4c59cf8b3c13..896089ef528b5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 379c0a753bd12..5207dd4a02335 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 0d03defce9162..050b6408326a9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 9f69fdb59d5ef..a2bdfca15da79 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 151e106aeaaf6..4e5bcdab89821 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 60e7bd261dfe9..477c0d0f680d8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 2b5e055756def..b00a63ff992e9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index a718f87d8d792..64f2c7d7df366 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index fbcc0ecd0cb7e..18ca1cfcc109f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 071bd813e8319..7ed7490128132 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index dccaa5ab83671..18c8bdf30ce5b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 906334289ba95..38a8925ab4eff 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 35c134365dc56..d5fb6904b1dba 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 73c5d7bfea6a9..2ee6627c4cdd0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index c830a3b62e0d2..2192b4fe34cf4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index bccda8217b83a..e0147872426e3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 215ccf8c6c418..572cadef73929 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 8897b626c7eb5..45782862469b8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 9b537233a2bf3..bfcdeb05b7ed9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index d5d284de1c347..d765ae037a24c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 5857f193cf2c4..9adeafc1b3df8 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 63cdd890c2cb0..383662d55ee1b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index f94c9e875d77b..38e0a194e0dd2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index cb5dba9cf8a89..65cb08e371ae0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index dc7c709e6b858..72b398912435f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index cee8c920d7bd5..bc587b109e7b4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 9fadb99460e4a..925720699807f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index aefcee0741d6b..c94d6e4eb594d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 74ddfcce1f3ce..141bf74361b65 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 48fb62a59bb2c..56b8cd19d8d7b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 120cddd96e138..cf7f286ec0de3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 31f0749d3a43e..b5f4b8e13a15a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index c0841cd0052d7..83015c42eda2f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index c4e852b3254e0..f811ba6dc4cf9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index b9c84b2fbe452..71580bb416f3d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 94770f8bb6006..af4684ea2aba9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 7f1cec01daeac..3150479d50f88 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 2e84b426c8196..5546bd4f437c3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index c7da06b1c55ce..e3537851375aa 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 7d9b0d1612bec..17266efbd3e0c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 03fe415ac28bd..8f579953f5b53 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 30d8771f1ec01..b9401a58144db 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-10-12 +date: 2023-10-16 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 8b2869bced35d..0fa343fd0a65a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index b5c3f6d9b9e79..8c87dcf832715 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 49256b5787e2a..8832f38d83bbf 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-10-12 +date: 2023-10-16 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 0a0ba3571a151..9b0128ce234c7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index f3547e343b270..2b1f6689d6709 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index a9ba814cdd5d1..150f1025d8763 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 54260ac18084b..d22f5e8549c56 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index e6e4869ce5385..b374838bc3904 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.devdocs.json b/api_docs/kbn_react_kibana_mount.devdocs.json index 243b8bd440a2c..6524362eea9af 100644 --- a/api_docs/kbn_react_kibana_mount.devdocs.json +++ b/api_docs/kbn_react_kibana_mount.devdocs.json @@ -190,7 +190,7 @@ "section": "def-common.MountPoint", "text": "MountPoint" }, - ") => void" + " | undefined) => void" ], "path": "packages/react/kibana_mount/mount_point_portal.tsx", "deprecated": false, @@ -211,12 +211,12 @@ "section": "def-common.MountPoint", "text": "MountPoint" }, - "" + " | undefined" ], "path": "packages/react/kibana_mount/mount_point_portal.tsx", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 736fca5517cb1..80485e49b36ab 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index de1c51cc762ac..8ea326bc9670e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 71fe73160ec8f..4c9ce0b27c3dd 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index e781e2080df96..44d0b7936edb7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index a7605b5bccbda..0dd06b97f2bee 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index ed9c4fb453ba2..ef80718eb7871 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index b75ee51b34646..b8441bd2c4194 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 70cdf658cb9fe..0e6606ec9e729 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index c56b39d442f1b..45adea99a728d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index f895c0eb911c2..b76ebbc599505 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index f6a1d4a2de57d..ce5fa17716c8a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 95d77e565c502..c9deefd5d50d0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index f42bd249cb8af..c29e668a03e59 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 82dedb014ad5a..c83de04173b53 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 5e6acc4e6a89b..b317970f87c48 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 28801ddcbe522..27f3fc9ff5baf 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 3c309e88fd0fd..dd24c3c7a09b3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 810f0832945ad..c2ab04c62040b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index da7536564a83d..b707d92fd1708 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 9c753fb8a096a..38cf816615b2f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 4c244a0f5d34c..013739f3d9494 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 2b7d6131795bd..e4793e91256de 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 174c3b0e95f8a..c080a8833a74c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index ad6972724d751..84c5b47985927 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 261d8f09dd7cb..903b28c9e2852 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 626e9ff512a9a..82afa8f741638 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index af7f5c9097616..a614bbe812052 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 16ebfd01d7bd4..800df376102df 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 9489b2388894a..f3ef52dcde56a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 17a22fcfa4b5f..e8f419ff4e520 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 22a1da49f560d..3679b2ca915a3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index acec1671a25a7..4235a819e1ead 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 040d61e61ad0b..32cdf149ff10f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index ac28bcea3da4f..ad2dbb9c32a10 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 30270910f4352..6a1f1c78ef1a4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index d791831ad679f..5ae786dab9d93 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 9b1b4e51002c5..80efe6a0b8dcb 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index c8b25abb98182..e9e3da4b0a2a7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index f2df3efbf2a49..6ff2c6b8e70dc 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index f22449bd2ff32..dba5546cd143a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 1639c79800039..150400daa080f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index c5622f98ddcce..7b5454756ffac 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 98ddc30adddf8..1674057e6f59c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index f185d7748ec36..8b9b9890a1932 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 3d7cef377453f..d1300665f7451 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 38e3956fe8248..00a8e186be153 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index b0225725ba35a..8eba286136149 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.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 b31bf3809829b..0e170b965b7fd 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index a78640ae94363..2121eee66e97a 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 757d40d2994ce..dfb6e2e88dd85 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 77af53a2a3c45..979a2cd8146f4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 6196992776897..2af0319da959d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index dd121d5436257..cd009b6f6eca2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index d668621341178..26ecb85858f24 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 29d6a6b073bfa..fcd5f95f0e9a5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index cb077c51ad4dd..e047f0799ed08 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index b1f20e7f3dc4d..7a2e1eae8a40b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index be15ee86b6cf5..f9e2608025996 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index b30003a4ac4de..a52870876556b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 416224b2d1229..ad2daa13431d3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 91a6b97f22762..224150b0a5119 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index ecfed475e801f..0938f59fee4f5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 57aa580df81c8..03b1c582a6e64 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 1ffac76253831..9aa91943236f6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index a286bf35abc3e..8937ad127cd47 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 8a152db396d8f..d41a4d0fc784d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 3748201bac4e9..360b75d1d8606 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 0283ce302d278..08e0ca879e7f6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 60eb9ae3be491..8d73687c2ed3c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 7852d196a7e3c..a1e1311c3e500 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 05523e0edf07e..3f1e9f778c09d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 34a378e553bd9..c2d546e8230a7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index c4f44c3be50b2..4e1e05ee791c5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index e742224a9153a..8ee06145f1d04 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index d2a1ba6e6ffa9..5a45bc096d830 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 9646e2a86bf7a..c2182f953ee40 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 3fd3ae4be2704..3d871b66d786d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 4e5d581af1e3f..4cfb2459eae97 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index c635ff3838a27..8e678811ddc6b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index eb59ebfe39635..db5d96c35d812 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 972e2a3987e74..aca92e2d3fc5e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index e1d55527c6d58..1bdba74a6d099 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 05c67b7055b99..60b62b0882530 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 3c4f53d29abd0..8c6ceeca637ac 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.devdocs.json b/api_docs/kbn_slo_schema.devdocs.json index 0666cd886ffa9..84ef4fa26f48d 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -474,75 +474,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.CreateCompositeSLOInput", - "type": "Type", - "tags": [], - "label": "CreateCompositeSLOInput", - "description": [], - "signature": [ - "{ name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; } & { id?: string | undefined; tags?: string[] | undefined; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.CreateCompositeSLOParams", - "type": "Type", - "tags": [], - "label": "CreateCompositeSLOParams", - "description": [], - "signature": [ - "{ name: string; timeWindow: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; } & { id?: string | undefined; tags?: string[] | undefined; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.CreateCompositeSLOResponse", - "type": "Type", - "tags": [], - "label": "CreateCompositeSLOResponse", - "description": [], - "signature": [ - "{ id: string; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.CreateSLOInput", @@ -688,36 +619,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.FindCompositeSLOParams", - "type": "Type", - "tags": [], - "label": "FindCompositeSLOParams", - "description": [], - "signature": [ - "{ name?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"creationTime\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.FindCompositeSLOResponse", - "type": "Type", - "tags": [], - "label": "FindCompositeSLOResponse", - "description": [], - "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.FindSloDefinitionsResponse", @@ -767,21 +668,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.GetCompositeSLOResponse", - "type": "Type", - "tags": [], - "label": "GetCompositeSLOResponse", - "description": [], - "signature": [ - "{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.GetPreviewDataParams", @@ -1022,75 +908,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.UpdateCompositeSLOInput", - "type": "Type", - "tags": [], - "label": "UpdateCompositeSLOInput", - "description": [], - "signature": [ - "{ name?: string | undefined; compositeMethod?: \"weightedAverage\" | undefined; sources?: { id: string; revision: number; weight: number; }[] | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; tags?: string[] | undefined; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.UpdateCompositeSLOParams", - "type": "Type", - "tags": [], - "label": "UpdateCompositeSLOParams", - "description": [], - "signature": [ - "{ name?: string | undefined; compositeMethod?: \"weightedAverage\" | undefined; sources?: { id: string; revision: number; weight: number; }[] | undefined; timeWindow?: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }) | undefined; tags?: string[] | undefined; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.UpdateCompositeSLOResponse", - "type": "Type", - "tags": [], - "label": "UpdateCompositeSLOResponse", - "description": [], - "signature": [ - "{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; }" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.UpdateSLOInput", @@ -1402,381 +1219,76 @@ }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.compositeSloIdSchema", - "type": "Object", - "tags": [], - "label": "compositeSloIdSchema", - "description": [], - "signature": [ - "StringC" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.compositeSLOResponseSchema", + "id": "def-common.createSLOParamsSchema", "type": "Object", "tags": [], - "label": "compositeSLOResponseSchema", + "label": "createSLOParamsSchema", "description": [], "signature": [ "TypeC", - "<{ id: ", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", "StringC", - "; name: ", + "; description: ", "StringC", - "; timeWindow: ", + "; indicator: ", "UnionC", "<[", "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", + "<{ type: ", "LiteralC", - "<\"rolling\">; }>, ", + "<\"sli.apm.transactionDuration\">; params: ", + "IntersectionC", + "<[", "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", + "<{ environment: ", + "UnionC", + "<[", "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", + "<\"*\">, ", + "StringC", + "]>; service: ", "UnionC", "<[", "LiteralC", - "<\"occurrences\">, ", + "<\"*\">, ", + "StringC", + "]>; transactionType: ", + "UnionC", + "<[", "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", + "<\"*\">, ", + "StringC", + "]>; transactionName: ", + "UnionC", "<[", - "TypeC", - "<{ target: ", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; threshold: ", "NumberC", + "; index: ", + "StringC", "; }>, ", "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; compositeMethod: ", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", + "<\"sli.apm.transactionErrorRate\">; params: ", + "IntersectionC", + "<[", "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; tags: ", - "ArrayC", - "<", - "StringC", - ">; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.compositeSloSchema", - "type": "Object", - "tags": [], - "label": "compositeSloSchema", - "description": [], - "signature": [ - "TypeC", - "<{ id: ", - "StringC", - "; name: ", - "StringC", - "; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; sources: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; tags: ", - "ArrayC", - "<", - "StringC", - ">; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.createCompositeSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "createCompositeSLOParamsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; }>, ", - "PartialC", - "<{ id: ", - "StringC", - "; tags: ", - "ArrayC", - "<", - "StringC", - ">; }>]>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.createSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "createSLOParamsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; description: ", - "StringC", - "; indicator: ", - "UnionC", - "<[", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionDuration\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; service: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionType: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionName: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; threshold: ", - "NumberC", - "; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionErrorRate\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", "StringC", "]>; service: ", "UnionC", @@ -2089,26 +1601,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.deleteCompositeSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "deleteCompositeSLOParamsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.deleteSLOInstancesParamsSchema", @@ -2228,206 +1720,40 @@ "StringC", "]>; }>>; }>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.fetchHistoricalSummaryResponseSchema", - "type": "Object", - "tags": [], - "label": "fetchHistoricalSummaryResponseSchema", - "description": [], - "signature": [ - "ArrayC", - "<", - "TypeC", - "<{ sloId: ", - "StringC", - "; instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; data: ", - "ArrayC", - "<", - "IntersectionC", - "<[", - "TypeC", - "<{ date: ", - "Type", - "; }>, ", - "TypeC", - "<{ status: ", - "UnionC", - "<[", - "LiteralC", - "<\"NO_DATA\">, ", - "LiteralC", - "<\"HEALTHY\">, ", - "LiteralC", - "<\"DEGRADING\">, ", - "LiteralC", - "<\"VIOLATED\">]>; sliValue: ", - "NumberC", - "; errorBudget: ", - "TypeC", - "<{ initial: ", - "NumberC", - "; consumed: ", - "NumberC", - "; remaining: ", - "NumberC", - "; isEstimated: ", - "BooleanC", - "; }>; }>]>>; }>>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.findCompositeSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "findCompositeSLOParamsSchema", - "description": [], - "signature": [ - "PartialC", - "<{ query: ", - "PartialC", - "<{ name: ", - "StringC", - "; page: ", - "StringC", - "; perPage: ", - "StringC", - "; sortBy: ", - "LiteralC", - "<\"creationTime\">; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.findCompositeSLOResponseSchema", - "type": "Object", - "tags": [], - "label": "findCompositeSLOResponseSchema", - "description": [], - "signature": [ - "TypeC", - "<{ page: ", - "NumberC", - "; perPage: ", - "NumberC", - "; total: ", - "NumberC", - "; results: ", - "ArrayC", - "<", - "IntersectionC", - "<[", - "TypeC", - "<{ id: ", - "StringC", - "; name: ", - "StringC", - "; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.fetchHistoricalSummaryResponseSchema", + "type": "Object", + "tags": [], + "label": "fetchHistoricalSummaryResponseSchema", + "description": [], + "signature": [ "ArrayC", "<", "TypeC", - "<{ id: ", + "<{ sloId: ", "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; tags: ", + "; instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; data: ", "ArrayC", "<", - "StringC", - ">; createdAt: ", - "Type", - "; updatedAt: ", + "IntersectionC", + "<[", + "TypeC", + "<{ date: ", "Type", "; }>, ", "TypeC", - "<{ summary: ", - "TypeC", "<{ status: ", "UnionC", "<[", @@ -2450,9 +1776,9 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>; }>]>>; }>" + "; }>; }>]>>; }>>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -3285,26 +2611,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.getCompositeSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "getCompositeSLOParamsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.getPreviewDataParamsSchema", @@ -6584,198 +5890,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.updateCompositeSLOParamsSchema", - "type": "Object", - "tags": [], - "label": "updateCompositeSLOParamsSchema", - "description": [], - "signature": [ - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; body: ", - "PartialC", - "<{ name: ", - "StringC", - "; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; tags: ", - "ArrayC", - "<", - "StringC", - ">; }>; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.updateCompositeSLOResponseSchema", - "type": "Object", - "tags": [], - "label": "updateCompositeSLOResponseSchema", - "description": [], - "signature": [ - "TypeC", - "<{ id: ", - "StringC", - "; name: ", - "StringC", - "; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; tags: ", - "ArrayC", - "<", - "StringC", - ">; createdAt: ", - "Type", - "; updatedAt: ", - "Type", - "; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/slo-schema", "id": "def-common.updateSLOParamsSchema", @@ -7481,44 +6595,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.weightedAverageCompositeMethodSchema", - "type": "Object", - "tags": [], - "label": "weightedAverageCompositeMethodSchema", - "description": [], - "signature": [ - "LiteralC", - "<\"weightedAverage\">" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/slo-schema", - "id": "def-common.weightedAverageSourceSchema", - "type": "Object", - "tags": [], - "label": "weightedAverageSourceSchema", - "description": [], - "signature": [ - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>" - ], - "path": "x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false } ] } diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 05ee7937756ab..7c55b3b00cff5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 135 | 0 | 132 | 0 | +| 114 | 0 | 111 | 0 | ## Common diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index b5cfc60c49a4b..8afa04770e852 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index bee45b066efd8..16b9ace49d06a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 97e83ba5ee2a7..abf6976ec1fb4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 0278aa2e71b75..e4820e28b7f81 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index 601d5d4af9e74..7caeb5d887b6b 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 1d10313dd8ada..0bebffeee5898 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 341b7349366d1..2dcc16b166adb 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-10-12 +date: 2023-10-16 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 d5842b6b6c810..2765cc3eb5876 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 4a408d9553b83..f16e5f0b127b5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 76dab3c15e345..017269ec0c400 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 07fd2e31bf8d1..6db1b043000a6 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 769b1f459c00b..f1d03e539483a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 25f0425261175..48205c9dfaa3d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index c343b77f1f742..7137e70b6686d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index bffa40c20c575..b2f2efb61d86c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index b67300e2e979c..59860a71c14aa 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 220c320aaf92f..832ddeaf2a6fa 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 99e06213b6fee..2f2581c5cea4e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 720240641e917..410850819f55d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 94c8a7ccd97cd..378d32050c3b8 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-10-12 +date: 2023-10-16 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 8e0e1bbd13e8f..6580390847c6a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index f2da7cca2192a..c8b595f919cf5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 9000c8077f0f7..492bd4a1bbff4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 71bf95fa623de..b70692732b0b7 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 993cb995329aa..588836952d9b0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index ad98d61b72f2c..c3f62b8273685 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 4ec075139fec5..913cc5dc344bf 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 523101dd8ea70..ebab782f21763 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 86815824b5d4b..42e9599208fb3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 572bcd5ed3e62..e4eed36b4b7c1 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -2156,76 +2156,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "kibanaReact", - "id": "def-public.MountPointPortal", - "type": "Function", - "tags": [ - "deprecated" - ], - "label": "MountPointPortal", - "description": [], - "signature": [ - "React.FunctionComponent<", - { - "pluginId": "@kbn/react-kibana-mount", - "scope": "common", - "docId": "kibKbnReactKibanaMountPluginApi", - "section": "def-common.MountPointPortalProps", - "text": "MountPointPortalProps" - }, - ">" - ], - "path": "src/plugins/kibana_react/public/util/index.tsx", - "deprecated": true, - "trackAdoption": false, - "references": [ - { - "plugin": "navigation", - "path": "src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx" - }, - { - "plugin": "navigation", - "path": "src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx" - }, - { - "plugin": "navigation", - "path": "src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx" - } - ], - "returnComment": [], - "children": [ - { - "parentPluginId": "kibanaReact", - "id": "def-public.MountPointPortal.$1", - "type": "CompoundType", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P & { children?: React.ReactNode; }" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "kibanaReact", - "id": "def-public.MountPointPortal.$2", - "type": "Any", - "tags": [], - "label": "context", - "description": [], - "signature": [ - "any" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "kibanaReact", "id": "def-public.NoDataCard", @@ -2748,18 +2678,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx" @@ -3297,6 +3215,30 @@ "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx" + }, { "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx" @@ -3305,6 +3247,14 @@ "plugin": "triggersActionsUi", "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx" }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx" + }, + { + "plugin": "triggersActionsUi", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx" + }, { "plugin": "cases", "path": "x-pack/plugins/cases/public/common/use_cases_toast.tsx" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 88544b39e09dd..2c299a0123cee 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-10-12 +date: 2023-10-16 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 | |-------------------|-----------|------------------------|-----------------| -| 176 | 0 | 138 | 4 | +| 173 | 0 | 137 | 4 | ## Client diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 46f1b0d56b71c..34a08132e55db 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 0576cd4390e3a..afc9df50adc61 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index ccfbf5bdfc144..3fe3758921613 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 9e2c0798a9dfa..8a8fde05d9447 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 071ab36722b96..cd653dd2b06ce 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 8ab626ae32330..ce999af1257e3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index ad4a8f41d9431..ef09c70daf91f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index fc5b91ac899cc..6881a7ae955b9 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-10-12 +date: 2023-10-16 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 588e152c947a5..7b9e288b9ff4e 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-10-12 +date: 2023-10-16 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 a84dd66b12266..aa966cd9646a2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 7d07dea0a3c63..5f754be8c6ed2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index a2d2c2658ac64..7d7a6a32daf8b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 65198dfdf4de8..1ba3cddb08725 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 4314939727689..89d00c51a1885 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index aae7731d68c04..19cf9911f5529 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index c095c5f60b86d..aa7e341e2dd65 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 6de3b6d3dacce..dc1006154e1cd 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index b2f93328ae669..975a31aa6bf57 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 47c0ddf5f51a8..f49a4e303c9b0 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 9c60dc85ae361..8cab97fae2de9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 184c73ff72371..389082dbe11f2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 41c8070018e81..a4d690ff05845 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -8047,7 +8047,7 @@ "label": "config", "description": [], "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; }" ], "path": "x-pack/plugins/observability/server/routes/types.ts", "deprecated": false, @@ -8124,63 +8124,7 @@ "label": "ObservabilityAPIReturnType", "description": [], "signature": [ - "{ \"GET /api/observability/composite_slos 2023-05-24\"?: ({ endpoint: \"GET /api/observability/composite_slos 2023-05-24\"; params?: ", - "PartialC", - "<{ query: ", - "PartialC", - "<{ name: ", - "StringC", - "; page: ", - "StringC", - "; perPage: ", - "StringC", - "; sortBy: ", - "LiteralC", - "<\"creationTime\">; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params?: { query?: { name?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"creationTime\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: ({ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"GET /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"GET /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"DELETE /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"DELETE /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", + "{ \"GET /internal/observability/slos/{id}/_instances\": { endpoint: \"GET /internal/observability/slos/{id}/_instances\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -8194,7 +8138,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { path: { id: string; }; }; }) => Promise; } & ", + " & { params: { path: { id: string; }; }; }) => Promise<{ groupBy: string; instances: string[]; }>; } & ", { "pluginId": "observability", "scope": "server", @@ -8202,374 +8146,106 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - ") | undefined; \"PUT /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"PUT /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", - "TypeC", - "<{ path: ", + "; \"POST /internal/observability/slos/_preview\": { endpoint: \"POST /internal/observability/slos/_preview\"; params?: ", "TypeC", - "<{ id: ", - "StringC", - "; }>; body: ", - "PartialC", - "<{ name: ", - "StringC", - "; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", + "<{ body: ", "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; timeWindow: ", + "<{ indicator: ", "UnionC", "<[", "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", + "<{ type: ", "LiteralC", - "<\"rolling\">; }>, ", + "<\"sli.apm.transactionDuration\">; params: ", + "IntersectionC", + "<[", "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", + "<{ environment: ", + "UnionC", + "<[", "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", + "<\"*\">, ", + "StringC", + "]>; service: ", "UnionC", "<[", "LiteralC", - "<\"occurrences\">, ", + "<\"*\">, ", + "StringC", + "]>; transactionType: ", + "UnionC", + "<[", "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", + "<\"*\">, ", + "StringC", + "]>; transactionName: ", + "UnionC", "<[", - "TypeC", - "<{ target: ", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; threshold: ", "NumberC", + "; index: ", + "StringC", "; }>, ", "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; tags: ", - "ArrayC", - "<", + "<{ filter: ", "StringC", - ">; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; body: { name?: string | undefined; compositeMethod?: \"weightedAverage\" | undefined; sources?: { id: string; revision: number; weight: number; }[] | undefined; timeWindow?: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }) | undefined; tags?: string[] | undefined; }; }; }) => Promise<{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"POST /api/observability/composite_slos 2023-05-24\"?: ({ endpoint: \"POST /api/observability/composite_slos 2023-05-24\"; params?: ", + "; }>]>; }>, ", "TypeC", - "<{ body: ", + "<{ type: ", + "LiteralC", + "<\"sli.apm.transactionErrorRate\">; params: ", "IntersectionC", "<[", "TypeC", - "<{ name: ", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", "StringC", - "; timeWindow: ", + "]>; service: ", "UnionC", "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", + "<\"*\">, ", + "StringC", + "]>; transactionType: ", + "UnionC", + "<[", "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", + "<\"*\">, ", + "StringC", + "]>; transactionName: ", "UnionC", "<[", "LiteralC", - "<\"occurrences\">, ", + "<\"*\">, ", + "StringC", + "]>; index: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", "LiteralC", - "<\"timeslices\">]>; objective: ", + "<\"sli.kql.custom\">; params: ", "IntersectionC", "<[", "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; }>, ", - "PartialC", - "<{ id: ", - "StringC", - "; tags: ", - "ArrayC", - "<", - "StringC", - ">; }>]>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { body: { name: string; timeWindow: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; } & { id?: string | undefined; tags?: string[] | undefined; }; }; }) => Promise<{ id: string; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"GET /internal/observability/slos/{id}/_instances\": { endpoint: \"GET /internal/observability/slos/{id}/_instances\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; }; }) => Promise<{ groupBy: string; instances: string[]; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"POST /internal/observability/slos/_preview\": { endpoint: \"POST /internal/observability/slos/_preview\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ indicator: ", - "UnionC", - "<[", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionDuration\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; service: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionType: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionName: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; threshold: ", - "NumberC", - "; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionErrorRate\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; service: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionType: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionName: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.kql.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "StringC", - "; total: ", - "StringC", - "; timestampField: ", - "StringC", + "<{ index: ", + "StringC", + "; good: ", + "StringC", + "; total: ", + "StringC", + "; timestampField: ", + "StringC", "; }>, ", "PartialC", "<{ filter: ", @@ -8698,631 +8374,15 @@ "NumberC", "; to: ", "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>]>; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>]>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { body: { indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; }; }; }) => Promise<{ date: string; sliValue: number; }[]>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"POST /internal/observability/slos/{id}/_burn_rates\": { endpoint: \"POST /internal/observability/slos/{id}/_burn_rates\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; body: ", - "TypeC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; windows: ", - "ArrayC", - "<", - "TypeC", - "<{ name: ", - "StringC", - "; duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; body: { instanceId: string; windows: { name: string; duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; }[]; }; }; }) => Promise<{ burnRates: { name: string; burnRate: number; sli: number; }[]; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"GET /internal/observability/slos/_diagnosis\": { endpoint: \"GET /internal/observability/slos/_diagnosis\"; params?: undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - ") => Promise<{ licenseAndFeatures: ", - "PublicLicenseJSON", - "; userPrivileges: { write: ", - "SecurityHasPrivilegesResponse", - "; read: ", - "SecurityHasPrivilegesResponse", - "; }; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"PUT /api/observability/slos/{id} 2023-10-31\": { endpoint: \"PUT /api/observability/slos/{id} 2023-10-31\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; body: ", - "PartialC", - "<{ name: ", - "StringC", - "; description: ", - "StringC", - "; indicator: ", - "UnionC", - "<[", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionDuration\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; service: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionType: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionName: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; threshold: ", - "NumberC", - "; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.apm.transactionErrorRate\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ environment: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; service: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionType: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; transactionName: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; index: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.kql.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "StringC", - "; total: ", - "StringC", - "; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.metric.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; good: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "KeyofC", - "<{ sum: boolean; }>; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>>; equation: ", - "StringC", - "; }>; total: ", - "TypeC", - "<{ metrics: ", - "ArrayC", - "<", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; aggregation: ", - "KeyofC", - "<{ sum: boolean; }>; field: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>>; equation: ", - "StringC", - "; }>; timestampField: ", - "StringC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>, ", - "TypeC", - "<{ type: ", - "LiteralC", - "<\"sli.histogram.custom\">; params: ", - "IntersectionC", - "<[", - "TypeC", - "<{ index: ", - "StringC", - "; timestampField: ", - "StringC", - "; good: ", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"value_count\">; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>]>; total: ", - "UnionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"value_count\">; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>, ", - "IntersectionC", - "<[", - "TypeC", - "<{ field: ", - "StringC", - "; aggregation: ", - "LiteralC", - "<\"range\">; from: ", - "NumberC", - "; to: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>]>; }>, ", - "PartialC", - "<{ filter: ", - "StringC", - "; }>]>; }>]>; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>]>; settings: ", - "PartialC", - "<{ syncDelay: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; frequency: ", - "Type", - "<", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - ", string, unknown>; }>; tags: ", - "ArrayC", - "<", - "StringC", - ">; groupBy: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; body: { name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; } | undefined; timeWindow?: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }) | undefined; settings?: { syncDelay?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; frequency?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | undefined; }; }; }) => Promise<{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"GET /api/observability/slos/{id} 2023-10-31\": { endpoint: \"GET /api/observability/slos/{id} 2023-10-31\"; params?: ", - "IntersectionC", - "<[", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }>, ", - "PartialC", - "<{ query: ", - "PartialC", - "<{ instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>; }>]> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; } & { query?: { instanceId?: string | undefined; } | undefined; }; }) => Promise<{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"GET /api/observability/slos 2023-10-31\": { endpoint: \"GET /api/observability/slos 2023-10-31\"; params?: ", - "PartialC", - "<{ query: ", - "PartialC", - "<{ kqlQuery: ", - "StringC", - "; page: ", - "StringC", - "; perPage: ", - "StringC", - "; sortBy: ", - "UnionC", - "<[", - "LiteralC", - "<\"error_budget_consumed\">, ", - "LiteralC", - "<\"error_budget_remaining\">, ", - "LiteralC", - "<\"sli_value\">, ", - "LiteralC", - "<\"status\">]>; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params?: { query?: { kqlQuery?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"status\" | \"error_budget_consumed\" | \"error_budget_remaining\" | \"sli_value\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"GET /internal/observability/slos/_definitions\": { endpoint: \"GET /internal/observability/slos/_definitions\"; params?: ", - "TypeC", - "<{ query: ", - "TypeC", - "<{ search: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { query: { search: string; }; }; }) => Promise<({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; })[]>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"POST /internal/observability/slos/_historical_summary\": { endpoint: \"POST /internal/observability/slos/_historical_summary\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ list: ", - "ArrayC", - "<", - "TypeC", - "<{ sloId: ", - "StringC", - "; instanceId: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", - "StringC", - "]>; }>>; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { body: { list: { sloId: string; instanceId: string; }[]; }; }; }) => Promise<{ sloId: string; instanceId: string; data: ({ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; })[]; }[]>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"POST /api/observability/slos/{id}/enable 2023-10-31\": { endpoint: \"POST /api/observability/slos/{id}/enable 2023-10-31\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", + "; }>, ", + "PartialC", + "<{ filter: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; }>]>]>; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>]>; }>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9330,7 +8390,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { path: { id: string; }; }; }) => Promise; } & ", + " & { params: { body: { indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; }; }; }) => Promise<{ date: string; sliValue: number; }[]>; } & ", { "pluginId": "observability", "scope": "server", @@ -9338,41 +8398,37 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"POST /api/observability/slos/{id}/disable 2023-10-31\": { endpoint: \"POST /api/observability/slos/{id}/disable 2023-10-31\"; params?: ", + "; \"POST /internal/observability/slos/{id}/_burn_rates\": { endpoint: \"POST /internal/observability/slos/{id}/_burn_rates\"; params?: ", "TypeC", "<{ path: ", "TypeC", "<{ id: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; }; }) => Promise; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - "; \"POST /api/observability/slos/_delete_instances 2023-10-31\": { endpoint: \"POST /api/observability/slos/_delete_instances 2023-10-31\"; params?: ", - "TypeC", - "<{ body: ", + "; }>; body: ", "TypeC", - "<{ list: ", + "<{ instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; windows: ", "ArrayC", "<", "TypeC", - "<{ sloId: ", - "StringC", - "; instanceId: ", + "<{ name: ", "StringC", - "; }>>; }>; }> | undefined; handler: ({}: ", + "; duration: ", + "Type", + "<", + { + "pluginId": "@kbn/slo-schema", + "scope": "common", + "docId": "kibKbnSloSchemaPluginApi", + "section": "def-common.Duration", + "text": "Duration" + }, + ", string, unknown>; }>>; }>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9380,7 +8436,15 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { body: { list: { sloId: string; instanceId: string; }[]; }; }; }) => Promise; } & ", + " & { params: { path: { id: string; }; body: { instanceId: string; windows: { name: string; duration: ", + { + "pluginId": "@kbn/slo-schema", + "scope": "common", + "docId": "kibKbnSloSchemaPluginApi", + "section": "def-common.Duration", + "text": "Duration" + }, + "; }[]; }; }; }) => Promise<{ burnRates: { name: string; burnRate: number; sli: number; }[]; }>; } & ", { "pluginId": "observability", "scope": "server", @@ -9388,13 +8452,7 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"DELETE /api/observability/slos/{id} 2023-10-31\": { endpoint: \"DELETE /api/observability/slos/{id} 2023-10-31\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ id: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", + "; \"GET /internal/observability/slos/_diagnosis\": { endpoint: \"GET /internal/observability/slos/_diagnosis\"; params?: undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9402,7 +8460,13 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { path: { id: string; }; }; }) => Promise; } & ", + ") => Promise<{ licenseAndFeatures: ", + "PublicLicenseJSON", + "; userPrivileges: { write: ", + "SecurityHasPrivilegesResponse", + "; read: ", + "SecurityHasPrivilegesResponse", + "; }; }>; } & ", { "pluginId": "observability", "scope": "server", @@ -9410,12 +8474,14 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"POST /api/observability/slos 2023-10-31\": { endpoint: \"POST /api/observability/slos 2023-10-31\"; params?: ", + "; \"PUT /api/observability/slos/{id} 2023-10-31\": { endpoint: \"PUT /api/observability/slos/{id} 2023-10-31\"; params?: ", "TypeC", - "<{ body: ", - "IntersectionC", - "<[", + "<{ path: ", "TypeC", + "<{ id: ", + "StringC", + "; }>; body: ", + "PartialC", "<{ name: ", "StringC", "; description: ", @@ -9708,11 +8774,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; }>, ", - "PartialC", - "<{ id: ", - "StringC", - "; settings: ", + ", string, unknown>; }>]>; settings: ", "PartialC", "<{ syncDelay: ", "Type", @@ -9744,7 +8806,7 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; }>]>; }> | undefined; handler: ({}: ", + "]>; }>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9752,7 +8814,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { body: { name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: ", + " & { params: { path: { id: string; }; body: { name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; } | undefined; timeWindow?: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -9768,7 +8830,7 @@ "section": "def-common.Duration", "text": "Duration" }, - "; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", + "; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -9776,7 +8838,7 @@ "section": "def-common.Duration", "text": "Duration" }, - " | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: ", + " | undefined; }) | undefined; settings?: { syncDelay?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -9786,13 +8848,165 @@ }, " | undefined; frequency?: ", { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" + "pluginId": "@kbn/slo-schema", + "scope": "common", + "docId": "kibKbnSloSchemaPluginApi", + "section": "def-common.Duration", + "text": "Duration" + }, + " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | undefined; }; }; }) => Promise<{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; }>; } & ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" + }, + "; \"GET /api/observability/slos/{id} 2023-10-31\": { endpoint: \"GET /api/observability/slos/{id} 2023-10-31\"; params?: ", + "IntersectionC", + "<[", + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }>, ", + "PartialC", + "<{ query: ", + "PartialC", + "<{ instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; }>; }>]> | undefined; handler: ({}: ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteHandlerResources", + "text": "ObservabilityRouteHandlerResources" + }, + " & { params: { path: { id: string; }; } & { query?: { instanceId?: string | undefined; } | undefined; }; }) => Promise<{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }>; } & ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" + }, + "; \"GET /api/observability/slos 2023-10-31\": { endpoint: \"GET /api/observability/slos 2023-10-31\"; params?: ", + "PartialC", + "<{ query: ", + "PartialC", + "<{ kqlQuery: ", + "StringC", + "; page: ", + "StringC", + "; perPage: ", + "StringC", + "; sortBy: ", + "UnionC", + "<[", + "LiteralC", + "<\"error_budget_consumed\">, ", + "LiteralC", + "<\"error_budget_remaining\">, ", + "LiteralC", + "<\"sli_value\">, ", + "LiteralC", + "<\"status\">]>; sortDirection: ", + "UnionC", + "<[", + "LiteralC", + "<\"asc\">, ", + "LiteralC", + "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteHandlerResources", + "text": "ObservabilityRouteHandlerResources" + }, + " & { params?: { query?: { kqlQuery?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"status\" | \"error_budget_consumed\" | \"error_budget_remaining\" | \"sli_value\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }>; } & ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" + }, + "; \"GET /internal/observability/slos/_definitions\": { endpoint: \"GET /internal/observability/slos/_definitions\"; params?: ", + "TypeC", + "<{ query: ", + "TypeC", + "<{ search: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteHandlerResources", + "text": "ObservabilityRouteHandlerResources" + }, + " & { params: { query: { search: string; }; }; }) => Promise<({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { syncDelay: string; frequency: string; }; enabled: boolean; tags: string[]; groupBy: string; createdAt: string; updatedAt: string; } & { instanceId?: string | undefined; })[]>; } & ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" + }, + "; \"POST /internal/observability/slos/_historical_summary\": { endpoint: \"POST /internal/observability/slos/_historical_summary\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ list: ", + "ArrayC", + "<", + "TypeC", + "<{ sloId: ", + "StringC", + "; instanceId: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; }>>; }>; }> | undefined; handler: ({}: ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteHandlerResources", + "text": "ObservabilityRouteHandlerResources" + }, + " & { params: { body: { list: { sloId: string; instanceId: string; }[]; }; }; }) => Promise<{ sloId: string; instanceId: string; data: ({ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; })[]; }[]>; } & ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" + }, + "; \"POST /api/observability/slos/{id}/enable 2023-10-31\": { endpoint: \"POST /api/observability/slos/{id}/enable 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + { + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteHandlerResources", + "text": "ObservabilityRouteHandlerResources" }, - " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | undefined; }; }; }) => Promise<{ id: string; }>; } & ", + " & { params: { path: { id: string; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -9800,15 +9014,11 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; \"GET /api/observability/rules/alerts/dynamic_index_pattern 2023-10-31\": { endpoint: \"GET /api/observability/rules/alerts/dynamic_index_pattern 2023-10-31\"; params?: ", + "; \"POST /api/observability/slos/{id}/disable 2023-10-31\": { endpoint: \"POST /api/observability/slos/{id}/disable 2023-10-31\"; params?: ", "TypeC", - "<{ query: ", + "<{ path: ", "TypeC", - "<{ registrationContexts: ", - "ArrayC", - "<", - "StringC", - ">; namespace: ", + "<{ id: ", "StringC", "; }>; }> | undefined; handler: ({}: ", { @@ -9818,7 +9028,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { query: { registrationContexts: string[]; namespace: string; }; }; }) => Promise; } & ", + " & { params: { path: { id: string; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -9826,57 +9036,19 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", - "ServerRouteCreateOptions", - " ? TReturnType : never" - ], - "path": "x-pack/plugins/observability/server/routes/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "observability", - "id": "def-server.ObservabilityConfig", - "type": "Type", - "tags": [], - "label": "ObservabilityConfig", - "description": [], - "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" - ], - "path": "x-pack/plugins/observability/server/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "observability", - "id": "def-server.ObservabilityServerRouteRepository", - "type": "Type", - "tags": [], - "label": "ObservabilityServerRouteRepository", - "description": [], - "signature": [ - "{ \"GET /api/observability/composite_slos 2023-05-24\"?: ({ endpoint: \"GET /api/observability/composite_slos 2023-05-24\"; params?: ", - "PartialC", - "<{ query: ", - "PartialC", - "<{ name: ", - "StringC", - "; page: ", + "; \"POST /api/observability/slos/_delete_instances 2023-10-31\": { endpoint: \"POST /api/observability/slos/_delete_instances 2023-10-31\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ list: ", + "ArrayC", + "<", + "TypeC", + "<{ sloId: ", "StringC", - "; perPage: ", + "; instanceId: ", "StringC", - "; sortBy: ", - "LiteralC", - "<\"creationTime\">; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", + "; }>>; }>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -9884,7 +9056,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params?: { query?: { name?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"creationTime\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: ({ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }>; } & ", + " & { params: { body: { list: { sloId: string; instanceId: string; }[]; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -9892,7 +9064,7 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - ") | undefined; \"GET /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"GET /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", + "; \"DELETE /api/observability/slos/{id} 2023-10-31\": { endpoint: \"DELETE /api/observability/slos/{id} 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -9906,7 +9078,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }>; } & ", + " & { params: { path: { id: string; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -9914,51 +9086,249 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - ") | undefined; \"DELETE /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"DELETE /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", + "; \"POST /api/observability/slos 2023-10-31\": { endpoint: \"POST /api/observability/slos 2023-10-31\"; params?: ", "TypeC", - "<{ path: ", + "<{ body: ", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; indicator: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"sli.apm.transactionDuration\">; params: ", + "IntersectionC", + "<[", + "TypeC", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; service: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; transactionType: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; transactionName: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; threshold: ", + "NumberC", + "; index: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"sli.apm.transactionErrorRate\">; params: ", + "IntersectionC", + "<[", + "TypeC", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; service: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; transactionType: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; transactionName: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; index: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"sli.kql.custom\">; params: ", + "IntersectionC", + "<[", + "TypeC", + "<{ index: ", + "StringC", + "; good: ", + "StringC", + "; total: ", + "StringC", + "; timestampField: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"sli.metric.custom\">; params: ", + "IntersectionC", + "<[", + "TypeC", + "<{ index: ", + "StringC", + "; good: ", + "TypeC", + "<{ metrics: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; aggregation: ", + "KeyofC", + "<{ sum: boolean; }>; field: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>>; equation: ", + "StringC", + "; }>; total: ", + "TypeC", + "<{ metrics: ", + "ArrayC", + "<", + "IntersectionC", + "<[", + "TypeC", + "<{ name: ", + "StringC", + "; aggregation: ", + "KeyofC", + "<{ sum: boolean; }>; field: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>>; equation: ", + "StringC", + "; }>; timestampField: ", + "StringC", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"sli.histogram.custom\">; params: ", + "IntersectionC", + "<[", "TypeC", - "<{ id: ", + "<{ index: ", "StringC", - "; }>; }> | undefined; handler: ({}: ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteHandlerResources", - "text": "ObservabilityRouteHandlerResources" - }, - " & { params: { path: { id: string; }; }; }) => Promise; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"PUT /api/observability/composite_slos/{id} 2023-05-24\"?: ({ endpoint: \"PUT /api/observability/composite_slos/{id} 2023-05-24\"; params?: ", + "; timestampField: ", + "StringC", + "; good: ", + "UnionC", + "<[", + "IntersectionC", + "<[", "TypeC", - "<{ path: ", + "<{ field: ", + "StringC", + "; aggregation: ", + "LiteralC", + "<\"value_count\">; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>, ", + "IntersectionC", + "<[", "TypeC", - "<{ id: ", + "<{ field: ", "StringC", - "; }>; body: ", + "; aggregation: ", + "LiteralC", + "<\"range\">; from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>, ", "PartialC", - "<{ name: ", + "<{ filter: ", + "StringC", + "; }>]>]>; total: ", + "UnionC", + "<[", + "IntersectionC", + "<[", + "TypeC", + "<{ field: ", "StringC", - "; compositeMethod: ", + "; aggregation: ", "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", + "<\"value_count\">; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>, ", + "IntersectionC", + "<[", "TypeC", - "<{ id: ", + "<{ field: ", "StringC", - "; revision: ", + "; aggregation: ", + "LiteralC", + "<\"range\">; from: ", "NumberC", - "; weight: ", + "; to: ", "NumberC", - "; }>>; timeWindow: ", + "; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>]>; }>, ", + "PartialC", + "<{ filter: ", + "StringC", + "; }>]>; }>]>; timeWindow: ", "UnionC", "<[", "TypeC", @@ -10014,11 +9384,43 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; }>]>; tags: ", + ", string, unknown>; }>]>; }>, ", + "PartialC", + "<{ id: ", + "StringC", + "; settings: ", + "PartialC", + "<{ syncDelay: ", + "Type", + "<", + { + "pluginId": "@kbn/slo-schema", + "scope": "common", + "docId": "kibKbnSloSchemaPluginApi", + "section": "def-common.Duration", + "text": "Duration" + }, + ", string, unknown>; frequency: ", + "Type", + "<", + { + "pluginId": "@kbn/slo-schema", + "scope": "common", + "docId": "kibKbnSloSchemaPluginApi", + "section": "def-common.Duration", + "text": "Duration" + }, + ", string, unknown>; }>; tags: ", "ArrayC", "<", "StringC", - ">; }>; }> | undefined; handler: ({}: ", + ">; groupBy: ", + "UnionC", + "<[", + "LiteralC", + "<\"*\">, ", + "StringC", + "]>; }>]>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -10026,7 +9428,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { path: { id: string; }; body: { name?: string | undefined; compositeMethod?: \"weightedAverage\" | undefined; sources?: { id: string; revision: number; weight: number; }[] | undefined; timeWindow?: { duration: ", + " & { params: { body: { name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string; total: string; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; total: { metrics: ({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | undefined; })[]; equation: string; }; timestampField: string; } & { filter?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | undefined; }); } & { filter?: string | undefined; }; }; timeWindow: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -10042,7 +9444,7 @@ "section": "def-common.Duration", "text": "Duration" }, - "; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", + "; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -10050,29 +9452,7 @@ "section": "def-common.Duration", "text": "Duration" }, - " | undefined; }) | undefined; tags?: string[] | undefined; }; }; }) => Promise<{ id: string; name: string; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; tags: string[]; createdAt: string; updatedAt: string; }>; } & ", - { - "pluginId": "observability", - "scope": "server", - "docId": "kibObservabilityPluginApi", - "section": "def-server.ObservabilityRouteCreateOptions", - "text": "ObservabilityRouteCreateOptions" - }, - ") | undefined; \"POST /api/observability/composite_slos 2023-05-24\"?: ({ endpoint: \"POST /api/observability/composite_slos 2023-05-24\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ name: ", - "StringC", - "; timeWindow: ", - "UnionC", - "<[", - "TypeC", - "<{ duration: ", - "Type", - "<", + " | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -10080,13 +9460,7 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; type: ", - "LiteralC", - "<\"rolling\">; }>, ", - "TypeC", - "<{ duration: ", - "Type", - "<", + " | undefined; frequency?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -10094,55 +9468,25 @@ "section": "def-common.Duration", "text": "Duration" }, - ", string, unknown>; type: ", - "LiteralC", - "<\"calendarAligned\">; }>]>; budgetingMethod: ", - "UnionC", - "<[", - "LiteralC", - "<\"occurrences\">, ", - "LiteralC", - "<\"timeslices\">]>; objective: ", - "IntersectionC", - "<[", - "TypeC", - "<{ target: ", - "NumberC", - "; }>, ", - "PartialC", - "<{ timesliceTarget: ", - "NumberC", - "; timesliceWindow: ", - "Type", - "<", + " | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | undefined; }; }; }) => Promise<{ id: string; }>; } & ", { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" + "pluginId": "observability", + "scope": "server", + "docId": "kibObservabilityPluginApi", + "section": "def-server.ObservabilityRouteCreateOptions", + "text": "ObservabilityRouteCreateOptions" }, - ", string, unknown>; }>]>; compositeMethod: ", - "LiteralC", - "<\"weightedAverage\">; sources: ", - "ArrayC", - "<", + "; \"GET /api/observability/rules/alerts/dynamic_index_pattern 2023-10-31\": { endpoint: \"GET /api/observability/rules/alerts/dynamic_index_pattern 2023-10-31\"; params?: ", "TypeC", - "<{ id: ", - "StringC", - "; revision: ", - "NumberC", - "; weight: ", - "NumberC", - "; }>>; }>, ", - "PartialC", - "<{ id: ", - "StringC", - "; tags: ", + "<{ query: ", + "TypeC", + "<{ registrationContexts: ", "ArrayC", "<", "StringC", - ">; }>]>; }> | undefined; handler: ({}: ", + ">; namespace: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", { "pluginId": "observability", "scope": "server", @@ -10150,31 +9494,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - " & { params: { body: { name: string; timeWindow: { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"rolling\"; } | { duration: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - "; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", - { - "pluginId": "@kbn/slo-schema", - "scope": "common", - "docId": "kibKbnSloSchemaPluginApi", - "section": "def-common.Duration", - "text": "Duration" - }, - " | undefined; }; compositeMethod: \"weightedAverage\"; sources: { id: string; revision: number; weight: number; }[]; } & { id?: string | undefined; tags?: string[] | undefined; }; }; }) => Promise<{ id: string; }>; } & ", + " & { params: { query: { registrationContexts: string[]; namespace: string; }; }; }) => Promise; } & ", { "pluginId": "observability", "scope": "server", @@ -10182,7 +9502,39 @@ "section": "def-server.ObservabilityRouteCreateOptions", "text": "ObservabilityRouteCreateOptions" }, - ") | undefined; \"GET /internal/observability/slos/{id}/_instances\": { endpoint: \"GET /internal/observability/slos/{id}/_instances\"; params?: ", + "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", + "ServerRouteCreateOptions", + " ? TReturnType : never" + ], + "path": "x-pack/plugins/observability/server/routes/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observability", + "id": "def-server.ObservabilityConfig", + "type": "Type", + "tags": [], + "label": "ObservabilityConfig", + "description": [], + "signature": [ + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; }" + ], + "path": "x-pack/plugins/observability/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observability", + "id": "def-server.ObservabilityServerRouteRepository", + "type": "Type", + "tags": [], + "label": "ObservabilityServerRouteRepository", + "description": [], + "signature": [ + "{ \"GET /internal/observability/slos/{id}/_instances\": { endpoint: \"GET /internal/observability/slos/{id}/_instances\"; params?: ", "TypeC", "<{ path: ", "TypeC", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index f8c697f34d271..f5f24e8c029d1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 645fa6fa84d09..3926ac4e46d74 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-10-12 +date: 2023-10-16 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 b8a65a08425d4..3d917e80882cf 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-10-12 +date: 2023-10-16 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 0cc5018944f8a..e997751f0599c 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 3636997b7091a..eb419ba5e0955 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 817b0ee022338..2ca20438e709f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 64eb42ae0d6a9..b164e6242aebf 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index d69da85e90f37..1613387955af9 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 75816 | 223 | 64609 | 1580 | +| 75818 | 223 | 64609 | 1580 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 269 | 0 | 263 | 31 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 17 | 1 | 15 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 67 | 1 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 776 | 1 | 745 | 50 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 785 | 1 | 754 | 50 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 29 | 0 | 29 | 120 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 9 | 0 | 9 | 0 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | @@ -56,11 +56,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 109 | 0 | 106 | 11 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3284 | 33 | 2549 | 24 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3290 | 33 | 2554 | 24 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 35 | 0 | 25 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1041 | 0 | 257 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1048 | 0 | 262 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 118 | 0 | 76 | 18 | @@ -72,7 +72,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 51 | 0 | 44 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 115 | 3 | 111 | 3 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 200 | 0 | 200 | 6 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 201 | 0 | 201 | 6 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The listing page for event annotations. | 15 | 0 | 15 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 111 | 0 | 111 | 11 | | | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 132 | 1 | 132 | 14 | @@ -113,7 +113,7 @@ 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) | - | 176 | 0 | 138 | 4 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 173 | 0 | 137 | 4 | | 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) | - | 610 | 3 | 417 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | @@ -232,7 +232,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 21 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | -| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 28 | 0 | 28 | 7 | +| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 31 | 0 | 31 | 7 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 180 | 0 | 180 | 26 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | @@ -254,7 +254,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 15 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 10 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 59 | 0 | 41 | 4 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 191 | 1 | 126 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 191 | 1 | 125 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | @@ -617,7 +617,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 3 | 0 | -| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 135 | 0 | 132 | 0 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 114 | 0 | 111 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 20 | 0 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 102 | 2 | 65 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index a0227b461e49c..64b61e650320b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index dd6adf35fdcde..49ef172f1f527 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index a9ad49bb6fe76..b55451cf67c0d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index d60d97c3f9d07..47ce0a2808b34 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 1a6d09106790d..14df5b204a927 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 8522b07105ac1..d664aca798714 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 0d6efc556a89c..3ab31e7ef3ea2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index cdb17a7b45d17..2101eda6d9480 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 60f27fa95210c..c14ffe2f7c17f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 18ccdb71c2601..f8abfca5e955f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index e07e39d485ae7..d792d02267680 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 3d028f17bbdb7..ccfc01ac2e9ee 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 64d3e60fa06ec..ca6f71777c8f3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 33220bc86ecf1..db48333d091c2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 30f8f777e90a8..1625a84df3879 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 15184e6720d2b..48d931e6d11ad 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-10-12 +date: 2023-10-16 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 3fadede6ec99a..2af9c231e2c08 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-10-12 +date: 2023-10-16 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 26d27039d53cd..c3b91882ebc81 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -101,7 +101,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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/plugin.tsx", "deprecated": false, @@ -494,7 +494,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | undefined" + "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -574,7 +574,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"discoverInTimeline\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | undefined" + "\"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"chartEmbeddablesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"alertsPreviewChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"alertDetailsPageEnabled\" | \"responseActionUploadEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"alertsPageFiltersEnabled\" | \"assistantModelEvaluation\" | \"newUserDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1511,7 +1511,7 @@ "ExpandedDetailType", " | undefined; securityAssistant?: ", "ExpandedDetailType", - " | undefined; discover?: ", + " | undefined; esql?: ", "ExpandedDetailType", " | undefined; }" ], @@ -1791,7 +1791,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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -2864,7 +2864,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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3010,7 +3010,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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3059,7 +3059,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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly discoverInTimeline: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly alertDetailsPageEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: 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 d47c62a353843..e7b6d6df1f915 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 771824c20e11b..126c8ef55ffc4 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 48b7b396ac39a..f4066d17158ff 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 4b11563bb256a..3f09a79c9faf2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 4d779bd2d0bf4..bd5ff97e3c05a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 393305fc42d9c..297b3e7f5b66b 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 878b2b9d989f6..c80f4051d63dc 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-10-12 +date: 2023-10-16 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 5ecfdb62a4b0c..3c574f9e5cc8d 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-10-12 +date: 2023-10-16 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 51032fe273551..f1814cd3db16e 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 3d56c7c50adcd..6d49c3dc8cf26 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 575ac0d2c01a9..aa52f3adb9251 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index b6da8f4caf390..e6e012bc303c3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index e162dbc1f7e05..583dc1f3bbafa 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 449a9c48b4a8c..68f30ab93bd14 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index b3ce595bd2910..44a7c1a7b546a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index a6b7b5b8f6208..e047837c56f30 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 73561d0fe4e38..62aa098305918 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index fd1b94a588d69..1959477135473 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index f8e64b275929b..f8ba2f16d4472 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 2b8a0e5378458..3542fc09ae8a1 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -1415,11 +1415,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" }, { "plugin": "@kbn/securitysolution-data-table", @@ -3977,11 +3977,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx" }, { "plugin": "securitySolution", @@ -4329,27 +4329,27 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/context.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/right/context.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/right/context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/context.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/context.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/left/context.tsx" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/left/context.tsx" }, { "plugin": "securitySolution", @@ -4361,11 +4361,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_browser_fields.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_browser_fields.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_browser_fields.ts" + "path": "x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_browser_fields.ts" }, { "plugin": "@kbn/securitysolution-data-table", diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 8aa0bc955dffe..1dc96a8076c3d 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index be06edf4710f5..19d4cb756be16 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 40eed69f592d7..032e3fd4c5526 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.devdocs.json b/api_docs/ui_actions.devdocs.json index 8aa60c3c65f77..fc3e6efa4a21a 100644 --- a/api_docs/ui_actions.devdocs.json +++ b/api_docs/ui_actions.devdocs.json @@ -2218,7 +2218,7 @@ "section": "def-common.FieldAttrs", "text": "FieldAttrs" }, - " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; }" + " | undefined; allowNoIndex?: boolean | undefined; namespaces?: string[] | undefined; name?: string | undefined; allowHidden?: boolean | undefined; }" ], "path": "src/plugins/ui_actions/public/types.ts", "deprecated": false, diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 7e62ef66dcc92..bf64581633565 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index bc52470957eb0..772f905e905ba 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 5e258b1996bd3..09fe37b3923ac 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 2b0fad6ccc0bd..6a4073cad1f83 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 5b1a9d4baa4b4..401f3cbb670c1 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 195d0c3062f95..418502b01cad2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index ab3028b40392d..b4352f5c02b49 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 4d2724125a439..50a8d55139205 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index a5d1afd951667..1862d1ca287a2 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index f5f6a5547a28d..0acd5ee1523ac 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 09dba57ae6c61..b5d7d3d185133 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 202ab06f43e1a..db83a50f144b5 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 3822906123f33..b0894842171da 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index c88ab4535667e..28f2417335144 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index ae21d49c17dab..d749bacb5e20a 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 4a4215beff935..e7f127d356736 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 96faeecb6c4e3..f15f3821e55ef 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 5ae99273c890d..9c96f9228f57f 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index e4dfbbb1e4bcc..439b9d9bb4cd3 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index bd7fe6125d3d5..7b2003557f751 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index f5d0fa7205cfd..a5283e3b76411 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-10-12 +date: 2023-10-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.security.yml b/config/serverless.security.yml index 225b9f2656636..1d3e83c76202a 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -23,6 +23,8 @@ xpack.securitySolution.offeringSettings: { ESQLEnabled: false, # ES|QL disabled, not supported by serverless Elasticsearch } +newsfeed.enabled: true + ## Set the home route uiSettings.overrides.defaultRoute: /app/security/get_started diff --git a/config/serverless.yml b/config/serverless.yml index 282956932f412..30c4aff914a51 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -52,6 +52,7 @@ xpack.canvas.enabled: false xpack.cloud_integrations.data_migration.enabled: false data.search.sessions.enabled: false advanced_settings.enabled: false +xpack.screenshotting.enabled: false # Disable the browser-side functionality that depends on SecurityCheckupGetStateRoutes xpack.security.showInsecureClusterWarning: false diff --git a/docs/management/cases/manage-cases.asciidoc b/docs/management/cases/manage-cases.asciidoc index e3896423b3f13..1ebe9643d55c2 100644 --- a/docs/management/cases/manage-cases.asciidoc +++ b/docs/management/cases/manage-cases.asciidoc @@ -90,8 +90,7 @@ cases. For hosted {kib} on {ess}: -. Add the email addresses to the monitoring email allowlist. Follow the steps in -{cloud}/ec-watcher.html#ec-watcher-allowlist[Send alerts by email]. +. Add the email domains to the {cloud}/ec-organizations-notifications-domain-allowlist.html[notifications domain allowlist]. + -- You do not need to take any more steps to configure an email connector or update diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index 47abc6c5646fe..bf44390d13294 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -203,14 +203,20 @@ export class ChromeService { }; const headerBanner$ = new BehaviorSubject(undefined); - const bodyClasses$ = combineLatest([headerBanner$, this.isVisible$!, chromeStyle$]).pipe( - map(([headerBanner, isVisible, chromeStyle]) => { + const bodyClasses$ = combineLatest([ + headerBanner$, + this.isVisible$!, + chromeStyle$, + application.currentActionMenu$, + ]).pipe( + map(([headerBanner, isVisible, chromeStyle, actionMenu]) => { return [ 'kbnBody', headerBanner ? 'kbnBody--hasHeaderBanner' : 'kbnBody--noHeaderBanner', isVisible ? 'kbnBody--chromeVisible' : 'kbnBody--chromeHidden', + chromeStyle === 'project' && actionMenu ? 'kbnBody--hasProjectActionMenu' : '', getKbnVersionClass(), - ]; + ].filter((className) => !!className); }) ); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/app_menu.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/app_menu.tsx index 22ff7c9415ba8..0c0e4dbdf9167 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/app_menu.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/app_menu.tsx @@ -17,6 +17,7 @@ interface AppMenuBarProps { } export const AppMenuBar = ({ headerActionMenuMounter }: AppMenuBarProps) => { const { euiTheme } = useEuiTheme(); + return (
{ display: flex; justify-content: end; align-items: center; - padding: ${euiTheme.size.s}; + padding: 0 ${euiTheme.size.s}; + height: var(--kbnProjectHeaderAppActionMenuHeight, ${euiTheme.size.xxxl}); margin-bottom: -${euiTheme.border.width.thin}; /* fixates the elements position in the viewport, removes the element from the flow of the page */ position: sticky; diff --git a/packages/kbn-apm-synthtrace/index.ts b/packages/kbn-apm-synthtrace/index.ts index abcf201bf96c2..921243e67ac6a 100644 --- a/packages/kbn-apm-synthtrace/index.ts +++ b/packages/kbn-apm-synthtrace/index.ts @@ -16,3 +16,8 @@ export { InfraSynthtraceEsClient } from './src/lib/infra/infra_synthtrace_es_cli export { AssetsSynthtraceEsClient } from './src/lib/assets/assets_synthtrace_es_client'; export { MonitoringSynthtraceEsClient } from './src/lib/monitoring/monitoring_synthtrace_es_client'; + +export { + addObserverVersionTransform, + deleteSummaryFieldTransform, +} from './src/lib/utils/transform_helpers'; diff --git a/packages/kbn-apm-synthtrace/src/lib/shared/base_client.ts b/packages/kbn-apm-synthtrace/src/lib/shared/base_client.ts index 4a3a79e2b78d9..4b00a574b447e 100644 --- a/packages/kbn-apm-synthtrace/src/lib/shared/base_client.ts +++ b/packages/kbn-apm-synthtrace/src/lib/shared/base_client.ts @@ -13,7 +13,7 @@ import { SynthtraceESAction, SynthtraceGenerator, } from '@kbn/apm-synthtrace-client'; -import { castArray } from 'lodash'; +import { castArray, isFunction } from 'lodash'; import { Readable, Transform } from 'stream'; import { isGeneratorObject } from 'util/types'; import { Logger } from '../utils/create_logger'; @@ -69,9 +69,17 @@ export class SynthtraceEsClient { this.pipelineCallback = cb; } - async index(streamOrGenerator: MaybeArray>) { + async index( + streamOrGenerator: MaybeArray>, + pipelineCallback?: (base: Readable) => NodeJS.WritableStream + ) { this.logger.debug(`Bulk indexing ${castArray(streamOrGenerator).length} stream(s)`); + const previousPipelineCallback = this.pipelineCallback; + if (isFunction(pipelineCallback)) { + this.pipeline(pipelineCallback); + } + const allStreams = castArray(streamOrGenerator).map((obj) => { const base = isGeneratorObject(obj) ? Readable.from(obj) : obj; @@ -121,6 +129,11 @@ export class SynthtraceEsClient { this.logger.info(`Produced ${count} events`); + // restore pipeline callback + if (pipelineCallback) { + this.pipeline(previousPipelineCallback); + } + if (this.refreshAfterIndex) { await this.refresh(); } diff --git a/packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts b/packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts new file mode 100644 index 0000000000000..abd841bc9a837 --- /dev/null +++ b/packages/kbn-apm-synthtrace/src/lib/utils/transform_helpers.ts @@ -0,0 +1,33 @@ +/* + * Copyright 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 { Transform } from 'stream'; + +export function addObserverVersionTransform(observerVersion: string) { + return new Transform({ + objectMode: true, + transform(chunk: { observer?: { version?: string } }, encoding, callback) { + if (chunk?.observer?.version) { + chunk.observer.version = observerVersion; + } + callback(null, chunk); + }, + }); +} + +export function deleteSummaryFieldTransform() { + return new Transform({ + objectMode: true, + transform(chunk: { transaction?: { duration?: { summary?: number } } }, encoding, callback) { + if (chunk?.transaction?.duration?.summary) { + delete chunk.transaction.duration.summary; + } + callback(null, chunk); + }, + }); +} diff --git a/packages/kbn-content-management-utils/src/saved_object_content_storage.ts b/packages/kbn-content-management-utils/src/saved_object_content_storage.ts index 8ff22a0d9be02..070bb9cd5d739 100644 --- a/packages/kbn-content-management-utils/src/saved_object_content_storage.ts +++ b/packages/kbn-content-management-utils/src/saved_object_content_storage.ts @@ -129,7 +129,7 @@ export type UpdateArgsToSoUpdateOptions = ( params: Types['UpdateOptions'] ) => SavedObjectsUpdateOptions; -export interface SOContentStorageConstrutorParams { +export interface SOContentStorageConstructorParams { savedObjectType: string; cmServicesDefinition: ServicesDefinitionSet; // this is necessary since unexpected saved object attributes could cause schema validation to fail @@ -137,6 +137,12 @@ export interface SOContentStorageConstrutorParams { createArgsToSoCreateOptions?: CreateArgsToSoCreateOptions; updateArgsToSoUpdateOptions?: UpdateArgsToSoUpdateOptions; searchArgsToSOFindOptions?: SearchArgsToSOFindOptions; + /** + * MSearch is a feature that allows searching across multiple content types + * (for example, could be used in a general content finder or the like) + * + * defaults to false + */ enableMSearch?: boolean; mSearchAdditionalSearchFields?: string[]; @@ -163,7 +169,7 @@ export abstract class SOContentStorage mSearchAdditionalSearchFields, logger, throwOnResultValidationError, - }: SOContentStorageConstrutorParams) { + }: SOContentStorageConstructorParams) { this.logger = logger; this.throwOnResultValidationError = throwOnResultValidationError ?? false; this.savedObjectType = savedObjectType; @@ -219,8 +225,8 @@ export abstract class SOContentStorage private throwOnResultValidationError: boolean; private logger: Logger; - private savedObjectType: SOContentStorageConstrutorParams['savedObjectType']; - private cmServicesDefinition: SOContentStorageConstrutorParams['cmServicesDefinition']; + private savedObjectType: SOContentStorageConstructorParams['savedObjectType']; + private cmServicesDefinition: SOContentStorageConstructorParams['cmServicesDefinition']; private createArgsToSoCreateOptions: CreateArgsToSoCreateOptions; private updateArgsToSoUpdateOptions: UpdateArgsToSoUpdateOptions; private searchArgsToSOFindOptions: SearchArgsToSOFindOptions; diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 20aaad5905ba3..6f2800a8d6348 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -830,24 +830,24 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { goGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}go-client-getting-started`, httpApis: `${SERVERLESS_ELASTICSEARCH_DOCS}http-apis`, httpApiReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}http-apis`, - jsApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-apis-getting-started`, - jsGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-apis-getting-started`, - phpApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}php-apis-getting-started`, - phpGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}php-apis-getting-started`, - pythonApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, - pythonGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, - pythonReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}python-apis-getting-started`, - rubyApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-apis-getting-started`, - rubyGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-apis-getting-started`, + jsApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-client-getting-started`, + jsGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}nodejs-client-getting-started`, + phpApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}php-client-getting-started`, + phpGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}php-client-getting-started`, + pythonApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}python-client-getting-started`, + pythonGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}python-client-getting-started`, + pythonReferences: `${SERVERLESS_ELASTICSEARCH_DOCS}python-client-getting-started`, + rubyApiReference: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-client-getting-started`, + rubyGettingStarted: `${SERVERLESS_ELASTICSEARCH_DOCS}ruby-client-getting-started`, }, serverlessSearch: { integrations: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-your-data`, - integrationsLogstash: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-logstash`, - integrationsBeats: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-beats`, - integrationsConnectorClient: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-integrations-connector-client`, - gettingStartedExplore: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#explore`, - gettingStartedIngest: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#ingest`, - gettingStartedSearch: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started#search`, + integrationsLogstash: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-logstash`, + integrationsBeats: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-data-through-beats`, + integrationsConnectorClient: `${SERVERLESS_ELASTICSEARCH_DOCS}ingest-your-data`, + gettingStartedExplore: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, + gettingStartedIngest: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, + gettingStartedSearch: `${SERVERLESS_ELASTICSEARCH_DOCS}get-started`, }, serverlessSecurity: { apiKeyPrivileges: `${SERVERLESS_DOCS}api-keys#restrict-privileges`, @@ -856,7 +856,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { featureRoles: `${ELASTIC_WEBSITE_URL}guide/en/observability/${DOC_LINK_VERSION}/synthetics-feature-roles.html`, }, esql: { - statsBy: `${ELASTICSEARCH_DOCS}esql-stats-by.html`, + statsBy: `${ELASTICSEARCH_DOCS}esql.html`, }, telemetry: { settings: `${KIBANA_DOCS}telemetry-settings-kbn.html`, diff --git a/packages/kbn-expandable-flyout/.storybook/main.js b/packages/kbn-expandable-flyout/.storybook/main.js new file mode 100644 index 0000000000000..8dc3c5d1518f4 --- /dev/null +++ b/packages/kbn-expandable-flyout/.storybook/main.js @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/packages/kbn-expandable-flyout/README.md b/packages/kbn-expandable-flyout/README.md index 8a9a201ff89af..63a6f9483ead0 100644 --- a/packages/kbn-expandable-flyout/README.md +++ b/packages/kbn-expandable-flyout/README.md @@ -9,30 +9,36 @@ The flyout is composed of 3 sections: - a left wider section to show more details - a preview section, that overlays the right section. This preview section can display multiple panels one after the other and displays a `Back` button -At the moment, displaying more than one flyout within the same plugin might be complicated, unless there are in difference areas in the codebase and the contexts don't conflict with each other. +> Run `yarn storybook expandable_flyout` to take a quick look at the expandable flyout in action -## What the package offers +## Design decisions -The ExpandableFlyout [React component](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/components/index) that renders the UI. +The expandable-flyout package is designed to render a single flyout for an entire plugin. While displaying multiple flyouts might be feasible, it will be a bit complicated, and we recommend instead to build multiple panels, with each their own context to manage their data (for example, take a look at the Security Solution [setup](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout)). -The ExpandableFlyout [React context](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/components/context) that exposes the following api: +The expandable-flyout is making some strict UI design decisions: +- when in collapsed mode (i.e. when only the right/preview section is open), the flyout's width is fixed to the EUI `s` size +- when in expanded mode (i.e. when the left section is opened), the flyout's width is fixed to the EUI `l` size. Internally the right, left and preview sections' widths are set to a hardcoded percentage (40%, 60$ and 40% respectively) + +## Package API + +The ExpandableFlyout [React component](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/index.tsx) renders the UI, leveraging an [EuiFlyout](https://eui.elastic.co/#/layout/flyout). + +The ExpandableFlyout [React context](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/context.tsx) manages the internal state of the expandable flyout, and exposes the following api: - **openFlyout**: open the flyout with a set of panels -- **openFlyoutRightPanel**: open a right panel -- **openFlyoutLeftPanel**: open a left panel -- **openFlyoutPreviewPanel**: open a preview panel -- **closeFlyoutRightPanel**: close the right panel -- **closeFlyoutLeftPanel**: close the left panel -- **closeFlyoutPreviewPanel**: close the preview panels -- **previousFlyoutPreviewPanel**: navigate to the previous preview panel +- **openRightPanel**: open a right panel +- **openLeftPanel**: open a left panel +- **openPreviewPanel**: open a preview panel +- **closeRightPanel**: close the right panel +- **closeLeftPanel**: close the left panel +- **closePreviewPanel**: close the preview panels +- **previousPreviewPanel**: navigate to the previous preview panel - **closeFlyout**: close the flyout -To retrieve the flyout's layout (left, right and preview panels), you can use the **panels** from the same [React context](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/components/context); - -- To have more details about how these above api work, see the code documentation [here](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/utils/helpers). +To retrieve the flyout's layout (left, right and preview panels), you can use the **panels** from the same [React context](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/context.tsx). ## Usage -To use the expandable flyout in your plugin, first you need wrap your code with the context provider at a high enough level as follows: +To use the expandable flyout in your plugin, first you need wrap your code with the [context provider](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/context.tsx) at a high enough level as follows: ```typescript jsx @@ -41,25 +47,20 @@ To use the expandable flyout in your plugin, first you need wrap your code with ``` -Then use the React UI component where you need: +Then use the [React UI component](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/index.tsx) where you need: ```typescript jsx ``` -where `myPanels` is a list of all the panels that can be rendered in the flyout (see interface [here](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout/src/components/index)). +_where `myPanels` is a list of all the panels that can be rendered in the flyout_ ## Terminology ### Section -One of the 3 areas of the flyout (left, right or preview). +One of the 3 areas of the flyout (**left**, **right** or **preview**). ### Panel -A set of properties defining what's displayed in one of the flyout section. - -## Future work - -- add the feature to save the flyout state (layout) to the url (https://github.com/elastic/security-team/issues/6119) -- introduce the notion of scope to be able to handle more than one flyout per plugin?? \ No newline at end of file +A set of properties defining what's displayed in one of the flyout section (see interface [here](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/types.ts)). diff --git a/packages/kbn-expandable-flyout/src/components/left_section.tsx b/packages/kbn-expandable-flyout/src/components/left_section.tsx index d388923c01d69..1d2a4a7eeabac 100644 --- a/packages/kbn-expandable-flyout/src/components/left_section.tsx +++ b/packages/kbn-expandable-flyout/src/components/left_section.tsx @@ -8,7 +8,7 @@ import { EuiFlexItem } from '@elastic/eui'; import React, { useMemo } from 'react'; -import { LEFT_SECTION } from './test_ids'; +import { LEFT_SECTION_TEST_ID } from './test_ids'; interface LeftSectionProps { /** @@ -30,7 +30,7 @@ export const LeftSection: React.FC = ({ component, width }: Le [width] ); return ( - + {component} ); diff --git a/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx b/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx index 41926400e11f5..f365c8f299623 100644 --- a/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx +++ b/packages/kbn-expandable-flyout/src/components/preview_section.test.tsx @@ -9,7 +9,10 @@ import React from 'react'; import { render } from '@testing-library/react'; import { PreviewSection } from './preview_section'; -import { PREVIEW_SECTION_BACK_BUTTON, PREVIEW_SECTION_CLOSE_BUTTON } from './test_ids'; +import { + PREVIEW_SECTION_BACK_BUTTON_TEST_ID, + PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID, +} from './test_ids'; import { ExpandableFlyoutContext } from '../context'; describe('PreviewSection', () => { @@ -36,7 +39,7 @@ describe('PreviewSection', () => { ); - expect(getByTestId(PREVIEW_SECTION_CLOSE_BUTTON)).toBeInTheDocument(); + expect(getByTestId(PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID)).toBeInTheDocument(); }); it('should render back button in header', () => { @@ -50,6 +53,6 @@ describe('PreviewSection', () => { ); - expect(getByTestId(PREVIEW_SECTION_BACK_BUTTON)).toBeInTheDocument(); + expect(getByTestId(PREVIEW_SECTION_BACK_BUTTON_TEST_ID)).toBeInTheDocument(); }); }); diff --git a/packages/kbn-expandable-flyout/src/components/preview_section.tsx b/packages/kbn-expandable-flyout/src/components/preview_section.tsx index 1bb3f84d1b5f5..1cc2243d65849 100644 --- a/packages/kbn-expandable-flyout/src/components/preview_section.tsx +++ b/packages/kbn-expandable-flyout/src/components/preview_section.tsx @@ -19,10 +19,10 @@ import React from 'react'; import { css } from '@emotion/react'; import { has } from 'lodash'; import { - PREVIEW_SECTION_BACK_BUTTON, - PREVIEW_SECTION_CLOSE_BUTTON, - PREVIEW_SECTION_HEADER, - PREVIEW_SECTION, + PREVIEW_SECTION_BACK_BUTTON_TEST_ID, + PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID, + PREVIEW_SECTION_HEADER_TEST_ID, + PREVIEW_SECTION_TEST_ID, } from './test_ids'; import { useExpandableFlyoutContext } from '../..'; import { BACK_BUTTON, CLOSE_BUTTON } from './translations'; @@ -97,7 +97,7 @@ export const PreviewSection: React.FC = ({ closePreviewPanel()} - data-test-subj={PREVIEW_SECTION_CLOSE_BUTTON} + data-test-subj={PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID} aria-label={CLOSE_BUTTON} /> @@ -110,7 +110,7 @@ export const PreviewSection: React.FC = ({ iconType="arrowLeft" iconSide="left" onClick={() => previousPreviewPanel()} - data-test-subj={PREVIEW_SECTION_BACK_BUTTON} + data-test-subj={PREVIEW_SECTION_BACK_BUTTON_TEST_ID} aria-label={BACK_BUTTON} > {BACK_BUTTON} @@ -140,7 +140,7 @@ export const PreviewSection: React.FC = ({ box-shadow: 0px 0px 5px 5px ${euiTheme.colors.darkShade}; `} className="eui-yScroll" - data-test-subj={PREVIEW_SECTION} + data-test-subj={PREVIEW_SECTION_TEST_ID} > {isPreviewBanner(banner) && ( @@ -149,7 +149,11 @@ export const PreviewSection: React.FC = ({ )} - + {header} {component} diff --git a/packages/kbn-expandable-flyout/src/components/right_section.tsx b/packages/kbn-expandable-flyout/src/components/right_section.tsx index 7857c2b4fba48..6e7e94dc14048 100644 --- a/packages/kbn-expandable-flyout/src/components/right_section.tsx +++ b/packages/kbn-expandable-flyout/src/components/right_section.tsx @@ -8,7 +8,7 @@ import { EuiFlexItem } from '@elastic/eui'; import React, { useMemo } from 'react'; -import { RIGHT_SECTION } from './test_ids'; +import { RIGHT_SECTION_TEST_ID } from './test_ids'; interface RightSectionProps { /** @@ -34,7 +34,7 @@ export const RightSection: React.FC = ({ ); return ( - + {component} ); diff --git a/packages/kbn-expandable-flyout/src/components/test_ids.ts b/packages/kbn-expandable-flyout/src/components/test_ids.ts index 430f87f85c5d5..439ba2e826073 100644 --- a/packages/kbn-expandable-flyout/src/components/test_ids.ts +++ b/packages/kbn-expandable-flyout/src/components/test_ids.ts @@ -6,14 +6,14 @@ * Side Public License, v 1. */ -export const RIGHT_SECTION = 'rightSection'; +export const RIGHT_SECTION_TEST_ID = 'rightSection'; -export const LEFT_SECTION = 'leftSection'; +export const LEFT_SECTION_TEST_ID = 'leftSection'; -export const PREVIEW_SECTION = 'previewSection'; +export const PREVIEW_SECTION_TEST_ID = 'previewSection'; -export const PREVIEW_SECTION_CLOSE_BUTTON = 'previewSectionCloseButton'; +export const PREVIEW_SECTION_CLOSE_BUTTON_TEST_ID = 'previewSectionCloseButton'; -export const PREVIEW_SECTION_BACK_BUTTON = 'previewSectionBackButton'; +export const PREVIEW_SECTION_BACK_BUTTON_TEST_ID = 'previewSectionBackButton'; -export const PREVIEW_SECTION_HEADER = 'previewSectionHeader'; +export const PREVIEW_SECTION_HEADER_TEST_ID = 'previewSectionHeader'; diff --git a/packages/kbn-expandable-flyout/src/index.stories.tsx b/packages/kbn-expandable-flyout/src/index.stories.tsx new file mode 100644 index 0000000000000..2bbc26c3363f3 --- /dev/null +++ b/packages/kbn-expandable-flyout/src/index.stories.tsx @@ -0,0 +1,196 @@ +/* + * Copyright 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 type { Story } from '@storybook/react'; +import { + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiPanel, + EuiTitle, +} from '@elastic/eui'; +import { ExpandableFlyout } from '.'; +import { ExpandableFlyoutContext } from './context'; + +export default { + component: ExpandableFlyout, + title: 'ExpandableFlyout', +}; + +const registeredPanels = [ + { + key: 'right', + component: () => ( + <> + + +

{'Right panel header'}

+
+
+ +

{'Example of a right component body'}

+
+ + + + {'Footer button'} + + + + + ), + }, + { + key: 'left', + component: () => ( + + + + +

{'Left panel header'}

+
+
+

{'Example of a left component content'}

+ +
+
+ ), + }, + { + key: 'preview1', + component: () => ( + + + + +

{'Preview panel header'}

+
+
+

{'Example of a preview component content'}

+ +
+
+ ), + }, + { + key: 'preview2', + component: () => ( + + + + +

{'Second preview panel header'}

+
+
+

{'Example of another preview component content'}

+ +
+
+ ), + }, +]; + +export const Right: Story = () => { + const context: ExpandableFlyoutContext = { + panels: { + right: { + id: 'right', + }, + left: {}, + preview: [], + }, + closeFlyout: () => window.alert('closeFlyout api'), + } as unknown as ExpandableFlyoutContext; + + return ( + + + + ); +}; + +export const Left: Story = () => { + const context: ExpandableFlyoutContext = { + panels: { + right: { + id: 'right', + }, + left: { + id: 'left', + }, + preview: [], + }, + closeFlyout: () => window.alert('closeFlyout api'), + } as unknown as ExpandableFlyoutContext; + + return ( + + + + ); +}; + +export const Preview: Story = () => { + const context: ExpandableFlyoutContext = { + panels: { + right: { + id: 'right', + }, + left: { + id: 'left', + }, + preview: [ + { + id: 'preview1', + }, + ], + }, + closePreviewPanel: () => window.alert('closePreviewPanel api'), + closeFlyout: () => window.alert('closeFlyout api'), + } as unknown as ExpandableFlyoutContext; + + return ( + + + + ); +}; + +export const MultiplePreviews: Story = () => { + const context: ExpandableFlyoutContext = { + panels: { + right: { + id: 'right', + }, + left: { + id: 'left', + }, + preview: [ + { + id: 'preview1', + }, + { + id: 'preview2', + }, + ], + }, + closePreviewPanel: () => window.alert('closePreviewPanel api'), + previousPreviewPanel: () => window.alert('previousPreviewPanel api'), + closeFlyout: () => window.alert('closeFlyout api'), + } as unknown as ExpandableFlyoutContext; + + return ( + + + + ); +}; diff --git a/packages/kbn-expandable-flyout/src/index.test.tsx b/packages/kbn-expandable-flyout/src/index.test.tsx index f09da565651b9..c6da99ad01777 100644 --- a/packages/kbn-expandable-flyout/src/index.test.tsx +++ b/packages/kbn-expandable-flyout/src/index.test.tsx @@ -10,7 +10,11 @@ import React from 'react'; import { render } from '@testing-library/react'; import { Panel } from './types'; import { ExpandableFlyout } from '.'; -import { LEFT_SECTION, PREVIEW_SECTION, RIGHT_SECTION } from './components/test_ids'; +import { + LEFT_SECTION_TEST_ID, + PREVIEW_SECTION_TEST_ID, + RIGHT_SECTION_TEST_ID, +} from './components/test_ids'; import { ExpandableFlyoutContext } from './context'; describe('ExpandableFlyout', () => { @@ -56,7 +60,7 @@ describe('ExpandableFlyout', () => { ); - expect(getByTestId(RIGHT_SECTION)).toBeInTheDocument(); + expect(getByTestId(RIGHT_SECTION_TEST_ID)).toBeInTheDocument(); }); it('should render left section', () => { @@ -76,7 +80,7 @@ describe('ExpandableFlyout', () => { ); - expect(getByTestId(LEFT_SECTION)).toBeInTheDocument(); + expect(getByTestId(LEFT_SECTION_TEST_ID)).toBeInTheDocument(); }); it('should render preview section', () => { @@ -98,6 +102,6 @@ describe('ExpandableFlyout', () => { ); - expect(getByTestId(PREVIEW_SECTION)).toBeInTheDocument(); + expect(getByTestId(PREVIEW_SECTION_TEST_ID)).toBeInTheDocument(); }); }); diff --git a/packages/kbn-management/settings/setting_ids/index.ts b/packages/kbn-management/settings/setting_ids/index.ts index 0613326d8f428..9a1188b868961 100644 --- a/packages/kbn-management/settings/setting_ids/index.ts +++ b/packages/kbn-management/settings/setting_ids/index.ts @@ -157,8 +157,8 @@ export const SECURITY_SOLUTION_DEFAULT_INDEX_ID = 'securitySolution:defaultIndex export const SECURITY_SOLUTION_DEFAULT_THREAT_INDEX_ID = 'securitySolution:defaultThreatIndex'; export const SECURITY_SOLUTION_DEFAULT_ANOMALY_SCORE_ID = 'securitySolution:defaultAnomalyScore'; export const SECURITY_SOLUTION_ENABLE_GROUPED_NAV_ID = 'securitySolution:enableGroupedNav'; -export const SECURITY_SOLUTION_ENABLE_NEWS_FEED_ID = 'securitySolution:enableNewsFeed'; export const SECURITY_SOLUTION_RULES_TABLE_REFRESH_ID = 'securitySolution:rulesTableRefresh'; +export const SECURITY_SOLUTION_ENABLE_NEWS_FEED_ID = 'securitySolution:enableNewsFeed'; export const SECURITY_SOLUTION_NEWS_FEED_URL_ID = 'securitySolution:newsFeedUrl'; export const SECURITY_SOLUTION_IP_REPUTATION_LINKS_ID = 'securitySolution:ipReputationLinks'; export const SECURITY_SOLUTION_ENABLE_CCS_WARNING_ID = 'securitySolution:enableCcsWarning'; diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 1bbc4d08247a2..5395d6cce3643 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -31,7 +31,7 @@ pageLoadAssetSize: dataViewEditor: 28082 dataViewFieldEditor: 27000 dataViewManagement: 5000 - dataViews: 47300 + dataViews: 48300 dataVisualizer: 27530 devTools: 38637 discover: 99999 @@ -83,7 +83,7 @@ pageLoadAssetSize: kibanaUsageCollection: 16463 kibanaUtils: 79713 kubernetesSecurity: 77234 - lens: 38000 + lens: 39000 licenseManagement: 41817 licensing: 29004 links: 44490 diff --git a/packages/kbn-search-connectors/lib/create_connector_document.ts b/packages/kbn-search-connectors/lib/create_connector_document.ts index c5654e9a2436a..bd05ef3c79958 100644 --- a/packages/kbn-search-connectors/lib/create_connector_document.ts +++ b/packages/kbn-search-connectors/lib/create_connector_document.ts @@ -116,7 +116,7 @@ export function createConnectorDocument({ incremental: { enabled: false, interval: '0 0 0 * * ?' }, }, service_type: serviceType || null, - status: ConnectorStatus.CREATED, + status: isNative ? ConnectorStatus.NEEDS_CONFIGURATION : ConnectorStatus.CREATED, sync_now: false, }; } diff --git a/packages/kbn-search-connectors/lib/update_connector_configuration.ts b/packages/kbn-search-connectors/lib/update_connector_configuration.ts index dfb43af53db44..473932ecfddca 100644 --- a/packages/kbn-search-connectors/lib/update_connector_configuration.ts +++ b/packages/kbn-search-connectors/lib/update_connector_configuration.ts @@ -26,7 +26,8 @@ export const updateConnectorConfiguration = async ( const connector = connectorResult?.value; if (connector) { const status = - connector.status === ConnectorStatus.NEEDS_CONFIGURATION + connector.status === ConnectorStatus.NEEDS_CONFIGURATION || + connector.status === ConnectorStatus.CREATED ? ConnectorStatus.CONFIGURED : connector.status; const updatedConfig = Object.keys(connector.configuration) diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index a69036fc7c0e8..69a2d64184465 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -776,13 +776,111 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record { expect(setMountPoint).toHaveBeenCalledTimes(1); }); + it('calls the provided `setMountPoint` with undefined during unmount', async () => { + dom = mount( + + portal content + + ); + + await refresh(); + + dom.unmount(); + + await refresh(); + + expect(setMountPoint).toHaveBeenCalledTimes(2); + expect(setMountPoint).toHaveBeenLastCalledWith(undefined); + }); + it('renders the portal content when calling the mountPoint ', async () => { dom = mount( @@ -127,7 +144,7 @@ describe('MountPointPortal', () => { it('updates the content of the portal element when the content of MountPointPortal changes', async () => { const Wrapper: FC<{ - setMount: (mountPoint: MountPoint) => void; + setMount: (mountPoint: MountPoint | undefined) => void; portalContent: string; }> = ({ setMount, portalContent }) => { return ( diff --git a/packages/react/kibana_mount/mount_point_portal.tsx b/packages/react/kibana_mount/mount_point_portal.tsx index c5bc994279c41..dcfeddc428d09 100644 --- a/packages/react/kibana_mount/mount_point_portal.tsx +++ b/packages/react/kibana_mount/mount_point_portal.tsx @@ -13,7 +13,7 @@ import { MountPoint } from '@kbn/core/public'; import { useIfMounted } from './utils'; export interface MountPointPortalProps { - setMountPoint: (mountPoint: MountPoint) => void; + setMountPoint: (mountPoint: MountPoint | undefined) => void; } /** @@ -47,6 +47,7 @@ export const MountPointPortal: React.FC = ({ children, se setShouldRender(false); el.current = undefined; }); + setMountPoint(undefined); }; }, [setMountPoint, ifMounted]); diff --git a/packages/serverless/settings/common/index.ts b/packages/serverless/settings/common/index.ts index 326108abcd747..f8f608bdf64f5 100644 --- a/packages/serverless/settings/common/index.ts +++ b/packages/serverless/settings/common/index.ts @@ -22,7 +22,6 @@ const GENERAL_SETTINGS = [ settings.FORMAT_NUMBER_DEFAULT_PATTERN_ID, settings.FORMAT_PERCENT_DEFAULT_PATTERN_ID, settings.META_FIELDS_ID, - settings.STATE_STORE_IN_SESSION_STORAGE_ID, settings.TIMEPICKER_QUICK_RANGES_ID, settings.TIMEPICKER_TIME_DEFAULTS_ID, ]; diff --git a/packages/serverless/settings/security_project/index.ts b/packages/serverless/settings/security_project/index.ts index 070a75f163d41..3a3ed2addf9f4 100644 --- a/packages/serverless/settings/security_project/index.ts +++ b/packages/serverless/settings/security_project/index.ts @@ -20,4 +20,6 @@ export const SECURITY_PROJECT_SETTINGS = [ settings.SECURITY_SOLUTION_IP_REPUTATION_LINKS_ID, settings.SECURITY_SOLUTION_ENABLE_CCS_WARNING_ID, settings.SECURITY_SOLUTION_SHOW_RELATED_INTEGRATIONS_ID, + settings.SECURITY_SOLUTION_NEWS_FEED_URL_ID, + settings.SECURITY_SOLUTION_ENABLE_NEWS_FEED_ID, ]; diff --git a/src/core/public/_css_variables.scss b/src/core/public/_css_variables.scss index cef1be40d1239..5fc2c4dbfc2d3 100644 --- a/src/core/public/_css_variables.scss +++ b/src/core/public/_css_variables.scss @@ -5,6 +5,8 @@ --kbnHeaderOffset: var(--euiFixedHeadersOffset, 0); // total height of everything when the banner is present --kbnHeaderOffsetWithBanner: calc(var(--kbnHeaderBannerHeight) + var(--kbnHeaderOffset)); + // height of the action menu in the header in serverless projects + --kbnProjectHeaderAppActionMenuHeight: #{$euiSize * 3}; } // Quick note: This shouldn't be mixed with Sass variable declarations, diff --git a/src/core/public/_mixins.scss b/src/core/public/_mixins.scss index 9d533a87d1843..0c6a8571f9e75 100644 --- a/src/core/public/_mixins.scss +++ b/src/core/public/_mixins.scss @@ -1,6 +1,10 @@ @mixin kibanaFullBodyHeight($additionalOffset: 0) { - // The `--euiFixedHeadersOffset` CSS variable is automatically updated by + // The `--kbnAppHeadersOffset` CSS variable is automatically updated by // styles/rendering/_base.scss, based on whether the Kibana chrome has a - // header banner, and is visible or hidden - height: calc(100vh - var(--euiFixedHeadersOffset, 0) - #{$additionalOffset}); + // header banner, app menu, and is visible or hidden + height: calc( + 100vh + - var(--kbnAppHeadersOffset, var(--euiFixedHeadersOffset, 0)) + - #{$additionalOffset} + ); } diff --git a/src/core/public/styles/rendering/_base.scss b/src/core/public/styles/rendering/_base.scss index 8a7b14242f8bf..1bcfaab71ea17 100644 --- a/src/core/public/styles/rendering/_base.scss +++ b/src/core/public/styles/rendering/_base.scss @@ -19,7 +19,7 @@ pointer-events: none; visibility: hidden; position: fixed; - top: var(--euiFixedHeadersOffset, 0); + top: var(--kbnAppHeadersOffset, var(--euiFixedHeadersOffset, 0)); right: 0; bottom: 0; left: 0; @@ -41,7 +41,6 @@ // Conditionally override :root CSS fixed header variable. Updating `--euiFixedHeadersOffset` // on the body will cause all child EUI components to automatically update their offsets - .kbnBody--hasHeaderBanner { --euiFixedHeadersOffset: var(--kbnHeaderOffsetWithBanner); @@ -56,9 +55,25 @@ top: var(--kbnHeaderBannerHeight); } } + +// Set a body CSS variable for the app container to use - calculates the total +// height of all fixed headers + the sticky action menu toolbar +.kbnBody--hasProjectActionMenu { + --kbnAppHeadersOffset: calc(var(--kbnHeaderOffset) + var(--kbnProjectHeaderAppActionMenuHeight)); + + &.kbnBody--hasHeaderBanner { + --kbnAppHeadersOffset: calc(var(--kbnHeaderOffsetWithBanner) + var(--kbnProjectHeaderAppActionMenuHeight)); + } +} + .kbnBody--chromeHidden { --euiFixedHeadersOffset: 0; -} -.kbnBody--chromeHidden.kbnBody--hasHeaderBanner { - --euiFixedHeadersOffset: var(--kbnHeaderBannerHeight); + + &.kbnBody--hasHeaderBanner { + --euiFixedHeadersOffset: var(--kbnHeaderBannerHeight); + } + + &.kbnBody--hasProjectActionMenu { + --kbnAppHeadersOffset: var(--euiFixedHeadersOffset, 0); + } } diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker index 97ca84061d78d..05b7133519a81 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker @@ -310,7 +310,6 @@ kibana_vars=( xpack.observability.unsafe.alertDetails.uptime.enabled xpack.observability.unsafe.alertDetails.observability.enabled xpack.observability.unsafe.thresholdRule.enabled - xpack.observability.compositeSlo.enabled xpack.reporting.capture.browser.autoDownload xpack.reporting.capture.browser.chromium.disableSandbox xpack.reporting.capture.browser.chromium.inspect diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile index 8bf470f489cb7..8db4b419a184a 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile @@ -126,6 +126,8 @@ COPY --chown=1000:0 config/serverless.yml /usr/share/kibana/config/serverless.ym COPY --chown=1000:0 config/serverless.es.yml /usr/share/kibana/config/serverless.es.yml COPY --chown=1000:0 config/serverless.oblt.yml /usr/share/kibana/config/serverless.oblt.yml COPY --chown=1000:0 config/serverless.security.yml /usr/share/kibana/config/serverless.security.yml +# Supportability enhancement: enable capturing heap snapshots. See https://nodejs.org/api/cli.html#--heapsnapshot-signalsignal +RUN echo '\n--heapsnapshot-signal=SIGUSR2' >> config/node.options {{/serverless}} {{^opensslLegacyProvider}} RUN sed 's/\(--openssl-legacy-provider\)/#\1/' -i config/node.options @@ -196,4 +198,4 @@ CMD ["/usr/local/bin/kibana-docker"] {{/cloud}} -USER kibana +USER 1000 diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index fea9d8629f382..a43fd71d0004e 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -27,9 +27,9 @@ export const storybookAliases = { dashboard: 'src/plugins/dashboard/.storybook', data: 'src/plugins/data/.storybook', discover: 'src/plugins/discover/.storybook', - log_explorer: 'x-pack/plugins/log_explorer/.storybook', embeddable: 'src/plugins/embeddable/.storybook', es_ui_shared: 'src/plugins/es_ui_shared/.storybook', + expandable_flyout: 'packages/kbn-expandable-flyout/.storybook', expression_error: 'src/plugins/expression_error/.storybook', expression_image: 'src/plugins/expression_image/.storybook', expression_metric_vis: 'src/plugins/chart_expressions/expression_legacy_metric/.storybook', @@ -45,6 +45,7 @@ export const storybookAliases = { infra: 'x-pack/plugins/infra/.storybook', kibana_react: 'src/plugins/kibana_react/.storybook', lists: 'x-pack/plugins/lists/.storybook', + log_explorer: 'x-pack/plugins/log_explorer/.storybook', management: 'packages/kbn-management/storybook/config', observability: 'x-pack/plugins/observability/.storybook', observability_ai_assistant: 'x-pack/plugins/observability_ai_assistant/.storybook', diff --git a/src/plugins/data/public/search/search_service.test.ts b/src/plugins/data/public/search/search_service.test.ts index 5f9e57d05fe6b..69afad8d9b079 100644 --- a/src/plugins/data/public/search/search_service.test.ts +++ b/src/plugins/data/public/search/search_service.test.ts @@ -143,7 +143,7 @@ describe('Search service', () => { expect(notifications.toasts.addWarning).toBeCalledTimes(1); expect(notifications.toasts.addWarning).toBeCalledWith({ - title: 'The data might be incomplete or wrong.', + title: 'Results are partial and may be incomplete.', text: expect.any(Function), }); }); diff --git a/src/plugins/data/public/search/warnings/extract_warnings.test.ts b/src/plugins/data/public/search/warnings/extract_warnings.test.ts index 6a5fc046dc5d3..02e235d897dc7 100644 --- a/src/plugins/data/public/search/warnings/extract_warnings.test.ts +++ b/src/plugins/data/public/search/warnings/extract_warnings.test.ts @@ -43,7 +43,7 @@ describe('extract search response warnings', () => { expect(extractWarnings(response, mockInspectorService)).toEqual([ { type: 'incomplete', - message: 'The data might be incomplete or wrong.', + message: 'Results are partial and may be incomplete.', clusters: { '(local)': { status: 'partial', @@ -69,7 +69,7 @@ describe('extract search response warnings', () => { expect(extractWarnings(response, mockInspectorService)).toEqual([ { type: 'incomplete', - message: 'The data might be incomplete or wrong.', + message: 'Results are partial and may be incomplete.', clusters: { '(local)': { status: 'partial', @@ -188,7 +188,7 @@ describe('extract search response warnings', () => { expect(extractWarnings(response, mockInspectorService)).toEqual([ { type: 'incomplete', - message: 'The data might be incomplete or wrong.', + message: 'Results are partial and may be incomplete.', clusters: response._clusters.details, openInInspector: expect.any(Function), }, @@ -242,7 +242,7 @@ describe('extract search response warnings', () => { expect(extractWarnings(response, mockInspectorService)).toEqual([ { type: 'incomplete', - message: 'The data might be incomplete or wrong.', + message: 'Results are partial and may be incomplete.', clusters: response._clusters.details, openInInspector: expect.any(Function), }, diff --git a/src/plugins/data/public/search/warnings/extract_warnings.ts b/src/plugins/data/public/search/warnings/extract_warnings.ts index 2a6a9df484036..15b77dd5d0248 100644 --- a/src/plugins/data/public/search/warnings/extract_warnings.ts +++ b/src/plugins/data/public/search/warnings/extract_warnings.ts @@ -37,7 +37,7 @@ export function extractWarnings( warnings.push({ type: 'incomplete', message: i18n.translate('data.search.searchSource.fetch.incompleteResultsMessage', { - defaultMessage: 'The data might be incomplete or wrong.', + defaultMessage: 'Results are partial and may be incomplete.', }), clusters: rawResponse._clusters ? ( 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 ad344d482c0cf..c889f2e0dcd06 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 @@ -124,6 +124,7 @@ const IndexPatternEditorFlyoutContentComponent = ({ timeFieldName: formData.timestampField?.value, id: formData.id, name: formData.name, + allowHidden: formData.allowHidden, }; if (type === INDEX_PATTERN_TYPE.ROLLUP && rollupIndex) { diff --git a/src/plugins/data_views/common/data_views/__snapshots__/data_views.test.ts.snap b/src/plugins/data_views/common/data_views/__snapshots__/data_views.test.ts.snap index 0d646f4afc28d..53b77e28a416c 100644 --- a/src/plugins/data_views/common/data_views/__snapshots__/data_views.test.ts.snap +++ b/src/plugins/data_views/common/data_views/__snapshots__/data_views.test.ts.snap @@ -28,6 +28,7 @@ exports[`IndexPatterns delete will throw if insufficient access 1`] = `[DataView exports[`IndexPatterns savedObjectToSpec 1`] = ` Object { + "allowHidden": undefined, "allowNoIndex": undefined, "fieldAttrs": Object { "aRuntimeField": Object { diff --git a/src/plugins/data_views/common/data_views/data_view.ts b/src/plugins/data_views/common/data_views/data_view.ts index ffda65af2a895..3cea4505b572c 100644 --- a/src/plugins/data_views/common/data_views/data_view.ts +++ b/src/plugins/data_views/common/data_views/data_view.ts @@ -152,6 +152,8 @@ export class DataView implements DataViewBase { */ public matchedIndices: string[] = []; + private allowHidden: boolean = false; + /** * constructor * @param config - config data and dependencies @@ -187,6 +189,7 @@ export class DataView implements DataViewBase { this.runtimeFieldMap = cloneDeep(spec.runtimeFieldMap) || {}; this.namespaces = spec.namespaces || []; this.name = spec.name || ''; + this.allowHidden = spec.allowHidden || false; } /** @@ -201,6 +204,8 @@ export class DataView implements DataViewBase { getIndexPattern = () => this.title; + getAllowHidden = () => this.allowHidden; + /** * Set index pattern * @param string index pattern string diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index 8bac81f19ef62..d5509f03db580 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -584,6 +584,7 @@ export class DataViewsService { allowNoIndex: true, pattern: dataView.getIndexPattern(), metaFields, + allowHidden: dataView.getAllowHidden(), }); }; @@ -596,6 +597,7 @@ export class DataViewsService { rollupIndex: options.rollupIndex, allowNoIndex: true, indexFilter: options.indexFilter, + allowHidden: options.allowHidden, }); }; @@ -747,6 +749,7 @@ export class DataViewsService { fieldAttrs, allowNoIndex, name, + allowHidden, }, } = savedObject; @@ -774,6 +777,7 @@ export class DataViewsService { allowNoIndex, runtimeFieldMap: parsedRuntimeFieldMap, name, + allowHidden, }; }; diff --git a/src/plugins/data_views/common/types.ts b/src/plugins/data_views/common/types.ts index 9061c4643dce9..522bec8873534 100644 --- a/src/plugins/data_views/common/types.ts +++ b/src/plugins/data_views/common/types.ts @@ -157,6 +157,10 @@ export interface DataViewAttributes { * Name of the data view. Human readable name used to differentiate data view. */ name?: string; + /** + * Allow hidden and system indices when loading field list + */ + allowHidden?: boolean; } /** @@ -309,6 +313,7 @@ export interface GetFieldsOptions { indexFilter?: QueryDslQueryContainer; includeUnmapped?: boolean; fields?: string[]; + allowHidden?: boolean; } /** @@ -512,6 +517,10 @@ export type DataViewSpec = { * Name of the data view. Human readable name used to differentiate data view. */ name?: string; + /** + * Whether the data view is hidden from the user + */ + allowHidden?: boolean; }; // eslint-disable-next-line @typescript-eslint/consistent-type-definitions diff --git a/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts b/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts index b1d22dc5523c8..f23933bc5775e 100644 --- a/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts +++ b/src/plugins/data_views/server/fetcher/index_patterns_fetcher.ts @@ -69,12 +69,23 @@ export class IndexPatternsFetcher { rollupIndex?: string; indexFilter?: QueryDslQueryContainer; fields?: string[]; + allowHidden?: boolean; }): Promise<{ fields: FieldDescriptor[]; indices: string[] }> { - const { pattern, metaFields = [], fieldCapsOptions, type, rollupIndex, indexFilter } = options; + const { + pattern, + metaFields = [], + fieldCapsOptions, + type, + rollupIndex, + indexFilter, + allowHidden, + } = options; const allowNoIndices = fieldCapsOptions ? fieldCapsOptions.allow_no_indices : this.allowNoIndices; + const expandWildcards = allowHidden ? 'all' : 'open'; + const fieldCapsResponse = await getFieldCapabilities({ callCluster: this.elasticsearchClient, indices: pattern, @@ -85,6 +96,7 @@ export class IndexPatternsFetcher { }, indexFilter, fields: options.fields || ['*'], + expandWildcards, }); if (this.rollupsEnabled && type === 'rollup' && rollupIndex) { diff --git a/src/plugins/data_views/server/fetcher/lib/es_api.ts b/src/plugins/data_views/server/fetcher/lib/es_api.ts index 988e4a4ec28c8..2128e52da537b 100644 --- a/src/plugins/data_views/server/fetcher/lib/es_api.ts +++ b/src/plugins/data_views/server/fetcher/lib/es_api.ts @@ -7,6 +7,7 @@ */ import { ElasticsearchClient } from '@kbn/core/server'; +import { ExpandWildcard } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { QueryDslQueryContainer } from '../../../common/types'; import { convertEsError } from './errors'; @@ -45,6 +46,7 @@ interface FieldCapsApiParams { fieldCapsOptions?: { allow_no_indices: boolean; include_unmapped?: boolean }; indexFilter?: QueryDslQueryContainer; fields?: string[]; + expandWildcard?: ExpandWildcard; } /** diff --git a/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.test.js b/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.test.js index 1b3be374bbd7c..f41c71498e81e 100644 --- a/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.test.js +++ b/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.test.js @@ -34,6 +34,7 @@ describe('index_patterns/field_capabilities/field_capabilities', () => { const fillUndefinedParams = (args) => ({ callCluster: undefined, indices: undefined, + expandWildcard: undefined, fieldCapsOptions: undefined, indexFilter: undefined, fields: undefined, diff --git a/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.ts b/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.ts index 73e550ebd68ce..6bef117151609 100644 --- a/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.ts +++ b/src/plugins/data_views/server/fetcher/lib/field_capabilities/field_capabilities.ts @@ -9,6 +9,7 @@ import { defaults, keyBy, sortBy } from 'lodash'; import { ElasticsearchClient } from '@kbn/core/server'; +import { ExpandWildcard } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { callFieldCapsApi } from '../es_api'; import { readFieldCapsResponse } from './field_caps_response'; import { mergeOverrides } from './overrides'; @@ -22,6 +23,7 @@ interface FieldCapabilitiesParams { fieldCapsOptions?: { allow_no_indices: boolean; include_unmapped?: boolean }; indexFilter?: QueryDslQueryContainer; fields?: string[]; + expandWildcards?: ExpandWildcard; } /** @@ -42,6 +44,7 @@ export async function getFieldCapabilities(params: FieldCapabilitiesParams) { indexFilter, metaFields = [], fields, + expandWildcards, } = params; const esFieldCaps = await callFieldCapsApi({ callCluster, @@ -49,6 +52,7 @@ export async function getFieldCapabilities(params: FieldCapabilitiesParams) { fieldCapsOptions, indexFilter, fields, + expandWildcard: expandWildcards, }); const fieldCapsArr = readFieldCapsResponse(esFieldCaps.body); const fieldsFromFieldCapsByName = keyBy(fieldCapsArr, 'name'); diff --git a/src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts b/src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts index 15d761935c0a7..7d39b41d5caee 100644 --- a/src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts +++ b/src/plugins/data_views/server/rest_api_routes/internal/fields_for.ts @@ -50,6 +50,7 @@ interface IQuery { allow_no_index?: boolean; include_unmapped?: boolean; fields?: string[]; + allow_hidden?: boolean; } const querySchema = schema.object({ @@ -62,6 +63,7 @@ const querySchema = schema.object({ allow_no_index: schema.maybe(schema.boolean()), include_unmapped: schema.maybe(schema.boolean()), fields: schema.maybe(schema.oneOf([schema.string(), schema.arrayOf(schema.string())])), + allow_hidden: schema.maybe(schema.boolean()), }); const fieldSubTypeSchema = schema.object({ @@ -122,6 +124,7 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I rollup_index: rollupIndex, allow_no_index: allowNoIndex, include_unmapped: includeUnmapped, + allow_hidden: allowHidden, } = request.query; // not available to get request @@ -147,6 +150,7 @@ const handler: (isRollupsEnabled: () => boolean) => RequestHandler<{}, IQuery, I includeUnmapped, }, indexFilter, + allowHidden, ...(parsedFields.length > 0 ? { fields: parsedFields } : {}), }); diff --git a/src/plugins/data_views/server/rest_api_routes/public/scripted_fields/get_scripted_field.ts b/src/plugins/data_views/server/rest_api_routes/public/scripted_fields/get_scripted_field.ts index 4f1a9d2a781f7..0bda9a21b10d7 100644 --- a/src/plugins/data_views/server/rest_api_routes/public/scripted_fields/get_scripted_field.ts +++ b/src/plugins/data_views/server/rest_api_routes/public/scripted_fields/get_scripted_field.ts @@ -15,7 +15,7 @@ import type { DataViewsServerPluginStartDependencies, } from '../../../types'; import { INITIAL_REST_VERSION } from '../../../constants'; -import { serializedFieldFormatSchema } from '../../../../common/schemas'; +import { fieldSpecSchemaFields } from '../../../../common/schemas'; import { FieldSpecRestResponse } from '../../route_types'; export const registerGetScriptedFieldRoute = ( @@ -49,7 +49,7 @@ export const registerGetScriptedFieldRoute = ( response: { 200: { body: schema.object({ - field: serializedFieldFormatSchema, + field: schema.object(fieldSpecSchemaFields), }), }, }, diff --git a/src/plugins/discover/public/application/main/utils/fetch_all.test.ts b/src/plugins/discover/public/application/main/utils/fetch_all.test.ts index 6de9781b0b58b..48d867f4b81c4 100644 --- a/src/plugins/discover/public/application/main/utils/fetch_all.test.ts +++ b/src/plugins/discover/public/application/main/utils/fetch_all.test.ts @@ -382,5 +382,33 @@ describe('test fetchAll', () => { }, ]); }); + + test('should swallow abort errors', async () => { + const collect = subjectCollector(subjects.documents$); + mockfetchTextBased.mockRejectedValue({ msg: 'The query was aborted' }); + const query = { esql: 'from foo' }; + deps = { + abortController: new AbortController(), + inspectorAdapters: { requests: new RequestAdapter() }, + searchSessionId: '123', + initialFetchStatus: FetchStatus.UNINITIALIZED, + useNewFieldsApi: true, + savedSearch: savedSearchMock, + services: discoverServiceMock, + getAppState: () => ({ query }), + getInternalState: () => ({ + dataView: undefined, + savedDataViews: [], + adHocDataViews: [], + expandedDoc: undefined, + customFilters: [], + }), + }; + fetchAll(subjects, false, deps); + deps.abortController.abort(); + await waitForNextTick(); + + expect((await collect()).find(({ error }) => error)).toBeUndefined(); + }); }); }); diff --git a/src/plugins/discover/public/application/main/utils/fetch_all.ts b/src/plugins/discover/public/application/main/utils/fetch_all.ts index ff754b065a130..289ad9e336b04 100644 --- a/src/plugins/discover/public/application/main/utils/fetch_all.ts +++ b/src/plugins/discover/public/application/main/utils/fetch_all.ts @@ -61,6 +61,7 @@ export function fetchAll( services, inspectorAdapters, savedSearch, + abortController, } = fetchDeps; const { data } = services; const searchSource = savedSearch.searchSource.createChild(); @@ -93,7 +94,14 @@ export function fetchAll( // Start fetching all required requests const response = useTextbased && query - ? fetchTextBased(query, dataView, data, services.expressions, inspectorAdapters) + ? fetchTextBased( + query, + dataView, + data, + services.expressions, + inspectorAdapters, + abortController.signal + ) : fetchDocuments(searchSource, fetchDeps); const fetchType = useTextbased && query ? 'fetchTextBased' : 'fetchDocuments'; const startTime = window.performance.now(); @@ -141,6 +149,10 @@ export function fetchAll( checkHitCount(dataSubjects.main$, records.length); }) + // In the case that the request was aborted (e.g. a refresh), swallow the abort error + .catch((e) => { + if (!abortController.signal.aborted) throw e; + }) // Only the document query should send its errors to main$, to cause the full Discover app // to get into an error state. The other queries will not cause all of Discover to error out // but their errors will be shown in-place (e.g. of the chart). diff --git a/src/plugins/discover/public/application/main/utils/fetch_text_based.ts b/src/plugins/discover/public/application/main/utils/fetch_text_based.ts index 6a164bfd8a5f8..a1aa14e47d79b 100644 --- a/src/plugins/discover/public/application/main/utils/fetch_text_based.ts +++ b/src/plugins/discover/public/application/main/utils/fetch_text_based.ts @@ -30,6 +30,7 @@ export function fetchTextBased( data: DataPublicPluginStart, expressions: ExpressionsStart, inspectorAdapters: Adapters, + abortSignal?: AbortSignal, filters?: Filter[], inputQuery?: Query ): Promise { @@ -43,9 +44,11 @@ export function fetchTextBased( }) .then((ast) => { if (ast) { - const execution = expressions.run(ast, null, { + const contract = expressions.execute(ast, null, { inspectorAdapters, }); + abortSignal?.addEventListener('abort', contract.cancel); + const execution = contract.getData(); let finalData: DataTableRecord[] = []; let textBasedQueryColumns: Datatable['columns'] | undefined; let error: string | undefined; diff --git a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx index 7e7bf727fe230..34f6043936d92 100644 --- a/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx @@ -331,6 +331,7 @@ export class SavedSearchEmbeddable this.services.data, this.services.expressions, this.services.inspector, + this.abortController.signal, this.input.filters, this.input.query ); diff --git a/src/plugins/event_annotation/common/content_management/index.ts b/src/plugins/event_annotation/common/content_management/index.ts index 821ff93f903d3..ef97fe7cdd25f 100644 --- a/src/plugins/event_annotation/common/content_management/index.ts +++ b/src/plugins/event_annotation/common/content_management/index.ts @@ -27,6 +27,7 @@ export type { EventAnnotationGroupSearchIn, EventAnnotationGroupSearchOut, EventAnnotationGroupSearchQuery, + EventAnnotationGroupCrudTypes, } from './latest'; export * as EventAnnotationGroupV1 from './v1'; diff --git a/src/plugins/event_annotation/common/content_management/v1/index.ts b/src/plugins/event_annotation/common/content_management/v1/index.ts index d05d743a199a8..178c49c51807f 100644 --- a/src/plugins/event_annotation/common/content_management/v1/index.ts +++ b/src/plugins/event_annotation/common/content_management/v1/index.ts @@ -23,5 +23,6 @@ export type { EventAnnotationGroupSearchIn, EventAnnotationGroupSearchOut, EventAnnotationGroupSearchQuery, + EventAnnotationGroupCrudTypes, Reference, } from './types'; diff --git a/src/plugins/event_annotation/common/content_management/v1/types.ts b/src/plugins/event_annotation/common/content_management/v1/types.ts index 5996a6f0db455..d85250e3883fa 100644 --- a/src/plugins/event_annotation/common/content_management/v1/types.ts +++ b/src/plugins/event_annotation/common/content_management/v1/types.ts @@ -18,6 +18,7 @@ import { CreateResult, UpdateResult, } from '@kbn/content-management-plugin/common'; +import { ContentManagementCrudTypes } from '@kbn/content-management-utils'; import type { DataViewSpec } from '@kbn/data-views-plugin/common'; import type { EventAnnotationConfig } from '@kbn/event-annotation-common'; @@ -125,3 +126,13 @@ export type EventAnnotationGroupSearchIn = SearchIn< >; export type EventAnnotationGroupSearchOut = SearchResult; + +// ----------- CRUD TYPES -------------- + +export type EventAnnotationGroupCrudTypes = ContentManagementCrudTypes< + EventAnnotationGroupContentType, + EventAnnotationGroupSavedObjectAttributes, + CreateOptions, + UpdateOptions, + {} +>; diff --git a/src/plugins/event_annotation/common/index.ts b/src/plugins/event_annotation/common/index.ts index 4389c4e7f4c89..f163108976ef6 100644 --- a/src/plugins/event_annotation/common/index.ts +++ b/src/plugins/event_annotation/common/index.ts @@ -37,6 +37,7 @@ export type { EventAnnotationGroupSearchOut, EventAnnotationGroupDeleteIn, EventAnnotationGroupDeleteOut, + EventAnnotationGroupCrudTypes, } from './content_management'; export { CONTENT_ID } from './content_management'; export { ANNOTATIONS_LISTING_VIEW_ID } from './constants'; diff --git a/src/plugins/event_annotation/server/content_management/event_annotation_group_storage.ts b/src/plugins/event_annotation/server/content_management/event_annotation_group_storage.ts index dcb25deb71140..49a5b516c1d24 100644 --- a/src/plugins/event_annotation/server/content_management/event_annotation_group_storage.ts +++ b/src/plugins/event_annotation/server/content_management/event_annotation_group_storage.ts @@ -5,336 +5,34 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - -import Boom from '@hapi/boom'; -import type { SearchQuery } from '@kbn/content-management-plugin/common'; -import type { ContentStorage, StorageContext } from '@kbn/content-management-plugin/server'; -import type { - SavedObject, - SavedObjectReference, - SavedObjectsFindOptions, -} from '@kbn/core-saved-objects-api-server'; - -import { getMSearch, type GetMSearchType } from '@kbn/content-management-utils'; +import { SOContentStorage } from '@kbn/content-management-utils'; import { EVENT_ANNOTATION_GROUP_TYPE } from '@kbn/event-annotation-common'; +import { Logger } from '@kbn/logging'; import { cmServicesDefinition } from '../../common/content_management/cm_services'; -import type { - EventAnnotationGroupSavedObjectAttributes, - EventAnnotationGroupSavedObject, - PartialEventAnnotationGroupSavedObject, - EventAnnotationGroupGetOut, - EventAnnotationGroupCreateIn, - EventAnnotationGroupCreateOut, - CreateOptions, - EventAnnotationGroupUpdateIn, - EventAnnotationGroupUpdateOut, - UpdateOptions, - EventAnnotationGroupDeleteOut, - EventAnnotationGroupSearchQuery, - EventAnnotationGroupSearchOut, -} from '../../common/content_management'; - -const savedObjectClientFromRequest = async (ctx: StorageContext) => { - if (!ctx.requestHandlerContext) { - throw new Error('Storage context.requestHandlerContext missing.'); - } - - const { savedObjects } = await ctx.requestHandlerContext.core; - return savedObjects.client; -}; - -type PartialSavedObject = Omit>, 'references'> & { - references: SavedObjectReference[] | undefined; -}; - -function savedObjectToEventAnnotationGroupSavedObject( - savedObject: SavedObject, - partial: false -): EventAnnotationGroupSavedObject; - -function savedObjectToEventAnnotationGroupSavedObject( - savedObject: PartialSavedObject, - partial: true -): PartialEventAnnotationGroupSavedObject; - -function savedObjectToEventAnnotationGroupSavedObject( - savedObject: - | SavedObject - | PartialSavedObject -): EventAnnotationGroupSavedObject | PartialEventAnnotationGroupSavedObject { - const { - id, - type, - updated_at: updatedAt, - created_at: createdAt, - attributes: { title, description, annotations, ignoreGlobalFilters, dataViewSpec }, - references, - error, - namespaces, - } = savedObject; - - return { - id, - type, - updatedAt, - createdAt, - attributes: { - title, - description, - annotations, - ignoreGlobalFilters, - dataViewSpec, - }, - references, - error, - namespaces, - }; -} - -const SO_TYPE = EVENT_ANNOTATION_GROUP_TYPE; - -export class EventAnnotationGroupStorage - implements - ContentStorage -{ - mSearch: GetMSearchType; - constructor() { - this.mSearch = getMSearch({ - savedObjectType: SO_TYPE, +import type { EventAnnotationGroupCrudTypes } from '../../common/content_management'; + +export class EventAnnotationGroupStorage extends SOContentStorage { + constructor({ + logger, + throwOnResultValidationError, + }: { + logger: Logger; + throwOnResultValidationError: boolean; + }) { + super({ + savedObjectType: EVENT_ANNOTATION_GROUP_TYPE, cmServicesDefinition, + enableMSearch: true, allowedSavedObjectAttributes: [ 'title', 'description', - 'ignoreGlobalFilters', 'annotations', + 'ignoreGlobalFilters', 'dataViewSpec', ], + logger, + throwOnResultValidationError, }); } - - async get(ctx: StorageContext, id: string): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - const { - saved_object: savedObject, - alias_purpose: aliasPurpose, - alias_target_id: aliasTargetId, - outcome, - } = await soClient.resolve(SO_TYPE, id); - - const response: EventAnnotationGroupGetOut = { - item: savedObjectToEventAnnotationGroupSavedObject(savedObject, false), - meta: { - aliasPurpose, - aliasTargetId, - outcome, - }, - }; - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.get.out.result.down< - EventAnnotationGroupGetOut, - EventAnnotationGroupGetOut - >(response); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async bulkGet(): Promise { - // Not implemented. EventAnnotationGroup does not use bulkGet - throw new Error(`[bulkGet] has not been implemented. See EventAnnotationGroupStorage class.`); - } - - async create( - ctx: StorageContext, - data: EventAnnotationGroupCreateIn['data'], - options: CreateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.create.in.data.up< - EventAnnotationGroupSavedObjectAttributes, - EventAnnotationGroupSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.create.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const savedObject = await soClient.create( - SO_TYPE, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.create.out.result.down< - EventAnnotationGroupCreateOut, - EventAnnotationGroupCreateOut - >({ - item: savedObjectToEventAnnotationGroupSavedObject(savedObject, false), - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async update( - ctx: StorageContext, - id: string, - data: EventAnnotationGroupUpdateIn['data'], - options: UpdateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.update.in.data.up< - EventAnnotationGroupSavedObjectAttributes, - EventAnnotationGroupSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.update.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const partialSavedObject = await soClient.update( - SO_TYPE, - id, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.update.out.result.down< - EventAnnotationGroupUpdateOut, - EventAnnotationGroupUpdateOut - >({ - item: savedObjectToEventAnnotationGroupSavedObject(partialSavedObject, true), - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async delete(ctx: StorageContext, id: string): Promise { - const soClient = await savedObjectClientFromRequest(ctx); - await soClient.delete(SO_TYPE, id); - return { success: true }; - } - - async search( - ctx: StorageContext, - query: SearchQuery, - options: EventAnnotationGroupSearchQuery = {} - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - // Validate and UP transform the options - const { value: optionsToLatest, error: optionsError } = transforms.search.in.options.up< - EventAnnotationGroupSearchQuery, - EventAnnotationGroupSearchQuery - >(options); - - if (optionsError) { - throw Boom.badRequest(`Invalid payload. ${optionsError.message}`); - } - - const { searchFields = ['title^3', 'description'], types = [SO_TYPE] } = optionsToLatest; - - const { included, excluded } = query.tags ?? {}; - const hasReference: SavedObjectsFindOptions['hasReference'] = included - ? included.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const hasNoReference: SavedObjectsFindOptions['hasNoReference'] = excluded - ? excluded.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const soQuery: SavedObjectsFindOptions = { - type: types, - search: query.text, - perPage: query.limit, - page: query.cursor ? Number(query.cursor) : undefined, - defaultSearchOperator: 'AND', - searchFields, - hasReference, - hasNoReference, - }; - - // Execute the query in the DB - const response = await soClient.find(soQuery); - - // Validate the response and DOWN transform to the request version - const { value, error: resultError } = transforms.search.out.result.down< - EventAnnotationGroupSearchOut, - EventAnnotationGroupSearchOut - >({ - hits: response.saved_objects.map((so) => - savedObjectToEventAnnotationGroupSavedObject(so, false) - ), - pagination: { - total: response.total, - }, - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } } diff --git a/src/plugins/event_annotation/server/index.ts b/src/plugins/event_annotation/server/index.ts index d9d13045ed10a..84fecda35d4f1 100644 --- a/src/plugins/event_annotation/server/index.ts +++ b/src/plugins/event_annotation/server/index.ts @@ -6,5 +6,8 @@ * Side Public License, v 1. */ +import { PluginInitializerContext } from '@kbn/core-plugins-server'; import { EventAnnotationServerPlugin } from './plugin'; -export const plugin = () => new EventAnnotationServerPlugin(); + +export const plugin = (initializerContext: PluginInitializerContext) => + new EventAnnotationServerPlugin(initializerContext); diff --git a/src/plugins/event_annotation/server/plugin.ts b/src/plugins/event_annotation/server/plugin.ts index 8cd24f8938466..cdf514228adb3 100644 --- a/src/plugins/event_annotation/server/plugin.ts +++ b/src/plugins/event_annotation/server/plugin.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { CoreSetup, Plugin } from '@kbn/core/server'; +import { CoreSetup, Plugin, PluginInitializerContext } from '@kbn/core/server'; import { ExpressionsServerSetup } from '@kbn/expressions-plugin/server'; import { PluginStart as DataPluginStart } from '@kbn/data-plugin/server'; import { ContentManagementServerSetup } from '@kbn/content-management-plugin/server'; @@ -29,6 +29,8 @@ export interface EventAnnotationStartDependencies { } export class EventAnnotationServerPlugin implements Plugin { + constructor(private readonly initializerContext: PluginInitializerContext) {} + public setup( core: CoreSetup, dependencies: SetupDependencies @@ -42,7 +44,10 @@ export class EventAnnotationServerPlugin implements Plugin { dependencies.contentManagement.register({ id: CONTENT_ID, - storage: new EventAnnotationGroupStorage(), + storage: new EventAnnotationGroupStorage({ + throwOnResultValidationError: this.initializerContext.env.mode.dev, + logger: this.initializerContext.logger.get(), + }), version: { latest: LATEST_VERSION, }, diff --git a/src/plugins/event_annotation/tsconfig.json b/src/plugins/event_annotation/tsconfig.json index c57bb18e0e19f..d115df48e8967 100644 --- a/src/plugins/event_annotation/tsconfig.json +++ b/src/plugins/event_annotation/tsconfig.json @@ -31,10 +31,11 @@ "@kbn/object-versioning", "@kbn/config-schema", "@kbn/content-management-plugin", - "@kbn/core-saved-objects-api-server", "@kbn/event-annotation-components", "@kbn/event-annotation-common", - "@kbn/content-management-utils" + "@kbn/content-management-utils", + "@kbn/logging", + "@kbn/core-plugins-server" ], "exclude": [ "target/**/*", diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx index 8749f9764fe74..ac84eaae8119a 100644 --- a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx @@ -34,7 +34,7 @@ export function ShardFailureFlyout({ failures, onClose }: Props) { {i18n.translate('inspector.requests.clusters.shards.flyoutTitle', { defaultMessage: - '{failedShardCount} failured {failedShardCount, plural, one {shard} other {shards}}', + '{failedShardCount} failed {failedShardCount, plural, one {shard} other {shards}}', values: { failedShardCount: failures.length }, })} diff --git a/src/plugins/kibana_react/public/index.ts b/src/plugins/kibana_react/public/index.ts index 7954559206bb7..2803c266da0f4 100644 --- a/src/plugins/kibana_react/public/index.ts +++ b/src/plugins/kibana_react/public/index.ts @@ -76,7 +76,7 @@ export { createNotifications } from './notifications'; /** @deprecated use `Markdown` from `@kbn/shared-ux-markdown` */ export { Markdown, MarkdownSimple } from './markdown'; -export { toMountPoint, MountPointPortal } from './util'; +export { toMountPoint } from './util'; export type { ToMountPointOptions } from './util'; /** @deprecated Use `RedirectAppLinks` from `@kbn/shared-ux-link-redirect-app` */ diff --git a/src/plugins/kibana_react/public/util/index.tsx b/src/plugins/kibana_react/public/util/index.tsx index ab2ce5a5a81c8..d709f06837c0c 100644 --- a/src/plugins/kibana_react/public/util/index.tsx +++ b/src/plugins/kibana_react/public/util/index.tsx @@ -15,11 +15,7 @@ import type { I18nStart } from '@kbn/core-i18n-browser'; import type { CoreTheme, ThemeServiceStart } from '@kbn/core-theme-browser'; import { defaultTheme } from '@kbn/react-kibana-context-common'; -import { - toMountPoint as _toMountPoint, - MountPointPortal as _MountPointPortal, - useIfMounted as _useIfMounted, -} from '@kbn/react-kibana-mount'; +import { toMountPoint as _toMountPoint } from '@kbn/react-kibana-mount'; // The `theme` start contract should always be included to ensure // dark mode is applied correctly. This code is for compatibility purposes, @@ -52,13 +48,3 @@ export const toMountPoint = ( const theme = theme$ ? { theme$ } : themeStart; return _toMountPoint(node, { theme, i18n }); }; - -/** - * @deprecated use `MountPointPortal` from `@kbn/react-kibana-mount` - */ -export const MountPointPortal = _MountPointPortal; - -/** - * @deprecated use `useIfMounted` from `@kbn/react-kibana-mount` - */ -export const useIfMounted = _useIfMounted; diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/fetch_all_saved_objects.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/fetch_all_saved_objects.ts deleted file mode 100644 index 261b1dc0adb00..0000000000000 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/fetch_all_saved_objects.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { - ISavedObjectsRepository, - SavedObjectsCreatePointInTimeFinderOptions, - SavedObjectsFindResult, -} from '@kbn/core/server'; - -export async function fetchAllSavedObjects( - soRepository: ISavedObjectsRepository, - findOptions: SavedObjectsCreatePointInTimeFinderOptions -): Promise>> { - const finder = soRepository.createPointInTimeFinder({ ...findOptions, perPage: 1000 }); - - const allSavedObjects: Array> = []; - - for await (const { saved_objects: savedObjects } of finder.find()) { - allSavedObjects.push(...savedObjects); - } - - return allSavedObjects; -} diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.test.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.test.ts index e5dd0996e440d..251fc15b8e2c9 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.test.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.test.ts @@ -177,18 +177,11 @@ describe('rollTotals', () => { ], { overwrite: true } ); - expect(savedObjectClient.delete).toHaveBeenCalledTimes(3); - expect(savedObjectClient.delete).toHaveBeenCalledWith( - SAVED_OBJECTS_DAILY_TYPE, - 'appId-2:2020-01-01' - ); - expect(savedObjectClient.delete).toHaveBeenCalledWith( - SAVED_OBJECTS_DAILY_TYPE, - 'appId-1:2020-01-01' - ); - expect(savedObjectClient.delete).toHaveBeenCalledWith( - SAVED_OBJECTS_DAILY_TYPE, - 'appId-1:2020-01-01:viewId-1' - ); + expect(savedObjectClient.bulkDelete).toHaveBeenCalledTimes(1); + expect(savedObjectClient.bulkDelete).toHaveBeenCalledWith([ + { type: SAVED_OBJECTS_DAILY_TYPE, id: 'appId-2:2020-01-01' }, + { type: SAVED_OBJECTS_DAILY_TYPE, id: 'appId-1:2020-01-01' }, + { type: SAVED_OBJECTS_DAILY_TYPE, id: 'appId-1:2020-01-01:viewId-1' }, + ]); }); }); diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.ts index 8487c0ea8418e..80afa4e08bcc6 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/application_usage/rollups/total.ts @@ -16,7 +16,6 @@ import { SAVED_OBJECTS_TOTAL_TYPE, } from '../saved_objects_types'; import { serializeKey } from './utils'; -import { fetchAllSavedObjects } from '../fetch_all_saved_objects'; /** * Moves all the daily documents into aggregated "total" documents as we don't care about any granularity after 90 days @@ -29,56 +28,56 @@ export async function rollTotals(logger: Logger, savedObjectsClient?: ISavedObje } try { - const [rawApplicationUsageTotals, rawApplicationUsageDaily] = await Promise.all([ - fetchAllSavedObjects(savedObjectsClient, { - type: SAVED_OBJECTS_TOTAL_TYPE, - }), - fetchAllSavedObjects(savedObjectsClient, { - type: SAVED_OBJECTS_DAILY_TYPE, - filter: `${SAVED_OBJECTS_DAILY_TYPE}.attributes.timestamp < now-90d`, - }), - ]); + const usageTotalsFinder = savedObjectsClient.createPointInTimeFinder({ + type: SAVED_OBJECTS_TOTAL_TYPE, + perPage: 200, + }); + const existingTotals: Record< + string, + { appId: string; viewId: string; minutesOnScreen: number; numberOfClicks: number } + > = {}; + for await (const { saved_objects: savedObjects } of usageTotalsFinder.find()) { + for (const savedObject of savedObjects) { + const { + appId, + viewId = MAIN_APP_DEFAULT_VIEW_ID, + numberOfClicks, + minutesOnScreen, + } = savedObject.attributes; - const existingTotals = rawApplicationUsageTotals.reduce( - ( - acc, - { - attributes: { appId, viewId = MAIN_APP_DEFAULT_VIEW_ID, numberOfClicks, minutesOnScreen }, - } - ) => { const key = viewId === MAIN_APP_DEFAULT_VIEW_ID ? appId : serializeKey(appId, viewId); - // No need to sum because there should be 1 document per appId only - acc[key] = { appId, viewId, numberOfClicks, minutesOnScreen }; - return acc; - }, - {} as Record< - string, - { appId: string; viewId: string; minutesOnScreen: number; numberOfClicks: number } - > - ); + existingTotals[key] = { appId, viewId, numberOfClicks, minutesOnScreen }; + } + } - const totals = rawApplicationUsageDaily.reduce( - (acc, { attributes }) => { + const usageDailyFinder = savedObjectsClient.createPointInTimeFinder({ + type: SAVED_OBJECTS_DAILY_TYPE, + filter: `${SAVED_OBJECTS_DAILY_TYPE}.attributes.timestamp < now-90d`, + perPage: 200, + }); + const totals = { ...existingTotals }; + const usageDailyIdsToDelete: string[] = []; + for await (const { saved_objects: savedObjects } of usageDailyFinder.find()) { + for (const savedObject of savedObjects) { const { appId, viewId = MAIN_APP_DEFAULT_VIEW_ID, numberOfClicks, minutesOnScreen, - } = attributes; + } = savedObject.attributes; const key = viewId === MAIN_APP_DEFAULT_VIEW_ID ? appId : serializeKey(appId, viewId); - const existing = acc[key] || { minutesOnScreen: 0, numberOfClicks: 0 }; + const existing = totals[key] || { minutesOnScreen: 0, numberOfClicks: 0 }; - acc[key] = { + totals[key] = { appId, viewId, numberOfClicks: numberOfClicks + existing.numberOfClicks, minutesOnScreen: minutesOnScreen + existing.minutesOnScreen, }; - return acc; - }, - { ...existingTotals } - ); + usageDailyIdsToDelete.push(savedObject.id); + } + } await Promise.all([ Object.entries(totals).length && @@ -90,8 +89,8 @@ export async function rollTotals(logger: Logger, savedObjectsClient?: ISavedObje })), { overwrite: true } ), - ...rawApplicationUsageDaily.map( - ({ id }) => savedObjectsClient.delete(SAVED_OBJECTS_DAILY_TYPE, id) // There is no bulkDelete :( + savedObjectsClient.bulkDelete( + usageDailyIdsToDelete.map((id) => ({ id, type: SAVED_OBJECTS_DAILY_TYPE })) ), ]); } catch (err) { diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/telemetry_application_usage_collector.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/telemetry_application_usage_collector.ts index b689582ee2b72..16ddf9c2a9e26 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/telemetry_application_usage_collector.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/application_usage/telemetry_application_usage_collector.ts @@ -22,7 +22,6 @@ import { applicationUsageSchema } from './schema'; import { rollTotals, serializeKey } from './rollups'; import { ROLL_TOTAL_INDICES_INTERVAL, ROLL_INDICES_START } from './constants'; import type { ApplicationUsageTelemetryReport, ApplicationUsageViews } from './types'; -import { fetchAllSavedObjects } from './fetch_all_saved_objects'; export const transformByApplicationViews = ( report: ApplicationUsageViews @@ -68,29 +67,27 @@ export function registerApplicationUsageCollector( if (typeof savedObjectsClient === 'undefined') { return; } - const [rawApplicationUsageTotals, rawApplicationUsageDaily] = await Promise.all([ - fetchAllSavedObjects(savedObjectsClient, { + + const usageTotalsFinder = savedObjectsClient.createPointInTimeFinder( + { type: SAVED_OBJECTS_TOTAL_TYPE, - }), - fetchAllSavedObjects(savedObjectsClient, { - type: SAVED_OBJECTS_DAILY_TYPE, - }), - ]); - - const applicationUsageFromTotals = rawApplicationUsageTotals.reduce( - ( - acc, - { - attributes: { - appId, - viewId = MAIN_APP_DEFAULT_VIEW_ID, - minutesOnScreen, - numberOfClicks, - }, - } - ) => { - const existing = acc[appId] || { clicks_total: 0, minutes_on_screen_total: 0 }; - acc[serializeKey(appId, viewId)] = { + perPage: 200, + } + ); + const applicationUsageFromTotals: ApplicationUsageTelemetryReport = {}; + for await (const { saved_objects: savedObjects } of usageTotalsFinder.find()) { + for (const savedObject of savedObjects) { + const { + appId, + viewId = MAIN_APP_DEFAULT_VIEW_ID, + minutesOnScreen, + numberOfClicks, + } = savedObject.attributes; + const existing = applicationUsageFromTotals[appId] || { + clicks_total: 0, + minutes_on_screen_total: 0, + }; + applicationUsageFromTotals[serializeKey(appId, viewId)] = { appId, viewId, clicks_total: numberOfClicks + existing.clicks_total, @@ -102,28 +99,28 @@ export function registerApplicationUsageCollector( minutes_on_screen_30_days: 0, minutes_on_screen_90_days: 0, }; - return acc; - }, - {} as ApplicationUsageTelemetryReport - ); + } + } + const nowMinus7 = moment().subtract(7, 'days'); const nowMinus30 = moment().subtract(30, 'days'); const nowMinus90 = moment().subtract(90, 'days'); - const applicationUsage = rawApplicationUsageDaily.reduce( - ( - acc, - { - attributes: { - appId, - viewId = MAIN_APP_DEFAULT_VIEW_ID, - minutesOnScreen, - numberOfClicks, - timestamp, - }, - } - ) => { - const existing = acc[serializeKey(appId, viewId)] || { + const usageDailyFinder = savedObjectsClient.createPointInTimeFinder({ + type: SAVED_OBJECTS_DAILY_TYPE, + perPage: 200, + }); + const applicationUsage = { ...applicationUsageFromTotals }; + for await (const { saved_objects: savedObjects } of usageDailyFinder.find()) { + for (const savedObject of savedObjects) { + const { + appId, + viewId = MAIN_APP_DEFAULT_VIEW_ID, + minutesOnScreen, + numberOfClicks, + timestamp, + } = savedObject.attributes; + const existing = applicationUsage[serializeKey(appId, viewId)] || { appId, viewId, clicks_total: 0, @@ -154,7 +151,7 @@ export function registerApplicationUsageCollector( minutes_on_screen_90_days: existing.minutes_on_screen_90_days + minutesOnScreen, }; - acc[serializeKey(appId, viewId)] = { + applicationUsage[serializeKey(appId, viewId)] = { ...existing, clicks_total: existing.clicks_total + numberOfClicks, minutes_on_screen_total: existing.minutes_on_screen_total + minutesOnScreen, @@ -162,10 +159,8 @@ export function registerApplicationUsageCollector( ...(isInLast30Days ? last30Days : {}), ...(isInLast90Days ? last90Days : {}), }; - return acc; - }, - applicationUsageFromTotals - ); + } + } return transformByApplicationViews(applicationUsage); }, diff --git a/src/plugins/navigation/kibana.jsonc b/src/plugins/navigation/kibana.jsonc index 90ced649980a5..26edb0999699d 100644 --- a/src/plugins/navigation/kibana.jsonc +++ b/src/plugins/navigation/kibana.jsonc @@ -6,11 +6,7 @@ "id": "navigation", "server": false, "browser": true, - "requiredPlugins": [ - "unifiedSearch" - ], - "requiredBundles": [ - "kibanaReact" - ] + "requiredPlugins": ["unifiedSearch"], + "requiredBundles": [] } } diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx index 3b3cac7921813..de060db9b6e3b 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx @@ -18,7 +18,7 @@ import { import classNames from 'classnames'; import { MountPoint } from '@kbn/core/public'; -import { MountPointPortal } from '@kbn/kibana-react-plugin/public'; +import { MountPointPortal } from '@kbn/react-kibana-mount'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { StatefulSearchBarProps } from '@kbn/unified-search-plugin/public'; import { AggregateQuery, Query } from '@kbn/es-query'; @@ -138,14 +138,19 @@ export function TopNavMenu( 'kbnTopNavMenu__wrapper--hidden': visible === false, }); if (setMenuMountPoint) { + const badgesEl = renderBadges(); + const menuEl = renderMenu(menuClassName); return ( <> - - - {renderBadges()} - {renderMenu(menuClassName)} - - + {(badgesEl || menuEl) && ( + + + {badgesEl} + {menuEl} + + + )} + {renderSearchBar()} ); diff --git a/src/plugins/navigation/tsconfig.json b/src/plugins/navigation/tsconfig.json index b23ee2de840eb..d10df84c43f8b 100644 --- a/src/plugins/navigation/tsconfig.json +++ b/src/plugins/navigation/tsconfig.json @@ -6,11 +6,11 @@ "include": ["public/**/*"], "kbn_references": [ "@kbn/core", - "@kbn/kibana-react-plugin", "@kbn/unified-search-plugin", "@kbn/es-query", "@kbn/i18n-react", "@kbn/test-jest-helpers", + "@kbn/react-kibana-mount", ], "exclude": [ "target/**/*", diff --git a/src/plugins/saved_objects_management/server/lib/find_all.test.ts b/src/plugins/saved_objects_management/server/lib/find_all.test.ts deleted file mode 100644 index 13135ce41b06e..0000000000000 --- a/src/plugins/saved_objects_management/server/lib/find_all.test.ts +++ /dev/null @@ -1,99 +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 { times } from 'lodash'; -import { SavedObjectsFindOptions, SavedObjectsFindResult } from '@kbn/core/server'; -import { savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { findAll } from './find_all'; - -describe('findAll', () => { - let savedObjectsClient: ReturnType; - - const createObj = (id: number): SavedObjectsFindResult => ({ - type: 'type', - id: `id-${id}`, - attributes: {}, - score: 1, - references: [], - }); - - beforeEach(() => { - savedObjectsClient = savedObjectsClientMock.create(); - }); - - it('calls `client.createPointInTimeFinder` with the correct parameters', async () => { - const query: SavedObjectsFindOptions = { - type: ['some-type', 'another-type'], - }; - - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [], - total: 1, - per_page: 20, - page: 1, - }); - - await findAll(savedObjectsClient, query); - - expect(savedObjectsClient.createPointInTimeFinder).toHaveBeenCalledTimes(1); - expect(savedObjectsClient.createPointInTimeFinder).toHaveBeenCalledWith(query); - }); - - it('returns the results from the PIT search', async () => { - const query: SavedObjectsFindOptions = { - type: ['some-type', 'another-type'], - }; - - savedObjectsClient.find.mockResolvedValue({ - saved_objects: [createObj(1), createObj(2)], - total: 1, - per_page: 20, - page: 1, - }); - - const results = await findAll(savedObjectsClient, query); - - expect(savedObjectsClient.find).toHaveBeenCalledTimes(1); - expect(savedObjectsClient.find).toHaveBeenCalledWith( - expect.objectContaining({ - ...query, - }), - undefined // internalOptions - ); - - expect(results).toEqual([createObj(1), createObj(2)]); - }); - - it('works when the PIT search returns multiple batches', async () => { - const query: SavedObjectsFindOptions = { - type: ['some-type', 'another-type'], - perPage: 2, - }; - const objPerPage = 2; - - let callCount = 0; - savedObjectsClient.find.mockImplementation(({}) => { - callCount++; - const firstInPage = (callCount - 1) * objPerPage + 1; - return Promise.resolve({ - saved_objects: - callCount > 3 - ? [createObj(firstInPage)] - : [createObj(firstInPage), createObj(firstInPage + 1)], - total: objPerPage * 3, - per_page: objPerPage, - page: callCount!, - }); - }); - - const results = await findAll(savedObjectsClient, query); - - expect(savedObjectsClient.find).toHaveBeenCalledTimes(4); - expect(results).toEqual(times(7, (num) => createObj(num + 1))); - }); -}); diff --git a/src/plugins/saved_objects_management/server/lib/find_all.ts b/src/plugins/saved_objects_management/server/lib/find_all.ts deleted file mode 100644 index bb27bbd3765ef..0000000000000 --- a/src/plugins/saved_objects_management/server/lib/find_all.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 { - SavedObjectsClientContract, - SavedObject, - SavedObjectsCreatePointInTimeFinderOptions, -} from '@kbn/core/server'; - -export const findAll = async ( - client: SavedObjectsClientContract, - findOptions: SavedObjectsCreatePointInTimeFinderOptions -): Promise => { - const finder = client.createPointInTimeFinder(findOptions); - const results: SavedObject[] = []; - for await (const result of finder.find()) { - results.push(...result.saved_objects); - } - return results; -}; diff --git a/src/plugins/saved_objects_management/server/lib/index.ts b/src/plugins/saved_objects_management/server/lib/index.ts index 9ee181246075c..0038152891b7c 100644 --- a/src/plugins/saved_objects_management/server/lib/index.ts +++ b/src/plugins/saved_objects_management/server/lib/index.ts @@ -8,5 +8,4 @@ export { toSavedObjectWithMeta } from './to_saved_object_with_meta'; export { injectMetaAttributes } from './inject_meta_attributes'; -export { findAll } from './find_all'; export { findRelationships } from './find_relationships'; diff --git a/src/plugins/saved_objects_management/server/routes/scroll_count.ts b/src/plugins/saved_objects_management/server/routes/scroll_count.ts index 210bb3b27c67f..d5649572ccbed 100644 --- a/src/plugins/saved_objects_management/server/routes/scroll_count.ts +++ b/src/plugins/saved_objects_management/server/routes/scroll_count.ts @@ -10,7 +10,6 @@ import { schema } from '@kbn/config-schema'; import type { IRouter, SavedObjectsCreatePointInTimeFinderOptions } from '@kbn/core/server'; import { chain } from 'lodash'; import type { v1 } from '../../common'; -import { findAll } from '../lib'; export const registerScrollForCountRoute = (router: IRouter) => { router.post( @@ -45,7 +44,7 @@ export const registerScrollForCountRoute = (router: IRouter) => { const client = getClient({ includedHiddenTypes }); const findOptions: SavedObjectsCreatePointInTimeFinderOptions = { type: typesToInclude, - perPage: 1000, + perPage: 500, }; if (searchString) { findOptions.search = `${searchString}*`; @@ -56,18 +55,15 @@ export const registerScrollForCountRoute = (router: IRouter) => { findOptions.hasReferenceOperator = 'OR'; } - const objects = await findAll(client, findOptions); - - const counts = objects.reduce((accum, result) => { - const type = result.type; - accum[type] = accum[type] || 0; - accum[type]++; - return accum; - }, {} as Record); - + const counts: Record = {}; for (const type of typesToInclude) { - if (!counts[type]) { - counts[type] = 0; + counts[type] = 0; + } + + const finder = client.createPointInTimeFinder(findOptions); + for await (const { saved_objects: savedObjects } of finder.find()) { + for (const { type } of savedObjects) { + counts[type]++; } } diff --git a/src/plugins/visualizations/common/content_management/index.ts b/src/plugins/visualizations/common/content_management/index.ts index 15cff0d86c7c9..ebdd647c181d4 100644 --- a/src/plugins/visualizations/common/content_management/index.ts +++ b/src/plugins/visualizations/common/content_management/index.ts @@ -27,6 +27,7 @@ export type { VisualizationSearchIn, VisualizationSearchOut, VisualizationSearchQuery, + VisualizationCrudTypes, } from './latest'; export * as VisualizationV1 from './v1'; diff --git a/src/plugins/visualizations/common/content_management/v1/index.ts b/src/plugins/visualizations/common/content_management/v1/index.ts index 14e9f7c986995..e15eb0f46fef1 100644 --- a/src/plugins/visualizations/common/content_management/v1/index.ts +++ b/src/plugins/visualizations/common/content_management/v1/index.ts @@ -23,5 +23,6 @@ export type { VisualizationSearchIn, VisualizationSearchOut, VisualizationSearchQuery, + VisualizationCrudTypes, Reference, } from './types'; diff --git a/src/plugins/visualizations/common/content_management/v1/types.ts b/src/plugins/visualizations/common/content_management/v1/types.ts index c0961341c436b..a1e5bd6a1aba5 100644 --- a/src/plugins/visualizations/common/content_management/v1/types.ts +++ b/src/plugins/visualizations/common/content_management/v1/types.ts @@ -18,6 +18,7 @@ import { CreateResult, UpdateResult, } from '@kbn/content-management-plugin/common'; +import { ContentManagementCrudTypes } from '@kbn/content-management-utils'; import { VisualizationContentType } from '../types'; @@ -127,3 +128,13 @@ export interface VisualizationSearchQuery { export type VisualizationSearchIn = SearchIn; export type VisualizationSearchOut = SearchResult; + +// ----------- CRUD TYPES -------------- + +export type VisualizationCrudTypes = ContentManagementCrudTypes< + VisualizationContentType, + VisualizationSavedObjectAttributes, + CreateOptions, + UpdateOptions, + {} +>; diff --git a/src/plugins/visualizations/server/content_management/visualization_storage.ts b/src/plugins/visualizations/server/content_management/visualization_storage.ts index 5b5e99a7132aa..17a3e73b51479 100644 --- a/src/plugins/visualizations/server/content_management/visualization_storage.ts +++ b/src/plugins/visualizations/server/content_management/visualization_storage.ts @@ -5,343 +5,41 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import Boom from '@hapi/boom'; -import type { SearchQuery } from '@kbn/content-management-plugin/common'; -import type { ContentStorage, StorageContext } from '@kbn/content-management-plugin/server'; -import type { - SavedObject, - SavedObjectReference, - SavedObjectsFindOptions, -} from '@kbn/core-saved-objects-api-server'; -import { getMSearch, type GetMSearchType } from '@kbn/content-management-utils'; +import { SOContentStorage } from '@kbn/content-management-utils'; -import { CONTENT_ID } from '../../common/content_management'; +import { Logger } from '@kbn/logging'; import { cmServicesDefinition } from '../../common/content_management/cm_services'; import type { - VisualizationSavedObjectAttributes, - VisualizationSavedObject, - PartialVisualizationSavedObject, VisualizationContentType, - VisualizationGetOut, - VisualizationCreateIn, - VisualizationCreateOut, - CreateOptions, - VisualizationUpdateIn, - VisualizationUpdateOut, - UpdateOptions, - VisualizationDeleteOut, - VisualizationSearchQuery, - VisualizationSearchOut, + VisualizationCrudTypes, } from '../../common/content_management'; -const savedObjectClientFromRequest = async (ctx: StorageContext) => { - if (!ctx.requestHandlerContext) { - throw new Error('Storage context.requestHandlerContext missing.'); - } - - const { savedObjects } = await ctx.requestHandlerContext.core; - return savedObjects.client; -}; - -type PartialSavedObject = Omit>, 'references'> & { - references: SavedObjectReference[] | undefined; -}; - -function savedObjectToVisualizationSavedObject( - savedObject: SavedObject, - partial: false -): VisualizationSavedObject; - -function savedObjectToVisualizationSavedObject( - savedObject: PartialSavedObject, - partial: true -): PartialVisualizationSavedObject; - -function savedObjectToVisualizationSavedObject( - savedObject: - | SavedObject - | PartialSavedObject -): VisualizationSavedObject | PartialVisualizationSavedObject { - const { - id, - type, - updated_at: updatedAt, - created_at: createdAt, - attributes: { - title, - description, - visState, - kibanaSavedObjectMeta, - uiStateJSON, - savedSearchRefName, - }, - references, - error, - namespaces, - } = savedObject; - - return { - id, - type, - updatedAt, - createdAt, - attributes: { - title, - description, - visState, - kibanaSavedObjectMeta, - uiStateJSON, - savedSearchRefName, - }, - references, - error, - namespaces, - }; -} - const SO_TYPE: VisualizationContentType = 'visualization'; -export class VisualizationsStorage - implements ContentStorage -{ - mSearch: GetMSearchType; - - constructor() { - this.mSearch = getMSearch({ +export class VisualizationsStorage extends SOContentStorage { + constructor({ + logger, + throwOnResultValidationError, + }: { + logger: Logger; + throwOnResultValidationError: boolean; + }) { + super({ savedObjectType: SO_TYPE, cmServicesDefinition, + enableMSearch: true, allowedSavedObjectAttributes: [ 'title', 'description', 'version', + 'visState', 'kibanaSavedObjectMeta', 'uiStateJSON', - 'visState', 'savedSearchRefName', ], + logger, + throwOnResultValidationError, }); } - - async get(ctx: StorageContext, id: string): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - // Save data in DB - const { - saved_object: savedObject, - alias_purpose: aliasPurpose, - alias_target_id: aliasTargetId, - outcome, - } = await soClient.resolve(SO_TYPE, id); - - const response: VisualizationGetOut = { - item: savedObjectToVisualizationSavedObject(savedObject, false), - meta: { - aliasPurpose, - aliasTargetId, - outcome, - }, - }; - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.get.out.result.down< - VisualizationGetOut, - VisualizationGetOut - >(response); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async bulkGet(): Promise { - // Not implemented. Visualizations does not use bulkGet - throw new Error(`[bulkGet] has not been implemented. See VisualizationsStorage class.`); - } - - async create( - ctx: StorageContext, - data: VisualizationCreateIn['data'], - options: CreateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.create.in.data.up< - VisualizationSavedObjectAttributes, - VisualizationSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.create.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const savedObject = await soClient.create( - SO_TYPE, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.create.out.result.down< - VisualizationCreateOut, - VisualizationCreateOut - >({ - item: savedObjectToVisualizationSavedObject(savedObject, false), - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async update( - ctx: StorageContext, - id: string, - data: VisualizationUpdateIn['data'], - options: UpdateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.update.in.data.up< - VisualizationSavedObjectAttributes, - VisualizationSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.update.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const partialSavedObject = await soClient.update( - SO_TYPE, - id, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.update.out.result.down< - VisualizationUpdateOut, - VisualizationUpdateOut - >({ - item: savedObjectToVisualizationSavedObject(partialSavedObject, true), - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async delete(ctx: StorageContext, id: string): Promise { - const soClient = await savedObjectClientFromRequest(ctx); - await soClient.delete(SO_TYPE, id); - return { success: true }; - } - - async search( - ctx: StorageContext, - query: SearchQuery, - options: VisualizationSearchQuery = {} - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - // Validate and UP transform the options - const { value: optionsToLatest, error: optionsError } = transforms.search.in.options.up< - VisualizationSearchQuery, - VisualizationSearchQuery - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid payload. ${optionsError.message}`); - } - const { searchFields = ['title^3', 'description'], types = [CONTENT_ID] } = optionsToLatest; - - const { included, excluded } = query.tags ?? {}; - const hasReference: SavedObjectsFindOptions['hasReference'] = included - ? included.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const hasNoReference: SavedObjectsFindOptions['hasNoReference'] = excluded - ? excluded.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const soQuery: SavedObjectsFindOptions = { - type: types, - search: query.text, - perPage: query.limit, - page: query.cursor ? +query.cursor : undefined, - defaultSearchOperator: 'AND', - searchFields, - hasReference, - hasNoReference, - }; - - // Execute the query in the DB - const response = await soClient.find(soQuery); - - // Validate the response and DOWN transform to the request version - const { value, error: resultError } = transforms.search.out.result.down< - VisualizationSearchOut, - VisualizationSearchOut - >({ - hits: response.saved_objects.map((so) => savedObjectToVisualizationSavedObject(so, false)), - pagination: { - total: response.total, - }, - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } } diff --git a/src/plugins/visualizations/server/plugin.ts b/src/plugins/visualizations/server/plugin.ts index 6aa4a749ecb7a..fd8a0dbe2cba5 100644 --- a/src/plugins/visualizations/server/plugin.ts +++ b/src/plugins/visualizations/server/plugin.ts @@ -29,7 +29,7 @@ export class VisualizationsPlugin { private readonly logger: Logger; - constructor(initializerContext: PluginInitializerContext) { + constructor(private readonly initializerContext: PluginInitializerContext) { this.logger = initializerContext.logger.get(); } @@ -55,7 +55,10 @@ export class VisualizationsPlugin plugins.contentManagement.register({ id: CONTENT_ID, - storage: new VisualizationsStorage(), + storage: new VisualizationsStorage({ + logger: this.logger, + throwOnResultValidationError: this.initializerContext.env.mode.dev, + }), version: { latest: LATEST_VERSION, }, diff --git a/src/plugins/visualizations/tsconfig.json b/src/plugins/visualizations/tsconfig.json index a835f3151c60c..b428e361d1985 100644 --- a/src/plugins/visualizations/tsconfig.json +++ b/src/plugins/visualizations/tsconfig.json @@ -54,7 +54,6 @@ "@kbn/saved-objects-management-plugin", "@kbn/saved-objects-finder-plugin", "@kbn/content-management-plugin", - "@kbn/core-saved-objects-api-server", "@kbn/object-versioning", "@kbn/core-saved-objects-server", "@kbn/core-saved-objects-utils-server", @@ -64,7 +63,8 @@ "@kbn/content-management-utils", "@kbn/serverless", "@kbn/no-data-page-plugin", - "@kbn/search-response-warnings" + "@kbn/search-response-warnings", + "@kbn/logging" ], "exclude": [ "target/**/*", diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts index 6037773c577b0..c455eed849c4b 100644 --- a/test/api_integration/apis/home/sample_data.ts +++ b/test/api_integration/apis/home/sample_data.ts @@ -72,7 +72,8 @@ export default function ({ getService }: FtrProviderContext) { }); }); - describe('dates', () => { + // FLAKY: https://github.com/elastic/kibana/issues/166572 + describe.skip('dates', () => { it('should load elasticsearch index containing sample data with dates relative to current time', async () => { const resp = await es.search<{ timestamp: string }>({ index: 'kibana_sample_data_flights', diff --git a/test/examples/search/warnings.ts b/test/examples/search/warnings.ts index b8fcd5d63564b..267a49de08bc7 100644 --- a/test/examples/search/warnings.ts +++ b/test/examples/search/warnings.ts @@ -107,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { const toasts = await find.allByCssSelector(toastsSelector); expect(toasts.length).to.be(2); - const expects = ['The data might be incomplete or wrong.', 'Query result']; + const expects = ['Results are partial and may be incomplete.', 'Query result']; await asyncForEach(toasts, async (t, index) => { expect(await t.getVisibleText()).to.eql(expects[index]); }); @@ -164,7 +164,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { toasts = await find.allByCssSelector(toastsSelector); expect(toasts.length).to.be(2); - const expects = ['The data might be incomplete or wrong.', 'Query result']; + const expects = ['Results are partial and may be incomplete.', 'Query result']; await asyncForEach(toasts, async (t, index) => { expect(await t.getVisibleText()).to.eql(expects[index]); }); 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 edf2f000fcb27..e55afd799a9b8 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 @@ -17,6 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const testSubjects = getService('testSubjects'); const find = getService('find'); + const es = getService('es'); const PageObjects = getPageObjects(['settings', 'common', 'header']); describe('creating and deleting default data view', function describeIndexTests() { @@ -250,5 +251,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); }); + + describe('hidden index support', () => { + it('can create data view against hidden index', async () => { + const pattern = 'logstash-2015.09.21'; + + await es.transport.request({ + path: '/logstash-2015.09.21/_settings', + method: 'PUT', + body: { + index: { + hidden: true, + }, + }, + }); + + await PageObjects.settings.createIndexPattern( + pattern, + undefined, + undefined, + undefined, + undefined, + true + ); + const patternName = await PageObjects.settings.getIndexPageHeading(); + expect(patternName).to.be(pattern); + }); + }); }); } diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index d2fba8e620153..568c45beb0dfb 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -470,13 +470,19 @@ export class SettingsPageObject extends FtrService { await customDataViewIdInput.type(value); } + async allowHiddenClick() { + await this.testSubjects.click('toggleAdvancedSetting'); + await this.testSubjects.click('allowHiddenField'); + } + async createIndexPattern( indexPatternName: string, // null to bypass default value timefield: string | null = '@timestamp', isStandardIndexPattern = true, customDataViewId?: string, - dataViewName?: string + dataViewName?: string, + allowHidden?: boolean ) { await this.retry.try(async () => { await this.header.waitUntilLoadingHasFinished(); @@ -489,6 +495,11 @@ export class SettingsPageObject extends FtrService { } else { await this.clickAddNewIndexPatternButton(); } + + if (allowHidden) { + await this.allowHiddenClick(); + } + await this.header.waitUntilLoadingHasFinished(); if (!isStandardIndexPattern) { await this.selectRollupIndexPatternType(); diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 595b455025cc5..83ecf99f40196 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -268,25 +268,17 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.index_management.enableIndexStats (any)', 'xpack.infra.sources.default.fields.message (array)', /** - * xpack.infra.featureFlags.customThresholdAlertsEnabled is conditional based on traditional/serverless offering - * and will resolve to (boolean) - */ - 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', - /** - * xpack.infra.featureFlags.logsUIEnabled is conditional based on traditional/serverless offering - * and will resolve to (boolean) - */ - 'xpack.infra.featureFlags.logsUIEnabled (any)', - /** - * xpack.infra.featureFlags.metricsExplorerEnabled is conditional based on traditional/serverless offering - * and will resolve to (boolean) + * Feature flags bellow are conditional based on traditional/serverless offering + * and will all resolve to xpack.infra.featureFlags.* (boolean) */ 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', - /** - * xpack.infra.featureFlags.osqueryEnabled is conditional based on traditional/serverless offering - * and will resolve to (boolean) - */ + 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', 'xpack.infra.featureFlags.osqueryEnabled (any)', + 'xpack.infra.featureFlags.inventoryThresholdAlertRuleEnabled (any)', + 'xpack.infra.featureFlags.metricThresholdAlertRuleEnabled (any)', + 'xpack.infra.featureFlags.logThresholdAlertRuleEnabled (any)', + 'xpack.infra.featureFlags.logsUIEnabled (any)', + 'xpack.license_management.ui.enabled (boolean)', 'xpack.maps.preserveDrawingBuffer (boolean)', 'xpack.maps.showMapsInspectorAdapter (boolean)', diff --git a/x-pack/examples/alerting_example/public/components/documentation.tsx b/x-pack/examples/alerting_example/public/components/documentation.tsx index 0fb989a306ac0..a49bed4193496 100644 --- a/x-pack/examples/alerting_example/public/components/documentation.tsx +++ b/x-pack/examples/alerting_example/public/components/documentation.tsx @@ -10,10 +10,7 @@ import React from 'react'; import { EuiText, EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageContentHeader_Deprecated as EuiPageContentHeader, - EuiPageContentHeaderSection_Deprecated as EuiPageContentHeaderSection, + EuiPageSection, EuiPageHeader, EuiPageHeaderSection, EuiTitle, @@ -34,33 +31,29 @@ export const DocumentationPage = ( - - - - -

Documentation links

-
-
-
- - -

Plugin Structure

-

- This example solution has both `server` and a `public` plugins. The `server` handles - registration of example the RuleTypes, while the `public` handles creation of, and - navigation for, these rule types. -

- - If you see a message about needing to enable the Transport Layer Security, start ES with{' '} - yarn es snapshot --ssl --license trial and Kibana with{' '} - yarn start --run-examples --ssl. If you running chrome on a mac, you may - need to type in thisisunsafe if you see the Certificate invalid screen with - no way to ‘proceed anyway’. - -
- - -
-
+ + + +

Documentation links

+
+
+ +

Plugin Structure

+

+ This example solution has both `server` and a `public` plugins. The `server` handles + registration of example the RuleTypes, while the `public` handles creation of, and + navigation for, these rule types. +

+ + If you see a message about needing to enable the Transport Layer Security, start ES with{' '} + yarn es snapshot --ssl --license trial and Kibana with{' '} + yarn start --run-examples --ssl. If you running chrome on a mac, you may need + to type in thisisunsafe if you see the Certificate invalid screen with no way + to ‘proceed anyway’. + +
+ + +
); diff --git a/x-pack/examples/triggers_actions_ui_example/public/components/rule_status_dropdown_sandbox.tsx b/x-pack/examples/triggers_actions_ui_example/public/components/rule_status_dropdown_sandbox.tsx index b1b0644f5dc10..982d55926d96a 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/components/rule_status_dropdown_sandbox.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/components/rule_status_dropdown_sandbox.tsx @@ -18,18 +18,24 @@ export const RuleStatusDropdownSandbox = ({ triggersActionsUi }: SandboxProps) = const [isSnoozedUntil, setIsSnoozedUntil] = useState(null); const [muteAll, setMuteAll] = useState(false); + const onEnableRule: any = async () => { + setEnabled(true); + setMuteAll(false); + setIsSnoozedUntil(null); + }; + + const onDisableRule: any = async () => { + setEnabled(false); + }; + return triggersActionsUi.getRuleStatusDropdown({ rule: { enabled, isSnoozedUntil, muteAll, }, - enableRule: async () => { - setEnabled(true); - setMuteAll(false); - setIsSnoozedUntil(null); - }, - disableRule: async () => setEnabled(false), + enableRule: onEnableRule, + disableRule: onDisableRule, snoozeRule: async (schedule) => { if (schedule.duration === -1) { setIsSnoozedUntil(null); diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts deleted file mode 100644 index 80fc421c82883..0000000000000 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/composite_slo.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as t from 'io-ts'; -import { - budgetingMethodSchema, - compositeSloIdSchema, - dateType, - objectiveSchema, - summarySchema, - tagsSchema, - timeWindowSchema, - weightedAverageCompositeMethodSchema, - weightedAverageSourceSchema, -} from '../schema'; - -const createCompositeSLOParamsSchema = t.type({ - body: t.intersection([ - t.type({ - name: t.string, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - compositeMethod: weightedAverageCompositeMethodSchema, - sources: t.array(weightedAverageSourceSchema), - }), - t.partial({ id: compositeSloIdSchema, tags: tagsSchema }), - ]), -}); - -const createCompositeSLOResponseSchema = t.type({ - id: compositeSloIdSchema, -}); - -const compositeSLOResponseSchema = t.type({ - id: compositeSloIdSchema, - name: t.string, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - compositeMethod: weightedAverageCompositeMethodSchema, - sources: t.array(weightedAverageSourceSchema), - tags: tagsSchema, - createdAt: dateType, - updatedAt: dateType, -}); - -const compositeSLOWithSummaryResponseSchema = t.intersection([ - compositeSLOResponseSchema, - t.type({ summary: summarySchema }), -]); - -const updateCompositeSLOParamsSchema = t.type({ - path: t.type({ - id: compositeSloIdSchema, - }), - body: t.partial({ - name: t.string, - compositeMethod: weightedAverageCompositeMethodSchema, - sources: t.array(weightedAverageSourceSchema), - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - objective: objectiveSchema, - tags: tagsSchema, - }), -}); - -const updateCompositeSLOResponseSchema = compositeSLOResponseSchema; - -const deleteCompositeSLOParamsSchema = t.type({ - path: t.type({ - id: compositeSloIdSchema, - }), -}); - -const getCompositeSLOParamsSchema = t.type({ - path: t.type({ - id: compositeSloIdSchema, - }), -}); - -const getCompositeSLOResponseSchema = compositeSLOWithSummaryResponseSchema; - -const sortDirectionSchema = t.union([t.literal('asc'), t.literal('desc')]); -const sortBySchema = t.literal('creationTime'); -const findCompositeSLOParamsSchema = t.partial({ - query: t.partial({ - name: t.string, - page: t.string, - perPage: t.string, - sortBy: sortBySchema, - sortDirection: sortDirectionSchema, - }), -}); - -const findCompositeSLOResponseSchema = t.type({ - page: t.number, - perPage: t.number, - total: t.number, - results: t.array(compositeSLOWithSummaryResponseSchema), -}); - -type CreateCompositeSLOInput = t.OutputOf; // Raw payload sent by the frontend -type CreateCompositeSLOParams = t.TypeOf; // Parsed payload used by the backend -type CreateCompositeSLOResponse = t.OutputOf; // Raw response sent to the frontend - -type GetCompositeSLOResponse = t.OutputOf; - -type FindCompositeSLOParams = t.TypeOf; -type FindCompositeSLOResponse = t.OutputOf; - -type UpdateCompositeSLOInput = t.OutputOf; -type UpdateCompositeSLOParams = t.TypeOf; -type UpdateCompositeSLOResponse = t.OutputOf; - -export { - compositeSLOResponseSchema, - createCompositeSLOParamsSchema, - deleteCompositeSLOParamsSchema, - findCompositeSLOParamsSchema, - findCompositeSLOResponseSchema, - getCompositeSLOParamsSchema, - updateCompositeSLOParamsSchema, - updateCompositeSLOResponseSchema, -}; - -export type { - CreateCompositeSLOInput, - CreateCompositeSLOParams, - CreateCompositeSLOResponse, - FindCompositeSLOParams, - FindCompositeSLOResponse, - GetCompositeSLOResponse, - UpdateCompositeSLOInput, - UpdateCompositeSLOParams, - UpdateCompositeSLOResponse, -}; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/index.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/index.ts index 777e009ca2ef0..78f557bdcbc7d 100644 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/index.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export * from './composite_slo'; export * from './slo'; diff --git a/x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts b/x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts deleted file mode 100644 index ebfc31d5e111b..0000000000000 --- a/x-pack/packages/kbn-slo-schema/src/schema/composite_slo.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as t from 'io-ts'; - -import { dateType } from './common'; -import { budgetingMethodSchema, objectiveSchema, sloIdSchema, tagsSchema } from './slo'; -import { timeWindowSchema } from './time_window'; - -const compositeSloIdSchema = t.string; - -const weightedAverageCompositeMethodSchema = t.literal('weightedAverage'); -const weightedAverageSourceSchema = t.type({ - id: sloIdSchema, - revision: t.number, - weight: t.number, -}); - -const compositeSloSchema = t.type({ - id: compositeSloIdSchema, - name: t.string, - timeWindow: timeWindowSchema, - budgetingMethod: budgetingMethodSchema, - compositeMethod: weightedAverageCompositeMethodSchema, - objective: objectiveSchema, - sources: t.array(weightedAverageSourceSchema), - tags: tagsSchema, - createdAt: dateType, - updatedAt: dateType, -}); - -export { - weightedAverageSourceSchema, - weightedAverageCompositeMethodSchema, - compositeSloIdSchema, - compositeSloSchema, -}; diff --git a/x-pack/packages/kbn-slo-schema/src/schema/index.ts b/x-pack/packages/kbn-slo-schema/src/schema/index.ts index a710b4b946fd2..2fbddc7ce8537 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/index.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/index.ts @@ -6,7 +6,6 @@ */ export * from './common'; -export * from './composite_slo'; export * from './duration'; export * from './indicators'; export * from './time_window'; diff --git a/x-pack/packages/security-solution/features/src/app_features_keys.ts b/x-pack/packages/security-solution/features/src/app_features_keys.ts index ea3939e2b9f28..ab54c64cf8992 100644 --- a/x-pack/packages/security-solution/features/src/app_features_keys.ts +++ b/x-pack/packages/security-solution/features/src/app_features_keys.ts @@ -48,6 +48,11 @@ export enum AppFeatureSecurityKey { * Enables managing endpoint exceptions on rules and alerts */ endpointExceptions = 'endpointExceptions', + + /** + * enables all rule actions + */ + externalRuleActions = 'external_rule_actions', } export enum AppFeatureCasesKey { diff --git a/x-pack/packages/security-solution/features/src/security/app_feature_config.ts b/x-pack/packages/security-solution/features/src/security/app_feature_config.ts index a27dccd6c5bf6..66bbfb4e5ddcd 100644 --- a/x-pack/packages/security-solution/features/src/security/app_feature_config.ts +++ b/x-pack/packages/security-solution/features/src/security/app_feature_config.ts @@ -106,4 +106,6 @@ export const securityDefaultAppFeaturesConfig: DefaultSecurityAppFeaturesConfig }, [AppFeatureSecurityKey.osqueryAutomatedResponseActions]: {}, + + [AppFeatureSecurityKey.externalRuleActions]: {}, }; diff --git a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts index d9a090f1313f0..a9cba155b1bde 100644 --- a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts +++ b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts @@ -528,8 +528,7 @@ const executeActionSubFeature: SubFeatureConfig = { description: i18n.translate( 'securitySolutionPackages.features.featureRegistry.subFeatures.executeOperations.description', { - // TODO: Update this description before 8.8 FF - defaultMessage: 'Perform script execution on the endpoint.', + defaultMessage: 'Perform script execution response actions in the response console.', } ), privilegeGroups: [ diff --git a/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx b/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx index b040069a235f4..af5942024ec99 100644 --- a/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx +++ b/x-pack/plugins/aiops/public/embeddable/embeddable_change_point_chart.tsx @@ -66,7 +66,7 @@ export class EmbeddableChangePointChart extends AbstractEmbeddable< initialInput: EmbeddableChangePointChartInput, parent?: IContainer ) { - super(initialInput, { defaultTitle: initialInput.title }, parent); + super(initialInput, {}, parent); this.initOutput().finally(() => this.setInitializationFinished()); } diff --git a/x-pack/plugins/alerting/common/index.ts b/x-pack/plugins/alerting/common/index.ts index e2e9e477cc4cc..c1b5be4d518a4 100644 --- a/x-pack/plugins/alerting/common/index.ts +++ b/x-pack/plugins/alerting/common/index.ts @@ -37,6 +37,7 @@ export * from './rrule_type'; export * from './rule_tags_aggregation'; export * from './iso_weekdays'; export * from './saved_objects/rules/mappings'; +export * from './rule_circuit_breaker_error_message'; export type { MaintenanceWindowModificationMetadata, diff --git a/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.test.ts b/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.test.ts new file mode 100644 index 0000000000000..bb89ebad61af6 --- /dev/null +++ b/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.test.ts @@ -0,0 +1,70 @@ +/* + * Copyright 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 { + getRuleCircuitBreakerErrorMessage, + parseRuleCircuitBreakerErrorMessage, +} from './rule_circuit_breaker_error_message'; + +describe('getRuleCircuitBreakerErrorMessage', () => { + it('should return the correct message', () => { + expect( + getRuleCircuitBreakerErrorMessage({ + name: 'test rule', + action: 'create', + interval: 5, + intervalAvailable: 4, + }) + ).toMatchInlineSnapshot( + `"Error validating circuit breaker - Rule 'test rule' cannot be created. The maximum number of runs per minute would be exceeded. - The rule has 5 runs per minute; there are only 4 runs per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals."` + ); + + expect( + getRuleCircuitBreakerErrorMessage({ + name: 'test rule', + action: 'update', + interval: 1, + intervalAvailable: 1, + }) + ).toMatchInlineSnapshot( + `"Error validating circuit breaker - Rule 'test rule' cannot be updated. The maximum number of runs per minute would be exceeded. - The rule has 1 run per minute; there is only 1 run per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals."` + ); + + expect( + getRuleCircuitBreakerErrorMessage({ + name: 'test rule', + action: 'bulkEdit', + interval: 1, + intervalAvailable: 1, + rules: 5, + }) + ).toMatchInlineSnapshot( + `"Error validating circuit breaker - Rules cannot be bulk edited. The maximum number of runs per minute would be exceeded. - The rules have 1 run per minute; there is only 1 run per minute available. Before you can modify these rules, you must disable other rules or change their check intervals so they run less frequently."` + ); + }); + + it('should parse the error message', () => { + const message = getRuleCircuitBreakerErrorMessage({ + name: 'test rule', + action: 'create', + interval: 5, + intervalAvailable: 4, + }); + + const parsedMessage = parseRuleCircuitBreakerErrorMessage(message); + + expect(parsedMessage.summary).toContain("Rule 'test rule' cannot be created"); + expect(parsedMessage.details).toContain('The rule has 5 runs per minute'); + }); + + it('should passthrough the message if it is not related to circuit breakers', () => { + const parsedMessage = parseRuleCircuitBreakerErrorMessage('random message'); + + expect(parsedMessage.summary).toEqual('random message'); + expect(parsedMessage.details).toBeUndefined(); + }); +}); diff --git a/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts b/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts new file mode 100644 index 0000000000000..68eea28cdeba7 --- /dev/null +++ b/x-pack/plugins/alerting/common/rule_circuit_breaker_error_message.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +const errorMessageHeader = 'Error validating circuit breaker'; + +const getCreateRuleErrorSummary = (name: string) => { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.createSummary', { + defaultMessage: `Rule '{name}' cannot be created. The maximum number of runs per minute would be exceeded.`, + values: { + name, + }, + }); +}; + +const getUpdateRuleErrorSummary = (name: string) => { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.updateSummary', { + defaultMessage: `Rule '{name}' cannot be updated. The maximum number of runs per minute would be exceeded.`, + values: { + name, + }, + }); +}; + +const getEnableRuleErrorSummary = (name: string) => { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.enableSummary', { + defaultMessage: `Rule '{name}' cannot be enabled. The maximum number of runs per minute would be exceeded.`, + values: { + name, + }, + }); +}; + +const getBulkEditRuleErrorSummary = () => { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.bulkEditSummary', { + defaultMessage: `Rules cannot be bulk edited. The maximum number of runs per minute would be exceeded.`, + }); +}; + +const getBulkEnableRuleErrorSummary = () => { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.bulkEnableSummary', { + defaultMessage: `Rules cannot be bulk enabled. The maximum number of runs per minute would be exceeded.`, + }); +}; + +const getRuleCircuitBreakerErrorDetail = ({ + interval, + intervalAvailable, + rules, +}: { + interval: number; + intervalAvailable: number; + rules: number; +}) => { + if (rules === 1) { + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.ruleDetail', { + defaultMessage: `The rule has {interval, plural, one {{interval} run} other {{interval} runs}} per minute; there {intervalAvailable, plural, one {is only {intervalAvailable} run} other {are only {intervalAvailable} runs}} per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals.`, + values: { + interval, + intervalAvailable, + }, + }); + } + return i18n.translate('xpack.alerting.ruleCircuitBreaker.error.multipleRuleDetail', { + defaultMessage: `The rules have {interval, plural, one {{interval} run} other {{interval} runs}} per minute; there {intervalAvailable, plural, one {is only {intervalAvailable} run} other {are only {intervalAvailable} runs}} per minute available. Before you can modify these rules, you must disable other rules or change their check intervals so they run less frequently.`, + values: { + interval, + intervalAvailable, + }, + }); +}; + +export const getRuleCircuitBreakerErrorMessage = ({ + name = '', + interval, + intervalAvailable, + action, + rules = 1, +}: { + name?: string; + interval: number; + intervalAvailable: number; + action: 'update' | 'create' | 'enable' | 'bulkEdit' | 'bulkEnable'; + rules?: number; +}) => { + let errorMessageSummary: string; + + switch (action) { + case 'update': + errorMessageSummary = getUpdateRuleErrorSummary(name); + break; + case 'create': + errorMessageSummary = getCreateRuleErrorSummary(name); + break; + case 'enable': + errorMessageSummary = getEnableRuleErrorSummary(name); + break; + case 'bulkEdit': + errorMessageSummary = getBulkEditRuleErrorSummary(); + break; + case 'bulkEnable': + errorMessageSummary = getBulkEnableRuleErrorSummary(); + break; + } + + return `Error validating circuit breaker - ${errorMessageSummary} - ${getRuleCircuitBreakerErrorDetail( + { + interval, + intervalAvailable, + rules, + } + )}`; +}; + +export const parseRuleCircuitBreakerErrorMessage = ( + message: string +): { + summary: string; + details?: string; +} => { + if (!message.includes(errorMessageHeader)) { + return { + summary: message, + }; + } + const segments = message.split(' - '); + return { + summary: segments[1], + details: segments[2], + }; +}; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts index d76162696ead2..5bc625f5592b3 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.ts @@ -25,7 +25,7 @@ import { convertRuleIdsToKueryNode, } from '../../../../lib'; import { WriteOperations, AlertingAuthorizationEntity } from '../../../../authorization'; -import { parseDuration } from '../../../../../common/parse_duration'; +import { parseDuration, getRuleCircuitBreakerErrorMessage } from '../../../../../common'; import { bulkMarkApiKeysForInvalidation } from '../../../../invalidate_pending_api_keys/bulk_mark_api_keys_for_invalidation'; import { ruleAuditEvent, RuleAuditAction } from '../../../../rules_client/common/audit_events'; import { @@ -77,7 +77,7 @@ import { transformRuleDomainToRuleAttributes, transformRuleDomainToRule, } from '../../transforms'; -import { validateScheduleLimit } from '../get_schedule_frequency'; +import { validateScheduleLimit, ValidateScheduleLimitResult } from '../get_schedule_frequency'; const isValidInterval = (interval: string | undefined): interval is string => { return interval !== undefined; @@ -326,15 +326,16 @@ async function bulkEditRulesOcc( .map((rule) => rule.attributes.schedule?.interval) .filter(isValidInterval); - try { - if (operations.some((operation) => operation.field === 'schedule')) { - await validateScheduleLimit({ - context, - prevInterval, - updatedInterval, - }); - } - } catch (error) { + let validationPayload: ValidateScheduleLimitResult = null; + if (operations.some((operation) => operation.field === 'schedule')) { + validationPayload = await validateScheduleLimit({ + context, + prevInterval, + updatedInterval, + }); + } + + if (validationPayload) { return { apiKeysToInvalidate: Array.from(apiKeysMap.values()) .filter((value) => value.newApiKey) @@ -342,7 +343,13 @@ async function bulkEditRulesOcc( resultSavedObjects: [], rules: [], errors: rules.map((rule) => ({ - message: `Failed to bulk edit rule - ${error.message}`, + message: getRuleCircuitBreakerErrorMessage({ + name: rule.attributes.name || 'n/a', + interval: validationPayload!.interval, + intervalAvailable: validationPayload!.intervalAvailable, + action: 'bulkEdit', + rules: updatedInterval.length, + }), rule: { id: rule.id, name: rule.attributes.name || 'n/a', diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts index 616a16a8315ed..d774a80ae4ebc 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts @@ -8,7 +8,7 @@ import Semver from 'semver'; import Boom from '@hapi/boom'; import { SavedObject, SavedObjectsUtils } from '@kbn/core/server'; import { withSpan } from '@kbn/apm-utils'; -import { parseDuration } from '../../../../../common/parse_duration'; +import { parseDuration, getRuleCircuitBreakerErrorMessage } from '../../../../../common'; import { WriteOperations, AlertingAuthorizationEntity } from '../../../../authorization'; import { validateRuleTypeParams, @@ -36,7 +36,7 @@ import { RuleAttributes } from '../../../../data/rule/types'; import type { CreateRuleData } from './types'; import { createRuleDataSchema } from './schemas'; import { createRuleSavedObject } from '../../../../rules_client/lib'; -import { validateScheduleLimit } from '../get_schedule_frequency'; +import { validateScheduleLimit, ValidateScheduleLimitResult } from '../get_schedule_frequency'; export interface CreateRuleOptions { id?: string; @@ -61,16 +61,29 @@ export async function createRule( try { createRuleDataSchema.validate(data); - if (data.enabled) { - await validateScheduleLimit({ - context, - updatedInterval: data.schedule.interval, - }); - } } catch (error) { throw Boom.badRequest(`Error validating create data - ${error.message}`); } + let validationPayload: ValidateScheduleLimitResult = null; + if (data.enabled) { + validationPayload = await validateScheduleLimit({ + context, + updatedInterval: data.schedule.interval, + }); + } + + if (validationPayload) { + throw Boom.badRequest( + getRuleCircuitBreakerErrorMessage({ + name: data.name, + interval: validationPayload!.interval, + intervalAvailable: validationPayload!.intervalAvailable, + action: 'create', + }) + ); + } + try { await withSpan({ name: 'authorization.ensureAuthorized', type: 'rules' }, () => context.authorization.ensureAuthorized({ diff --git a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.test.ts index d23e4b3a7dd54..c9c890b2ff6ad 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.test.ts @@ -183,53 +183,55 @@ describe('validateScheduleLimit', () => { jest.clearAllMocks(); }); - test('should not throw if the updated interval does not exceed limits', () => { - return expect( - validateScheduleLimit({ + test('should not return anything if the updated interval does not exceed limits', async () => { + expect( + await validateScheduleLimit({ context, updatedInterval: ['1m', '1m'], }) - ).resolves.toBe(undefined); + ).toBeNull(); }); - test('should throw if the updated interval exceeds limits', () => { - return expect( - validateScheduleLimit({ + test('should return interval if the updated interval exceeds limits', async () => { + expect( + await validateScheduleLimit({ context, updatedInterval: ['1m', '1m', '1m', '2m'], }) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Run limit reached: The rule has 3.5 runs per minute; there are only 3 runs per minute available."` - ); + ).toEqual({ + interval: 3.5, + intervalAvailable: 3, + }); }); - test('should not throw if previous interval was modified to be under the limit', () => { + test('should not return anything if previous interval was modified to be under the limit', async () => { internalSavedObjectsRepository.find.mockResolvedValue( getMockAggregationResult([{ interval: '1m', count: 6 }]) ); - return expect( - validateScheduleLimit({ + expect( + await validateScheduleLimit({ context, prevInterval: ['1m', '1m'], updatedInterval: ['2m', '2m'], }) - ).resolves.toBe(undefined); + ).toBeNull(); }); - test('should throw if the previous interval was modified to exceed the limit', () => { + test('should return interval if the previous interval was modified to exceed the limit', async () => { internalSavedObjectsRepository.find.mockResolvedValue( getMockAggregationResult([{ interval: '1m', count: 5 }]) ); - return expect( - validateScheduleLimit({ + expect( + await validateScheduleLimit({ context, prevInterval: ['1m'], updatedInterval: ['30s'], }) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Run limit reached: The rule has 2 runs per minute; there are only 1 runs per minute available."` - ); + ).toEqual({ + interval: 2, + intervalAvailable: 0, + }); }); }); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.ts b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.ts index 254cad93fd341..b670adeccae8a 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/get_schedule_frequency.ts @@ -85,7 +85,11 @@ interface ValidateScheduleLimitParams { updatedInterval: string | string[]; } -export const validateScheduleLimit = async (params: ValidateScheduleLimitParams) => { +export type ValidateScheduleLimitResult = { interval: number; intervalAvailable: number } | null; + +export const validateScheduleLimit = async ( + params: ValidateScheduleLimitParams +): Promise => { const { context, prevInterval = [], updatedInterval = [] } = params; const prevIntervalArray = Array.isArray(prevInterval) ? prevInterval : [prevInterval]; @@ -108,8 +112,11 @@ export const validateScheduleLimit = async (params: ValidateScheduleLimitParams) const computedRemainingSchedulesPerMinute = remainingSchedulesPerMinute + prevSchedulePerMinute; if (computedRemainingSchedulesPerMinute < updatedSchedulesPerMinute) { - throw new Error( - `Run limit reached: The rule has ${updatedSchedulesPerMinute} runs per minute; there are only ${computedRemainingSchedulesPerMinute} runs per minute available.` - ); + return { + interval: updatedSchedulesPerMinute, + intervalAvailable: remainingSchedulesPerMinute, + }; } + + return null; }; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/index.ts index e39a1cd8a671c..5b26d6a9b9a77 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/index.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/get_schedule_frequency/index.ts @@ -7,4 +7,6 @@ export type { GetScheduleFrequencyResult } from './types'; +export type { ValidateScheduleLimitResult } from './get_schedule_frequency'; + export { getScheduleFrequency, validateScheduleLimit } from './get_schedule_frequency'; diff --git a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts index e1a7828d85042..94d8aa923ea19 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts @@ -37,7 +37,6 @@ describe('rule_type_registry_deprecated_consumers', () => { "siem.newTermsRule", "siem.notifications", "slo.rules.burnRate", - "metrics.alert.anomaly", "logs.alert.document.count", "metrics.alert.inventory.threshold", "metrics.alert.threshold", diff --git a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts index d6a238c414243..7394736968609 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts @@ -30,7 +30,6 @@ export const ruleTypeIdWithValidLegacyConsumers: Record = { 'siem.newTermsRule': [ALERTS_FEATURE_ID], 'siem.notifications': [ALERTS_FEATURE_ID], 'slo.rules.burnRate': [ALERTS_FEATURE_ID], - 'metrics.alert.anomaly': [ALERTS_FEATURE_ID], 'logs.alert.document.count': [ALERTS_FEATURE_ID], 'metrics.alert.inventory.threshold': [ALERTS_FEATURE_ID], 'metrics.alert.threshold': [ALERTS_FEATURE_ID], diff --git a/x-pack/plugins/alerting/server/rules_client/methods/bulk_enable.ts b/x-pack/plugins/alerting/server/rules_client/methods/bulk_enable.ts index fda778e6b11af..cac39ccb367d4 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/bulk_enable.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/bulk_enable.ts @@ -19,6 +19,7 @@ import { buildKueryNodeFilter, getAndValidateCommonBulkOptions, } from '../common'; +import { getRuleCircuitBreakerErrorMessage } from '../../../common'; import { getAuthorizationFilter, checkAuthorizationAndGetTotal, @@ -143,13 +144,18 @@ const bulkEnableRulesWithOCC = async ( .filter((rule) => !rule.attributes.enabled) .map((rule) => rule.attributes.schedule?.interval); - try { - await validateScheduleLimit({ - context, - updatedInterval, + const validationPayload = await validateScheduleLimit({ + context, + updatedInterval, + }); + + if (validationPayload) { + scheduleValidationError = getRuleCircuitBreakerErrorMessage({ + interval: validationPayload.interval, + intervalAvailable: validationPayload.intervalAvailable, + action: 'bulkEnable', + rules: updatedInterval.length, }); - } catch (error) { - scheduleValidationError = `Error validating enable rule data - ${error.message}`; } await pMap(rulesFinderRules, async (rule) => { diff --git a/x-pack/plugins/alerting/server/rules_client/methods/enable.ts b/x-pack/plugins/alerting/server/rules_client/methods/enable.ts index 97e677a0c28cc..53df42f012ad8 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/enable.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/enable.ts @@ -15,6 +15,7 @@ import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; import { RulesClientContext } from '../types'; import { updateMeta, createNewAPIKeySet, scheduleTask, migrateLegacyActions } from '../lib'; import { validateScheduleLimit } from '../../application/rule/methods/get_schedule_frequency'; +import { getRuleCircuitBreakerErrorMessage } from '../../../common'; export async function enable(context: RulesClientContext, { id }: { id: string }): Promise { return await retryIfConflicts( @@ -48,13 +49,20 @@ async function enableWithOCC(context: RulesClientContext, { id }: { id: string } references = alert.references; } - try { - await validateScheduleLimit({ - context, - updatedInterval: attributes.schedule.interval, - }); - } catch (error) { - throw Boom.badRequest(`Error validating enable rule data - ${error.message}`); + const validationPayload = await validateScheduleLimit({ + context, + updatedInterval: attributes.schedule.interval, + }); + + if (validationPayload) { + throw Boom.badRequest( + getRuleCircuitBreakerErrorMessage({ + name: attributes.name, + interval: validationPayload.interval, + intervalAvailable: validationPayload.intervalAvailable, + action: 'enable', + }) + ); } try { diff --git a/x-pack/plugins/alerting/server/rules_client/methods/update.ts b/x-pack/plugins/alerting/server/rules_client/methods/update.ts index 925f128f0b8b3..e302b02a0e163 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/update.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/update.ts @@ -17,7 +17,7 @@ import { } from '../../types'; import { validateRuleTypeParams, getRuleNotifyWhenType } from '../../lib'; import { WriteOperations, AlertingAuthorizationEntity } from '../../authorization'; -import { parseDuration } from '../../../common/parse_duration'; +import { parseDuration, getRuleCircuitBreakerErrorMessage } from '../../../common'; import { retryIfConflicts } from '../../lib/retry_if_conflicts'; import { bulkMarkApiKeysForInvalidation } from '../../invalidate_pending_api_keys/bulk_mark_api_keys_for_invalidation'; import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; @@ -33,7 +33,10 @@ import { createNewAPIKeySet, migrateLegacyActions, } from '../lib'; -import { validateScheduleLimit } from '../../application/rule/methods/get_schedule_frequency'; +import { + validateScheduleLimit, + ValidateScheduleLimitResult, +} from '../../application/rule/methods/get_schedule_frequency'; type ShouldIncrementRevision = (params?: RuleTypeParams) => boolean; @@ -90,18 +93,27 @@ async function updateWithOCC( } const { - attributes: { enabled, schedule }, + attributes: { enabled, schedule, name }, } = alertSavedObject; - try { - if (enabled && schedule.interval !== data.schedule.interval) { - await validateScheduleLimit({ - context, - prevInterval: alertSavedObject.attributes.schedule?.interval, - updatedInterval: data.schedule.interval, - }); - } - } catch (error) { - throw Boom.badRequest(`Error validating update data - ${error.message}`); + + let validationPayload: ValidateScheduleLimitResult = null; + if (enabled && schedule.interval !== data.schedule.interval) { + validationPayload = await validateScheduleLimit({ + context, + prevInterval: alertSavedObject.attributes.schedule?.interval, + updatedInterval: data.schedule.interval, + }); + } + + if (validationPayload) { + throw Boom.badRequest( + getRuleCircuitBreakerErrorMessage({ + name, + interval: validationPayload.interval, + intervalAvailable: validationPayload.intervalAvailable, + action: 'update', + }) + ); } try { diff --git a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap index f8e220ca97946..79ecdc077ea6f 100644 --- a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap @@ -1153,10 +1153,16 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the } } }, + "has_any_services_per_official_agent": { + "type": "boolean", + "_meta": { + "description": "Indicates whether any service is being monitored. This is determined by checking all officially supported agents within the last day" + } + }, "has_any_services": { "type": "boolean", "_meta": { - "description": "Indicates whether any service is being monitored. This is determined by checking all agents within the last day" + "description": "Indicates whether any service is being monitored within the last day." } }, "version": { diff --git a/x-pack/plugins/apm/public/components/app/onboarding/commands/get_apm_agent_commands.test.ts b/x-pack/plugins/apm/public/components/app/onboarding/commands/get_apm_agent_commands.test.ts index b26c8da82d916..1938cf7722cb0 100644 --- a/x-pack/plugins/apm/public/components/app/onboarding/commands/get_apm_agent_commands.test.ts +++ b/x-pack/plugins/apm/public/components/app/onboarding/commands/get_apm_agent_commands.test.ts @@ -25,10 +25,10 @@ describe('getCommands', () => { }); expect(commands).toMatchInlineSnapshot(` "java -javaagent:/path/to/elastic-apm-agent-.jar \\\\ - -Delastic.apm.service_name= \\\\\\\\ + -Delastic.apm.service_name= \\\\ -Delastic.apm.api_key= \\\\ -Delastic.apm.server_url= \\\\ - -Delastic.apm.environment= \\\\\\\\ + -Delastic.apm.environment= \\\\ -Delastic.apm.application_packages=org.example \\\\ -jar my-service-name.jar" `); @@ -42,10 +42,10 @@ describe('getCommands', () => { expect(commands).not.toBe(''); expect(commands).toMatchInlineSnapshot(` "java -javaagent:/path/to/elastic-apm-agent-.jar \\\\ - -Delastic.apm.service_name= \\\\\\\\ + -Delastic.apm.service_name= \\\\ -Delastic.apm.secret_token=foobar \\\\ -Delastic.apm.server_url=localhost:8220 \\\\ - -Delastic.apm.environment= \\\\\\\\ + -Delastic.apm.environment= \\\\ -Delastic.apm.application_packages=org.example \\\\ -jar my-service-name.jar" `); @@ -60,10 +60,10 @@ describe('getCommands', () => { expect(commands).not.toBe(''); expect(commands).toMatchInlineSnapshot(` "java -javaagent:/path/to/elastic-apm-agent-.jar \\\\ - -Delastic.apm.service_name= \\\\\\\\ + -Delastic.apm.service_name= \\\\ -Delastic.apm.secret_token=foobar \\\\ -Delastic.apm.server_url=localhost:8220 \\\\ - -Delastic.apm.environment= \\\\\\\\ + -Delastic.apm.environment= \\\\ -Delastic.apm.application_packages=org.example \\\\ -jar my-service-name.jar" `); diff --git a/x-pack/plugins/apm/public/components/app/onboarding/commands/java.ts b/x-pack/plugins/apm/public/components/app/onboarding/commands/java.ts index fd8ffec78e29d..590e62b42d68d 100644 --- a/x-pack/plugins/apm/public/components/app/onboarding/commands/java.ts +++ b/x-pack/plugins/apm/public/components/app/onboarding/commands/java.ts @@ -6,17 +6,17 @@ */ import { - serviceNameHint, + apiKeyHint, secretTokenHint, serverUrlHint, serviceEnvironmentHint, - apiKeyHint, + serviceNameHint, } from './shared_hints'; export const javaVariables = (secretToken?: string) => ({ - ...(secretToken && { secretToken: 'Delastic.apm.secret_token' }), - ...(!secretToken && { apiKey: 'Delastic.apm.api_key' }), - apmServerUrl: 'Delastic.apm.server_url', + ...(secretToken && { secretToken: 'elastic.apm.secret_token' }), + ...(!secretToken && { apiKey: 'elastic.apm.api_key' }), + apmServerUrl: 'elastic.apm.server_url', }); export const javaHighlightLang = 'java'; @@ -32,7 +32,7 @@ export const javaLineNumbers = (apiKey?: string | null) => ({ }, }); export const java = `java -javaagent:/path/to/elastic-apm-agent-.jar \\ --Delastic.apm.service_name= \\\\ +-Delastic.apm.service_name= \\ {{^secretToken}} -Delastic.apm.api_key={{{apiKey}}} \\ {{/secretToken}} @@ -40,6 +40,6 @@ export const java = `java -javaagent:/path/to/elastic-apm-agent-.jar \\ -Delastic.apm.secret_token={{{secretToken}}} \\ {{/secretToken}} -Delastic.apm.server_url={{{apmServerUrl}}} \\ --Delastic.apm.environment= \\\\ +-Delastic.apm.environment= \\ -Delastic.apm.application_packages=org.example \\ -jar my-service-name.jar`; diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index 1ae9b5752a1c8..c024a8bb0b752 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -678,8 +678,37 @@ export const tasks: TelemetryTask[] = [ Promise.resolve({} as Record) ); + const services = await telemetryClient.search({ + index: [ + indices.error, + indices.span, + indices.metric, + indices.transaction, + ], + body: { + size: 0, + track_total_hits: true, + terminate_after: 1, + query: { + bool: { + filter: [ + { + exists: { + field: SERVICE_NAME, + }, + }, + range1d, + ], + }, + }, + timeout, + }, + }); + return { - has_any_services: sum(Object.values(servicesPerAgent)) > 0, + has_any_services_per_official_agent: + sum(Object.values(servicesPerAgent)) > 0, + has_any_services: services?.hits?.total?.value > 0, services_per_agent: servicesPerAgent, }; }, diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts index 59f8c1f7097e7..e52be12ca5c36 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts @@ -567,11 +567,18 @@ export const apmPerServiceSchema: MakeSchemaFrom = { export const apmSchema: MakeSchemaFrom = { ...apmPerAgentSchema, + has_any_services_per_official_agent: { + type: 'boolean', + _meta: { + description: + 'Indicates whether any service is being monitored. This is determined by checking all officially supported agents within the last day', + }, + }, has_any_services: { type: 'boolean', _meta: { description: - 'Indicates whether any service is being monitored. This is determined by checking all agents within the last day', + 'Indicates whether any service is being monitored within the last day.', }, }, version: { diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts index 11e181f552b47..fc6cfe8d3ee47 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts @@ -70,6 +70,7 @@ export interface APMPerService { } export interface APMUsage { + has_any_services_per_official_agent: boolean; has_any_services: boolean; services_per_agent: Record; version: { diff --git a/x-pack/plugins/cloud_security_posture/README.md b/x-pack/plugins/cloud_security_posture/README.md index 0befebb667de6..bd0b7de6ac661 100755 --- a/x-pack/plugins/cloud_security_posture/README.md +++ b/x-pack/plugins/cloud_security_posture/README.md @@ -67,7 +67,7 @@ Run [**End-to-End Tests**](https://www.elastic.co/guide/en/kibana/current/develo ```bash yarn test:ftr --config x-pack/test/cloud_security_posture_functional/config.ts -yarn test:ftr --config x-pack/test/api_integration/config.ts --include-tag=cloud_security_posture +yarn test:ftr --config x-pack/test/api_integration/apis/cloud_security_posture/config.ts yarn test:ftr --config x-pack/test/cloud_security_posture_api/config.ts yarn test:ftr --config x-pack/test_serverless/api_integration/test_suites/security/config.ts --include-tag=cloud_security_posture yarn test:ftr --config x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts 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 9f267e07569c2..7641745b897f4 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -63,6 +63,7 @@ export interface CloudPostureIntegrationProps { icon?: string; tooltip?: string; isBeta?: boolean; + testId?: string; }>; } @@ -85,6 +86,7 @@ export const cloudPostureIntegrations: CloudPostureIntegrations = { defaultMessage: 'CIS AWS', }), icon: 'logoAWS', + testId: 'cisAwsTestId', }, { type: CLOUDBEAT_GCP, @@ -95,6 +97,7 @@ export const cloudPostureIntegrations: CloudPostureIntegrations = { defaultMessage: 'CIS GCP', }), icon: googleCloudLogo, + testId: 'cisGcpTestId', }, // needs to be a function that disables/enabled based on integration version { @@ -108,6 +111,7 @@ export const cloudPostureIntegrations: CloudPostureIntegrations = { disabled: false, isBeta: true, icon: 'logoAzure', + testId: 'cisAzureTestId', }, ], }, diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx index 9a50658a6a1f3..829d148097889 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/csp_boxed_radio_group.tsx @@ -24,6 +24,7 @@ export interface CspRadioOption { icon?: string; tooltip?: string; isBeta?: boolean; + testId?: string; } export const RadioGroup = ({ @@ -34,7 +35,6 @@ export const RadioGroup = ({ onChange, }: CspRadioGroupProps) => { const { euiTheme } = useEuiTheme(); - return (
=> [ { id: SETUP_ACCESS_CLOUD_SHELL, @@ -240,6 +243,7 @@ const getSetupFormatOptions = (): Array<{ defaultMessage: 'Google Cloud Shell', }), disabled: false, + testId: 'gcpGoogleCloudShellOptionTestId', }, { id: SETUP_ACCESS_MANUAL, @@ -247,6 +251,7 @@ const getSetupFormatOptions = (): Array<{ defaultMessage: 'Manual', }), disabled: false, + testId: 'gcpManualOptionTestId', }, ]; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 9d1c52a0c1ee3..a4ec591d51c75 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -127,12 +127,14 @@ const getGcpAccountTypeOptions = (isGcpOrgDisabled: boolean): CspRadioGroupProps defaultMessage: 'Supported from integration version 1.6.0 and above', }) : undefined, + testId: 'gcpOrganizationAccountTestId', }, { id: GCP_SINGLE_ACCOUNT, label: i18n.translate('xpack.csp.fleetIntegration.gcpAccountType.gcpSingleAccountLabel', { defaultMessage: 'Single Account', }), + testId: 'gcpSingleAccountTestId', }, ]; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts index 9db4c9bf22a75..148a482714a10 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts @@ -225,6 +225,7 @@ export const getPolicyTemplateInputOptions = (policyTemplate: CloudSecurityPolic icon: o.icon, disabled: o.disabled, isBeta: o.isBeta, + testId: o.testId, })); export const getMaxPackageName = ( diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx index 1c03e18f52e8e..57d2f28af4c18 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx @@ -112,6 +112,9 @@ export const DataDriftOverviewTable = ({ return ( toggleDetails(item)} aria-label={itemIdToExpandedRowMapValues[item.featureName] ? COLLAPSE_ROW : EXPAND_ROW} iconType={itemIdToExpandedRowMapValues[item.featureName] ? 'arrowDown' : 'arrowRight'} @@ -149,7 +152,10 @@ export const DataDriftOverviewTable = ({ 'data-test-subj': 'mlDataDriftOverviewTableDriftDetected', sortable: true, textOnly: true, - render: (driftDetected: boolean) => { + render: (driftDetected: boolean, item) => { + // @ts-expect-error currently ES two_sided does return string NaN, will be fixed + // NaN happens when the distributions are non overlapping. This means there is a drift. + if (item.similarityTestPValue === 'NaN') return dataComparisonYesLabel; return {driftDetected ? dataComparisonYesLabel : dataComparisonNoLabel}; }, }, diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx index 86ddff5c25e3f..2411c9096be70 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx @@ -94,7 +94,11 @@ export const PageHeader: FC = () => { return ( {dataView.getName()}
} + pageTitle={ +
+ {dataView.getName()} +
+ } rightSideItems={[ {hasValidTimeField ? ( diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts index bb9b5cbc5a99b..43c0afee07e3e 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts @@ -9,8 +9,11 @@ * formatSignificanceLevel * @param significanceLevel */ -export const formatSignificanceLevel = (significanceLevel: number) => { +export const formatSignificanceLevel = (significanceLevel: number | 'NaN') => { + // NaN happens when the distributions are non overlapping. This means there is a drift, and the p-value would be astronomically small. + if (significanceLevel === 'NaN') return '< 0.000001'; if (typeof significanceLevel !== 'number' || isNaN(significanceLevel)) return ''; + if (significanceLevel < 1e-6) { return '< 0.000001'; } else if (significanceLevel < 0.01) { diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/document_count_with_dual_brush.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/document_count_with_dual_brush.tsx index 63d717cec0393..0d83879c37486 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/document_count_with_dual_brush.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/document_count_with_dual_brush.tsx @@ -141,7 +141,7 @@ export const DocumentCountWithDualBrush: FC = ({ timeRangeEarliest === undefined || timeRangeLatest === undefined ) { - return totalCount !== undefined ? : null; + return totalCount !== undefined ? : null; } const chartPoints: LogRateHistogramItem[] = Object.entries(documentCountStats.buckets).map( @@ -166,7 +166,7 @@ export const DocumentCountWithDualBrush: FC = ({ data-test-subj={getDataTestSubject('dataDriftTotalDocCountHeader', id)} > - + diff --git a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.test.ts b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.test.ts index d3bf05d486d82..dc7cb2a9e52d5 100644 --- a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.test.ts +++ b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.test.ts @@ -68,6 +68,7 @@ describe('#setupSavedObjects', () => { type: 'known-type', attributes: { attrOne: 'one', attrSecret: '*secret*' }, references: [], + namespaces: ['some-ns'], }; mockSavedObjectsRepository.get.mockResolvedValue(mockSavedObject); mockSavedObjectTypeRegistry.isSingleNamespace.mockReturnValue(true); @@ -101,6 +102,7 @@ describe('#setupSavedObjects', () => { type: 'known-type', attributes: { attrOne: 'one', attrSecret: '*secret*' }, references: [], + namespaces: ['some-ns2', 'some-ns'], }; mockSavedObjectsRepository.get.mockResolvedValue(mockSavedObject); mockSavedObjectTypeRegistry.isSingleNamespace.mockReturnValue(false); @@ -154,6 +156,7 @@ describe('#setupSavedObjects', () => { type: 'known-type', attributes: { attrOne: 'one', attrSecret: '*secret*' }, references: [], + namespaces: ['some-ns'], }; mockSavedObjectsRepository.createPointInTimeFinder = jest.fn().mockReturnValue({ close: jest.fn(), @@ -320,5 +323,51 @@ describe('#setupSavedObjects', () => { await finder.close(); expect(mockClose).toHaveBeenCalledTimes(1); }); + + it('includes `namespace` for * find option', async () => { + const mockSavedObject: SavedObject = { + id: 'some-id', + type: 'known-type', + attributes: { attrOne: 'one', attrSecret: '*secret*' }, + references: [], + namespaces: ['some-ns'], + }; + mockSavedObjectsRepository.createPointInTimeFinder = jest.fn().mockReturnValue({ + close: jest.fn(), + find: function* asyncGenerator() { + yield { saved_objects: [mockSavedObject] }; + }, + }); + + mockSavedObjectTypeRegistry.isSingleNamespace.mockReturnValue(true); + + const finder = await setupContract().createPointInTimeFinderDecryptedAsInternalUser({ + type: 'known-type', + namespaces: ['*'], + }); + + for await (const res of finder.find()) { + expect(res).toEqual({ + saved_objects: [ + { + ...mockSavedObject, + attributes: { attrOne: 'one', attrSecret: 'secret' }, + }, + ], + }); + } + + expect(mockEncryptedSavedObjectsService.decryptAttributes).toHaveBeenCalledTimes(1); + expect(mockEncryptedSavedObjectsService.decryptAttributes).toHaveBeenCalledWith( + { type: mockSavedObject.type, id: mockSavedObject.id, namespace: 'some-ns' }, + mockSavedObject.attributes + ); + + expect(mockSavedObjectsRepository.createPointInTimeFinder).toHaveBeenCalledTimes(1); + expect(mockSavedObjectsRepository.createPointInTimeFinder).toHaveBeenCalledWith( + { type: 'known-type', namespaces: ['*'] }, + undefined + ); + }); }); }); diff --git a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.ts b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.ts index 78100be78e5d4..6c7b9ef5513ac 100644 --- a/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.ts +++ b/x-pack/plugins/encrypted_saved_objects/server/saved_objects/index.ts @@ -118,7 +118,7 @@ export function setupSavedObjects({ { type, id, - namespace: getDescriptorNamespace(typeRegistry, type, options?.namespace), + namespace: getDescriptorNamespace(typeRegistry, type, savedObject.namespaces), }, savedObject.attributes as Record )) as T, @@ -148,7 +148,7 @@ export function setupSavedObjects({ namespace: getDescriptorNamespace( typeRegistry, savedObject.type, - findOptions.namespaces + savedObject.namespaces ), }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx index 1b24e10010e55..940beb64c41b7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx @@ -103,18 +103,6 @@ export const ConnectorCheckable: React.FC = ({ value={serviceType} > - {documentationUrl && ( - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel', - { - defaultMessage: 'Documentation', - } - )} - - - )} = ({ )} + {documentationUrl && ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel', + { + defaultMessage: 'Documentation', + } + )} + + + + )} ); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts index f84be1ad660b3..6dd47fe869ede 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/doc_links/doc_links.ts @@ -418,6 +418,7 @@ class DocLinks { this.connectorsMySQL = docLinks.links.enterpriseSearch.connectorsMySQL; this.connectorsNative = docLinks.links.enterpriseSearch.connectorsNative; this.connectorsNetworkDrive = docLinks.links.enterpriseSearch.connectorsNetworkDrive; + this.connectorsOneDrive = docLinks.links.enterpriseSearch.connectorsOneDrive; this.connectorsOracle = docLinks.links.enterpriseSearch.connectorsOracle; this.connectorsOutlook = docLinks.links.enterpriseSearch.connectorsOutlook; this.connectorsPostgreSQL = docLinks.links.enterpriseSearch.connectorsPostgreSQL; diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/ml_model_deployment_common.ts b/x-pack/plugins/enterprise_search/server/lib/ml/ml_model_deployment_common.ts index 59498b4d8587a..84af615841eaf 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/ml_model_deployment_common.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/ml_model_deployment_common.ts @@ -5,16 +5,12 @@ * 2.0. */ -import { ELASTIC_MODEL_DEFINITIONS } from '@kbn/ml-trained-models-utils'; - import { ElasticsearchResponseError, isNotFoundException, isResourceNotFoundException, } from '../../utils/identify_exceptions'; -export const acceptableModelNames = Object.keys(ELASTIC_MODEL_DEFINITIONS); - export function isNotFoundExceptionError(error: unknown): boolean { return ( isResourceNotFoundException(error as ElasticsearchResponseError) || @@ -23,20 +19,3 @@ export function isNotFoundExceptionError(error: unknown): boolean { error?.statusCode === 404 ); } - -export function throwIfNotAcceptableModelName(modelName: string) { - if (!acceptableModelNames.includes(modelName)) { - const notFoundError: ElasticsearchResponseError = { - meta: { - body: { - error: { - type: 'resource_not_found_exception', - }, - }, - statusCode: 404, - }, - name: 'ResponseError', - }; - throw notFoundError; - } -} diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.ts b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.ts index 75bac93c2d200..4f65dbf9ced64 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_deployment.ts @@ -12,10 +12,7 @@ import { MlTrainedModels } from '@kbn/ml-plugin/server'; import { MlModelDeploymentStatus, MlModelDeploymentState } from '../../../common/types/ml'; import { getMlModelDeploymentStatus } from './get_ml_model_deployment_status'; -import { - isNotFoundExceptionError, - throwIfNotAcceptableModelName, -} from './ml_model_deployment_common'; +import { isNotFoundExceptionError } from './ml_model_deployment_common'; export const startMlModelDeployment = async ( modelName: string, @@ -25,10 +22,6 @@ export const startMlModelDeployment = async ( throw new Error('Machine Learning is not enabled'); } - // before anything else, check our model name - // to ensure we only allow those names we want - throwIfNotAcceptableModelName(modelName); - try { // try and get the deployment status of the model first // and see if it's already deployed or deploying... diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.ts b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.ts index 4d7f3c21e1210..ffa51acc5bd32 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/start_ml_model_download.ts @@ -11,10 +11,7 @@ import { MlTrainedModels } from '@kbn/ml-plugin/server'; import { MlModelDeploymentState, MlModelDeploymentStatus } from '../../../common/types/ml'; import { getMlModelDeploymentStatus } from './get_ml_model_deployment_status'; -import { - isNotFoundExceptionError, - throwIfNotAcceptableModelName, -} from './ml_model_deployment_common'; +import { isNotFoundExceptionError } from './ml_model_deployment_common'; export const startMlModelDownload = async ( modelName: string, @@ -24,10 +21,6 @@ export const startMlModelDownload = async ( throw new Error('Machine Learning is not enabled'); } - // before anything else, check our model name - // to ensure we only allow those names we want - throwIfNotAcceptableModelName(modelName); - try { // try and get the deployment status of the model first // and see if it's already deployed or deploying... diff --git a/x-pack/plugins/fleet/server/config.test.ts b/x-pack/plugins/fleet/server/config.test.ts index da654244aae30..53fc0545efcf3 100644 --- a/x-pack/plugins/fleet/server/config.test.ts +++ b/x-pack/plugins/fleet/server/config.test.ts @@ -5,9 +5,18 @@ * 2.0. */ +import { loggingSystemMock } from '@kbn/core/server/mocks'; + import { config } from './config'; +import { appContextService } from './services'; + +jest.mock('./services/app_context'); describe('Config schema', () => { + beforeEach(() => { + const mockedLogger = loggingSystemMock.createLogger(); + jest.mocked(appContextService.getLogger).mockReturnValue(mockedLogger); + }); it('should not allow to specify both default output in xpack.fleet.ouputs and xpack.fleet.agents.elasticsearch.hosts ', () => { expect(() => { config.schema.validate({ @@ -70,4 +79,26 @@ describe('Config schema', () => { }); }).not.toThrow(); }); + + it('should log a warning when trying to enable a non existing experimental feature', () => { + expect(() => { + config.schema.validate({ + enableExperimental: ['notvalid'], + }); + }).not.toThrow(); + + expect(appContextService.getLogger().warn).toBeCalledWith( + '[notvalid] is not a valid fleet experimental feature.' + ); + }); + + it('should not log a warning when enabling an existing experimental feature', () => { + expect(() => { + config.schema.validate({ + enableExperimental: ['displayAgentMetrics'], + }); + }).not.toThrow(); + + expect(appContextService.getLogger().warn).not.toBeCalled(); + }); }); diff --git a/x-pack/plugins/fleet/server/config.ts b/x-pack/plugins/fleet/server/config.ts index e6d007c058b74..e5fec70fa37a7 100644 --- a/x-pack/plugins/fleet/server/config.ts +++ b/x-pack/plugins/fleet/server/config.ts @@ -11,11 +11,7 @@ import { schema } from '@kbn/config-schema'; import type { TypeOf } from '@kbn/config-schema'; import type { PluginConfigDescriptor } from '@kbn/core/server'; -import { - getExperimentalAllowedValues, - isValidExperimentalValue, -} from '../common/experimental_features'; -const allowedExperimentalValues = getExperimentalAllowedValues(); +import { isValidExperimentalValue } from '../common/experimental_features'; import { PreconfiguredPackagesSchema, @@ -25,6 +21,7 @@ import { PreconfiguredFleetProxiesSchema, } from './types'; import { BULK_CREATE_MAX_ARTIFACTS_BYTES } from './services/artifacts/artifacts'; +import { appContextService } from './services'; const DEFAULT_BUNDLED_PACKAGE_LOCATION = path.join(__dirname, '../target/bundled_packages'); const DEFAULT_GPG_KEY_PATH = path.join(__dirname, '../target/keys/GPG-KEY-elasticsearch'); @@ -162,9 +159,9 @@ export const config: PluginConfigDescriptor = { validate(list) { for (const key of list) { if (!isValidExperimentalValue(key)) { - return `[${key}] is not allowed. Allowed values are: ${allowedExperimentalValues.join( - ', ' - )}`; + appContextService + .getLogger() + .warn(`[${key}] is not a valid fleet experimental feature.`); } } }, diff --git a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts index ae19383f37216..c080aefacd12e 100644 --- a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts @@ -30,7 +30,7 @@ import { const logFilePath = Path.join(__dirname, 'logs.log'); -describe('Fleet preconfiguration reset', () => { +describe('Fleet cloud preconfiguration', () => { let esServer: TestElasticsearchUtils; let kbnServer: TestKibanaUtils; @@ -324,6 +324,9 @@ describe('Fleet preconfiguration reset', () => { }, ], }, + 'elastic-cloud-fleet-server': { + indices: [], + }, }, }, outputs: { 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 deb8c0a313f30..984a88d87e61f 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 @@ -25,7 +25,7 @@ import { buildComponentTemplates, installComponentAndIndexTemplateForDataStream, } from '../template/install'; -import { processFields } from '../../fields/field'; +import { isFields, processFields } from '../../fields/field'; import { generateMappings } from '../template/template'; import { getESAssetMetadata } from '../meta'; import { updateEsAssetReferences } from '../../packages/install'; @@ -162,7 +162,6 @@ const processTransformAssetsPerModule = ( installablePackage, path ); - // Since there can be multiple assets per transform definition // We want to create a unique list of assets/specifications for each transform if (transformsSpecifications.get(transformModuleId) === undefined) { @@ -172,7 +171,8 @@ const processTransformAssetsPerModule = ( const content = safeLoad(getAsset(path).toString('utf-8')); - if (fileName === TRANSFORM_SPECS_TYPES.FIELDS) { + // Handling fields.yml and all other files within 'fields' folder + if (fileName === TRANSFORM_SPECS_TYPES.FIELDS || isFields(path)) { const validFields = processFields(content); const mappings = generateMappings(validFields); const templateName = getTransformAssetNameForInstallation( @@ -198,7 +198,14 @@ const processTransformAssetsPerModule = ( } else { destinationIndexTemplates[indexToModify] = template; } - packageAssets?.set('mappings', mappings); + + // If there's already mappings set previously, append it to new + const previousMappings = + transformsSpecifications.get(transformModuleId)?.get('mappings') ?? {}; + + transformsSpecifications.get(transformModuleId)?.set('mappings', { + properties: { ...previousMappings.properties, ...mappings.properties }, + }); } if (fileName === TRANSFORM_SPECS_TYPES.TRANSFORM) { 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 e0c5a123c2421..6ab6f20669baf 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 @@ -107,7 +107,34 @@ _meta: type: date - name: updated_at type: alias - path: event.ingested`, + path: event.ingested +- external: ecs + name: ecs.version +- external: ecs + name: message`, + BEATS_FIELDS: `- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file.path + type: keyword + description: Path to the log file.`, + AGENT_FIELDS: `- name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. +- name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium`, }; }; const getExpectedData = (transformVersion: string) => { @@ -210,6 +237,8 @@ _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')); @@ -247,6 +276,8 @@ _meta: 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', @@ -300,10 +331,19 @@ _meta: }, mappings: { properties: { - '@timestamp': { - ignore_malformed: false, - type: 'date', + input: { properties: { type: { type: 'keyword', ignore_above: 1024 } } }, + log: { + properties: { + flags: { type: 'keyword', ignore_above: 1024 }, + offset: { type: 'long' }, + file: { properties: { path: { type: 'keyword', ignore_above: 1024 } } }, + }, }, + instance: { properties: { name: { type: 'keyword', ignore_above: 1024 } } }, + machine: { properties: { type: { type: 'keyword', ignore_above: 1024 } } }, + '@timestamp': { ignore_malformed: false, type: 'date' }, + ecs: { properties: { version: { type: 'keyword', ignore_above: 1024 } } }, + message: { type: 'keyword', ignore_above: 1024 }, }, dynamic_templates: [ { @@ -582,6 +622,8 @@ _meta: ignore_malformed: false, type: 'date', }, + ecs: { properties: { version: { type: 'keyword', ignore_above: 1024 } } }, + message: { type: 'keyword', ignore_above: 1024 }, }, dynamic_templates: [ { @@ -852,6 +894,8 @@ _meta: ignore_malformed: false, type: 'date', }, + ecs: { properties: { version: { type: 'keyword', ignore_above: 1024 } } }, + message: { type: 'keyword', ignore_above: 1024 }, }, }, }, 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 27e566d2e4339..437eed7c64192 100644 --- a/x-pack/plugins/fleet/server/services/epm/fields/field.ts +++ b/x-pack/plugins/fleet/server/services/epm/fields/field.ts @@ -284,7 +284,7 @@ export function processFields(fields: Fields): Fields { return validateFields(dedupedFields, dedupedFields); } -const isFields = (path: string) => { +export const isFields = (path: string) => { return path.includes('/fields/'); }; diff --git a/x-pack/plugins/graph/common/content_management/index.ts b/x-pack/plugins/graph/common/content_management/index.ts index c848adbce1747..cdaef8264125d 100644 --- a/x-pack/plugins/graph/common/content_management/index.ts +++ b/x-pack/plugins/graph/common/content_management/index.ts @@ -26,6 +26,7 @@ export type { GraphSearchIn, GraphSearchOut, GraphSearchQuery, + GraphCrudTypes, } from './latest'; export * as GraphV1 from './v1'; diff --git a/x-pack/plugins/graph/common/content_management/v1/index.ts b/x-pack/plugins/graph/common/content_management/v1/index.ts index 3ce273575aca7..2e2b8b9dd6950 100644 --- a/x-pack/plugins/graph/common/content_management/v1/index.ts +++ b/x-pack/plugins/graph/common/content_management/v1/index.ts @@ -22,5 +22,6 @@ export type { GraphSearchIn, GraphSearchOut, GraphSearchQuery, + GraphCrudTypes, Reference, } from './types'; diff --git a/x-pack/plugins/graph/common/content_management/v1/types.ts b/x-pack/plugins/graph/common/content_management/v1/types.ts index 51bb9017c38a9..c6664cf5a162c 100644 --- a/x-pack/plugins/graph/common/content_management/v1/types.ts +++ b/x-pack/plugins/graph/common/content_management/v1/types.ts @@ -17,6 +17,7 @@ import { CreateResult, UpdateResult, } from '@kbn/content-management-plugin/common'; +import { ContentManagementCrudTypes } from '@kbn/content-management-utils'; import { GraphContentType } from '../types'; @@ -113,3 +114,13 @@ export interface GraphSearchQuery { export type GraphSearchIn = SearchIn; export type GraphSearchOut = SearchResult; + +// ----------- CRUD TYPES -------------- + +export type GraphCrudTypes = ContentManagementCrudTypes< + GraphContentType, + GraphSavedObjectAttributes, + CreateOptions, + UpdateOptions, + {} +>; diff --git a/x-pack/plugins/graph/server/content_management/graph_storage.ts b/x-pack/plugins/graph/server/content_management/graph_storage.ts index e0faea8c99b9c..6487f942b29d4 100644 --- a/x-pack/plugins/graph/server/content_management/graph_storage.ts +++ b/x-pack/plugins/graph/server/content_management/graph_storage.ts @@ -4,325 +4,37 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import Boom from '@hapi/boom'; -import type { SearchQuery } from '@kbn/content-management-plugin/common'; -import type { ContentStorage, StorageContext } from '@kbn/content-management-plugin/server'; -import type { - SavedObject, - SavedObjectReference, - SavedObjectsFindOptions, -} from '@kbn/core-saved-objects-api-server'; +import { Logger } from '@kbn/logging'; +import { SOContentStorage } from '@kbn/content-management-utils'; import { cmServicesDefinition } from '../../common/content_management/cm_services'; -import type { - GraphSavedObjectAttributes, - GraphSavedObject, - PartialGraphSavedObject, - GraphGetOut, - GraphCreateIn, - GraphCreateOut, - CreateOptions, - GraphUpdateIn, - GraphUpdateOut, - UpdateOptions, - GraphDeleteOut, - GraphSearchQuery, - GraphSearchOut, -} from '../../common/content_management'; - -const savedObjectClientFromRequest = async (ctx: StorageContext) => { - if (!ctx.requestHandlerContext) { - throw new Error('Storage context.requestHandlerContext missing.'); - } - - const { savedObjects } = await ctx.requestHandlerContext.core; - return savedObjects.client; -}; - -type PartialSavedObject = Omit>, 'references'> & { - references: SavedObjectReference[] | undefined; -}; - -function savedObjectToGraphSavedObject( - savedObject: SavedObject, - partial: false -): GraphSavedObject; - -function savedObjectToGraphSavedObject( - savedObject: PartialSavedObject, - partial: true -): PartialGraphSavedObject; - -function savedObjectToGraphSavedObject( - savedObject: - | SavedObject - | PartialSavedObject -): GraphSavedObject | PartialGraphSavedObject { - const { - id, - type, - updated_at: updatedAt, - created_at: createdAt, - attributes: { - title, - description, - version, - kibanaSavedObjectMeta, - wsState, - numVertices, - numLinks, - legacyIndexPatternRef, - }, - references, - error, - namespaces, - } = savedObject; - - return { - id, - type, - updatedAt, - createdAt, - attributes: { - title, - description, - kibanaSavedObjectMeta, - wsState, - version, - numLinks, - numVertices, - legacyIndexPatternRef, - }, - references, - error, - namespaces, - }; -} +import type { GraphCrudTypes } from '../../common/content_management'; const SO_TYPE = 'graph-workspace'; -export class GraphStorage implements ContentStorage { - constructor() {} - - async get(ctx: StorageContext, id: string): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - // Save data in DB - const { - saved_object: savedObject, - alias_purpose: aliasPurpose, - alias_target_id: aliasTargetId, - outcome, - } = await soClient.resolve(SO_TYPE, id); - - const response: GraphGetOut = { - item: savedObjectToGraphSavedObject(savedObject, false), - meta: { - aliasPurpose, - aliasTargetId, - outcome, - }, - }; - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.get.out.result.down( - response - ); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async bulkGet(): Promise { - // Not implemented. Graph does not use bulkGet - throw new Error(`[bulkGet] has not been implemented. See GraphStorage class.`); - } - - async create( - ctx: StorageContext, - data: GraphCreateIn['data'], - options: CreateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.create.in.data.up< - GraphSavedObjectAttributes, - GraphSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.create.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const savedObject = await soClient.create( - SO_TYPE, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.create.out.result.down< - GraphCreateOut, - GraphCreateOut - >({ - item: savedObjectToGraphSavedObject(savedObject, false), +export class GraphStorage extends SOContentStorage { + constructor({ + logger, + throwOnResultValidationError, + }: { + logger: Logger; + throwOnResultValidationError: boolean; + }) { + super({ + savedObjectType: SO_TYPE, + cmServicesDefinition, + allowedSavedObjectAttributes: [ + 'title', + 'description', + 'kibanaSavedObjectMeta', + 'wsState', + 'version', + 'numLinks', + 'numVertices', + 'legacyIndexPatternRef', + ], + logger, + throwOnResultValidationError, }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async update( - ctx: StorageContext, - id: string, - data: GraphUpdateIn['data'], - options: UpdateOptions - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - - // Validate input (data & options) & UP transform them to the latest version - const { value: dataToLatest, error: dataError } = transforms.update.in.data.up< - GraphSavedObjectAttributes, - GraphSavedObjectAttributes - >(data); - if (dataError) { - throw Boom.badRequest(`Invalid data. ${dataError.message}`); - } - - const { value: optionsToLatest, error: optionsError } = transforms.update.in.options.up< - CreateOptions, - CreateOptions - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid options. ${optionsError.message}`); - } - - // Save data in DB - const soClient = await savedObjectClientFromRequest(ctx); - const partialSavedObject = await soClient.update( - SO_TYPE, - id, - dataToLatest, - optionsToLatest - ); - - // Validate DB response and DOWN transform to the request version - const { value, error: resultError } = transforms.update.out.result.down< - GraphUpdateOut, - GraphUpdateOut - >({ - item: savedObjectToGraphSavedObject(partialSavedObject, true), - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; - } - - async delete(ctx: StorageContext, id: string): Promise { - const soClient = await savedObjectClientFromRequest(ctx); - await soClient.delete(SO_TYPE, id); - return { success: true }; - } - - async search( - ctx: StorageContext, - query: SearchQuery, - options: GraphSearchQuery = {} - ): Promise { - const { - utils: { getTransforms }, - version: { request: requestVersion }, - } = ctx; - const transforms = getTransforms(cmServicesDefinition, requestVersion); - const soClient = await savedObjectClientFromRequest(ctx); - - // Validate and UP transform the options - const { value: optionsToLatest, error: optionsError } = transforms.search.in.options.up< - GraphSearchQuery, - GraphSearchQuery - >(options); - if (optionsError) { - throw Boom.badRequest(`Invalid payload. ${optionsError.message}`); - } - const { searchFields = ['title^3', 'description'], types = ['graph-workspace'] } = - optionsToLatest; - - const { included, excluded } = query.tags ?? {}; - const hasReference: SavedObjectsFindOptions['hasReference'] = included - ? included.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const hasNoReference: SavedObjectsFindOptions['hasNoReference'] = excluded - ? excluded.map((id) => ({ - id, - type: 'tag', - })) - : undefined; - - const soQuery: SavedObjectsFindOptions = { - type: types, - search: query.text, - perPage: query.limit, - page: query.cursor ? Number(query.cursor) : undefined, - defaultSearchOperator: 'AND', - searchFields, - hasReference, - hasNoReference, - }; - - // Execute the query in the DB - const response = await soClient.find(soQuery); - - // Validate the response and DOWN transform to the request version - const { value, error: resultError } = transforms.search.out.result.down< - GraphSearchOut, - GraphSearchOut - >({ - hits: response.saved_objects.map((so) => savedObjectToGraphSavedObject(so, false)), - pagination: { - total: response.total, - }, - }); - - if (resultError) { - throw Boom.badRequest(`Invalid response. ${resultError.message}`); - } - - return value; } } diff --git a/x-pack/plugins/graph/server/index.ts b/x-pack/plugins/graph/server/index.ts index 886c8e4267cb6..86dca6c119604 100644 --- a/x-pack/plugins/graph/server/index.ts +++ b/x-pack/plugins/graph/server/index.ts @@ -5,12 +5,13 @@ * 2.0. */ -import { PluginConfigDescriptor } from '@kbn/core/server'; +import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; import { configSchema, ConfigSchema } from '../config'; import { GraphPlugin } from './plugin'; -export const plugin = () => new GraphPlugin(); +export const plugin = (initializerContext: PluginInitializerContext) => + new GraphPlugin(initializerContext); export const config: PluginConfigDescriptor = { exposeToBrowser: { diff --git a/x-pack/plugins/graph/server/plugin.ts b/x-pack/plugins/graph/server/plugin.ts index db33a04c6a0bf..88e45bc007e47 100644 --- a/x-pack/plugins/graph/server/plugin.ts +++ b/x-pack/plugins/graph/server/plugin.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import { Plugin, CoreSetup, CoreStart } from '@kbn/core/server'; +import { Plugin, CoreSetup, CoreStart, PluginInitializerContext } from '@kbn/core/server'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/server'; import { HomeServerPluginSetup } from '@kbn/home-plugin/server'; @@ -23,6 +23,8 @@ import { GraphStorage } from './content_management/graph_storage'; export class GraphPlugin implements Plugin { private licenseState: LicenseState | null = null; + constructor(private readonly initializerContext: PluginInitializerContext) {} + public setup( core: CoreSetup, { @@ -45,7 +47,10 @@ export class GraphPlugin implements Plugin { contentManagement.register({ id: CONTENT_ID, - storage: new GraphStorage(), + storage: new GraphStorage({ + throwOnResultValidationError: this.initializerContext.env.mode.dev, + logger: this.initializerContext.logger.get(), + }), version: { latest: LATEST_VERSION, }, diff --git a/x-pack/plugins/graph/tsconfig.json b/x-pack/plugins/graph/tsconfig.json index 1e8059c99c5d7..1ab9c265359a9 100644 --- a/x-pack/plugins/graph/tsconfig.json +++ b/x-pack/plugins/graph/tsconfig.json @@ -41,12 +41,13 @@ "@kbn/saved-objects-finder-plugin", "@kbn/core-saved-objects-server", "@kbn/content-management-plugin", - "@kbn/core-saved-objects-api-server", "@kbn/object-versioning", "@kbn/content-management-table-list-view-table", "@kbn/content-management-table-list-view", "@kbn/core-ui-settings-browser", "@kbn/react-kibana-mount", + "@kbn/content-management-utils", + "@kbn/logging", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/index_management/__jest__/client_integration/helpers/test_subjects.ts b/x-pack/plugins/index_management/__jest__/client_integration/helpers/test_subjects.ts index b6656c0dae354..10e94bb2f718c 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/helpers/test_subjects.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/helpers/test_subjects.ts @@ -102,4 +102,5 @@ export type TestSubjects = | 'filter-option-h' | 'infiniteRetentionPeriod.input' | 'saveButton' + | 'dataRetentionDetail' | 'createIndexSaveButton'; diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts index 6629502498c74..3a6add88c2840 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts @@ -278,6 +278,7 @@ export const createDataStreamPayload = (dataStream: Partial): DataSt }, hidden: false, lifecycle: { + enabled: true, data_retention: '7d', }, ...dataStream, diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts index c40823509d640..bbb8d924fcd02 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts @@ -338,6 +338,55 @@ describe('Data Streams tab', () => { }); describe('update data retention', () => { + test('Should show disabled or infinite retention period accordingly in table and flyout', async () => { + const { setLoadDataStreamsResponse, setLoadDataStreamResponse } = httpRequestsMockHelpers; + + const ds1 = createDataStreamPayload({ + name: 'dataStream1', + lifecycle: { + enabled: false, + }, + }); + const ds2 = createDataStreamPayload({ + name: 'dataStream2', + lifecycle: { + enabled: true, + }, + }); + + setLoadDataStreamsResponse([ds1, ds2]); + setLoadDataStreamResponse(ds1.name, ds1); + + testBed = await setup(httpSetup, { + history: createMemoryHistory(), + url: urlServiceMock, + }); + await act(async () => { + testBed.actions.goToDataStreamsList(); + }); + testBed.component.update(); + + const { actions, find, table } = testBed; + const { tableCellsValues } = table.getMetaData('dataStreamTable'); + + expect(tableCellsValues).toEqual([ + ['', 'dataStream1', 'green', '1', 'Disabled', 'Delete'], + ['', 'dataStream2', 'green', '1', '', 'Delete'], + ]); + + await actions.clickNameAt(0); + expect(find('dataRetentionDetail').text()).toBe('Disabled'); + + await act(async () => { + testBed.find('closeDetailsButton').simulate('click'); + }); + testBed.component.update(); + + setLoadDataStreamResponse(ds2.name, ds2); + await actions.clickNameAt(1); + expect(find('dataRetentionDetail').text()).toBe('Keep data indefinitely'); + }); + test('can set data retention period', async () => { const { actions: { clickNameAt, clickEditDataRetentionButton }, diff --git a/x-pack/plugins/index_management/common/types/data_streams.ts b/x-pack/plugins/index_management/common/types/data_streams.ts index 8e2e5c3368ac3..f0bd12d96fde5 100644 --- a/x-pack/plugins/index_management/common/types/data_streams.ts +++ b/x-pack/plugins/index_management/common/types/data_streams.ts @@ -59,7 +59,9 @@ export interface DataStream { _meta?: Metadata; privileges: Privileges; hidden: boolean; - lifecycle?: IndicesDataLifecycleWithRollover; + lifecycle?: IndicesDataLifecycleWithRollover & { + enabled?: boolean; + }; } export interface DataStreamIndex { diff --git a/x-pack/plugins/index_management/public/application/lib/data_streams.test.tsx b/x-pack/plugins/index_management/public/application/lib/data_streams.test.tsx new file mode 100644 index 0000000000000..a15cbaefbd0fa --- /dev/null +++ b/x-pack/plugins/index_management/public/application/lib/data_streams.test.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getLifecycleValue } from './data_streams'; + +describe('Data stream helpers', () => { + describe('getLifecycleValue', () => { + it('Knows when it should be marked as disabled', () => { + expect( + getLifecycleValue({ + enabled: false, + }) + ).toBe('Disabled'); + + expect(getLifecycleValue()).toBe('Disabled'); + }); + + it('knows when it should be marked as infinite', () => { + expect( + getLifecycleValue({ + enabled: true, + }) + ).toBe('Keep data indefinitely'); + }); + + it('knows when it has a defined data retention period', () => { + expect( + getLifecycleValue({ + enabled: true, + data_retention: '2d', + }) + ).toBe('2d'); + }); + }); +}); diff --git a/x-pack/plugins/index_management/public/application/lib/data_streams.tsx b/x-pack/plugins/index_management/public/application/lib/data_streams.tsx index 8cf45050855b0..ad068dde91a22 100644 --- a/x-pack/plugins/index_management/public/application/lib/data_streams.tsx +++ b/x-pack/plugins/index_management/public/application/lib/data_streams.tsx @@ -5,6 +5,10 @@ * 2.0. */ +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiIcon, EuiToolTip } from '@elastic/eui'; + import { DataStream } from '../../../common'; export const isFleetManaged = (dataStream: DataStream): boolean => { @@ -38,3 +42,37 @@ export const isSelectedDataStreamHidden = ( ?.hidden ); }; + +export const getLifecycleValue = ( + lifecycle?: DataStream['lifecycle'], + inifniteAsIcon?: boolean +) => { + if (!lifecycle?.enabled) { + return i18n.translate('xpack.idxMgmt.dataStreamList.dataRetentionDisabled', { + defaultMessage: 'Disabled', + }); + } else if (!lifecycle?.data_retention) { + const infiniteDataRetention = i18n.translate( + 'xpack.idxMgmt.dataStreamList.dataRetentionInfinite', + { + defaultMessage: 'Keep data indefinitely', + } + ); + + if (inifniteAsIcon) { + return ( + + + + ); + } + + return infiniteDataRetention; + } + + return lifecycle?.data_retention; +}; diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx index d04976d157406..96449e6de5238 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx @@ -30,6 +30,7 @@ import { } from '@elastic/eui'; import { DiscoverLink } from '../../../../lib/discover_link'; +import { getLifecycleValue } from '../../../../lib/data_streams'; import { SectionLoading, reactRouterNavigate } from '../../../../../shared_imports'; import { SectionError, Error, DataHealth } from '../../../../components'; import { useLoadDataStream } from '../../../../services/api'; @@ -147,19 +148,6 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ const getManagementDetails = () => { const managementDetails = []; - if (lifecycle?.data_retention) { - managementDetails.push({ - name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionTitle', { - defaultMessage: 'Data retention', - }), - toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionToolTip', { - defaultMessage: 'The amount of time to retain the data in the data stream.', - }), - content: lifecycle.data_retention, - dataTestSubj: 'dataRetentionDetail', - }); - } - if (ilmPolicyName) { managementDetails.push({ name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle', { @@ -278,6 +266,16 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ ), dataTestSubj: 'indexTemplateDetail', }, + { + name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionTitle', { + defaultMessage: 'Data retention', + }), + toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionToolTip', { + defaultMessage: 'The amount of time to retain the data in the data stream.', + }), + content: getLifecycleValue(lifecycle), + dataTestSubj: 'dataRetentionDetail', + }, ]; const managementDetails = getManagementDetails(); @@ -376,7 +374,7 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ } }} dataStreamName={dataStreamName} - dataRetention={dataStream?.lifecycle?.data_retention as string} + lifecycle={dataStream?.lifecycle} /> )} diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx index 485f1db9c06c9..0bf6aa68347de 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx @@ -19,6 +19,7 @@ import { import { ScopedHistory } from '@kbn/core/public'; import { DataStream } from '../../../../../../common/types'; +import { getLifecycleValue } from '../../../../lib/data_streams'; import { UseRequestResponse, reactRouterNavigate } from '../../../../../shared_imports'; import { getDataStreamDetailsLink, getIndexListUri } from '../../../../services/routing'; import { DataHealth } from '../../../../components'; @@ -34,6 +35,8 @@ interface Props { filters?: string; } +const INFINITE_AS_ICON = true; + export const DataStreamTable: React.FunctionComponent = ({ dataStreams, reload, @@ -144,7 +147,7 @@ export const DataStreamTable: React.FunctionComponent = ({ ), truncateText: true, sortable: true, - render: (lifecycle: DataStream['lifecycle']) => lifecycle?.data_retention, + render: (lifecycle: DataStream['lifecycle']) => getLifecycleValue(lifecycle, INFINITE_AS_ICON), }); columns.push({ diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx index e33aaae7a9073..11e51a83b8e99 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx @@ -35,13 +35,13 @@ import { } from '../../../../../shared_imports'; import { documentationService } from '../../../../services/documentation'; -import { splitSizeAndUnits } from '../../../../../../common'; +import { splitSizeAndUnits, DataStream } from '../../../../../../common'; import { useAppContext } from '../../../../app_context'; import { UnitField } from './unit_field'; import { updateDataRetention } from '../../../../services/api'; interface Props { - dataRetention: string; + lifecycle: DataStream['lifecycle']; dataStreamName: string; onClose: (data?: { hasUpdatedDataRetention: boolean }) => void; } @@ -83,33 +83,6 @@ export const timeUnits = [ } ), }, - { - value: 'ms', - text: i18n.translate( - 'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.millisecondsLabel', - { - defaultMessage: 'milliseconds', - } - ), - }, - { - value: 'micros', - text: i18n.translate( - 'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.microsecondsLabel', - { - defaultMessage: 'microseconds', - } - ), - }, - { - value: 'nanos', - text: i18n.translate( - 'xpack.idxMgmt.dataStreamsDetailsPanel.editDataRetentionModal.timeUnits.nanosecondsLabel', - { - defaultMessage: 'nanoseconds', - } - ), - }, ]; const configurationFormSchema: FormSchema = { @@ -124,7 +97,12 @@ const configurationFormSchema: FormSchema = { formatters: [fieldFormatters.toInt], validations: [ { - validator: ({ value }) => { + validator: ({ value, formData }) => { + // If infiniteRetentionPeriod is set, we dont need to validate the data retention field + if (formData.infiniteRetentionPeriod) { + return undefined; + } + if (!value) { return { message: i18n.translate( @@ -171,11 +149,11 @@ const configurationFormSchema: FormSchema = { }; export const EditDataRetentionModal: React.FunctionComponent = ({ - dataRetention, + lifecycle, dataStreamName, onClose, }) => { - const { size, unit } = splitSizeAndUnits(dataRetention); + const { size, unit } = splitSizeAndUnits(lifecycle?.data_retention as string); const { services: { notificationService }, } = useAppContext(); @@ -184,7 +162,10 @@ export const EditDataRetentionModal: React.FunctionComponent = ({ defaultValue: { dataRetention: size, timeUnit: unit || 'd', - infiniteRetentionPeriod: !dataRetention, + // When data retention is not set and lifecycle is enabled, is the only scenario in + // which data retention will be infinite. If lifecycle isnt set or is not enabled, we + // dont have inifinite data retention. + infiniteRetentionPeriod: lifecycle?.enabled && !lifecycle?.data_retention, }, schema: configurationFormSchema, id: 'editDataRetentionForm', diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_overview/languages.ts b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_overview/languages.ts index 838efe28580c0..9904f7cbb70c7 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_overview/languages.ts +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_overview/languages.ts @@ -69,10 +69,10 @@ export const goDefinition: LanguageDefinition = { "fmt" "log" "strings" -​ + "github.com/elastic/elasticsearch-serverless-go" ) -​ + func main() { cfg := elasticsearch.Config{ Address: "${url}", @@ -88,7 +88,7 @@ func main() { { "index": { "_id": "1"}} {"name": "foo", "title": "bar"}\n\`)). Do(context.Background()) - ​ + fmt.Println(res, err) }`, }; diff --git a/x-pack/plugins/infra/common/alerting/metrics/types.ts b/x-pack/plugins/infra/common/alerting/metrics/types.ts index 151c804bf413f..7ca0e9e64ca34 100644 --- a/x-pack/plugins/infra/common/alerting/metrics/types.ts +++ b/x-pack/plugins/infra/common/alerting/metrics/types.ts @@ -12,18 +12,15 @@ import { InventoryItemType, SnapshotMetricType } from '../../inventory_models/ty export const METRIC_THRESHOLD_ALERT_TYPE_ID = 'metrics.alert.threshold'; export const METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID = 'metrics.alert.inventory.threshold'; -export const METRIC_ANOMALY_ALERT_TYPE_ID = 'metrics.alert.anomaly'; export enum InfraRuleType { MetricThreshold = 'metrics.alert.threshold', InventoryThreshold = 'metrics.alert.inventory.threshold', - Anomaly = 'metrics.alert.anomaly', } export interface InfraRuleTypeParams { [InfraRuleType.MetricThreshold]: MetricThresholdParams; [InfraRuleType.InventoryThreshold]: InventoryMetricConditions; - [InfraRuleType.Anomaly]: MetricAnomalyParams; } export enum Comparator { diff --git a/x-pack/plugins/infra/common/plugin_config_types.ts b/x-pack/plugins/infra/common/plugin_config_types.ts index dd915e39cdec0..c5fada95e5a83 100644 --- a/x-pack/plugins/infra/common/plugin_config_types.ts +++ b/x-pack/plugins/infra/common/plugin_config_types.ts @@ -30,6 +30,9 @@ export interface InfraConfig { logsUIEnabled: boolean; metricsExplorerEnabled: boolean; osqueryEnabled: boolean; + inventoryThresholdAlertRuleEnabled: boolean; + metricThresholdAlertRuleEnabled: boolean; + logThresholdAlertRuleEnabled: boolean; }; } diff --git a/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx b/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx index e80da08fc082e..e4284d154c104 100644 --- a/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx +++ b/x-pack/plugins/infra/public/alerting/common/components/metrics_alert_dropdown.tsx @@ -7,11 +7,10 @@ import { i18n } from '@kbn/i18n'; import React, { useState, useCallback, useMemo } from 'react'; -import { - EuiPopover, - EuiHeaderLink, - EuiContextMenu, +import { EuiPopover, EuiHeaderLink, EuiContextMenu } from '@elastic/eui'; +import type { EuiContextMenuPanelDescriptor, + EuiContextMenuPanelItemDescriptor, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; @@ -23,6 +22,118 @@ import { InfraClientStartDeps } from '../../../types'; type VisibleFlyoutType = 'inventory' | 'metricThreshold' | 'customThreshold'; +interface ContextMenuEntries { + items: EuiContextMenuPanelItemDescriptor[]; + panels: EuiContextMenuPanelDescriptor[]; +} + +function useInfrastructureMenu( + onCreateRuleClick: (flyoutType: VisibleFlyoutType) => void +): ContextMenuEntries { + const { featureFlags } = usePluginConfig(); + + return useMemo(() => { + if (!featureFlags.inventoryThresholdAlertRuleEnabled) { + return { items: [], panels: [] }; + } + + return { + items: [ + { + 'data-test-subj': 'inventory-alerts-menu-option', + name: i18n.translate('xpack.infra.alerting.infrastructureDropdownMenu', { + defaultMessage: 'Infrastructure', + }), + panel: 1, + }, + ], + panels: [ + { + id: 1, + title: i18n.translate('xpack.infra.alerting.infrastructureDropdownTitle', { + defaultMessage: 'Infrastructure rules', + }), + items: [ + { + 'data-test-subj': 'inventory-alerts-create-rule', + name: i18n.translate('xpack.infra.alerting.createInventoryRuleButton', { + defaultMessage: 'Create inventory rule', + }), + onClick: () => onCreateRuleClick('inventory'), + }, + ], + }, + ], + }; + }, [featureFlags.inventoryThresholdAlertRuleEnabled, onCreateRuleClick]); +} + +function useMetricsMenu( + onCreateRuleClick: (flyoutType: VisibleFlyoutType) => void +): ContextMenuEntries { + const { featureFlags } = usePluginConfig(); + + return useMemo(() => { + if (!featureFlags.metricThresholdAlertRuleEnabled) { + return { items: [], panels: [] }; + } + + return { + items: [ + { + 'data-test-subj': 'metrics-threshold-alerts-menu-option', + name: i18n.translate('xpack.infra.alerting.metricsDropdownMenu', { + defaultMessage: 'Metrics', + }), + panel: 2, + }, + ], + panels: [ + { + id: 2, + title: i18n.translate('xpack.infra.alerting.metricsDropdownTitle', { + defaultMessage: 'Metrics rules', + }), + items: [ + { + 'data-test-subj': 'metrics-threshold-alerts-create-rule', + name: i18n.translate('xpack.infra.alerting.createThresholdRuleButton', { + defaultMessage: 'Create threshold rule', + }), + onClick: () => onCreateRuleClick('metricThreshold'), + }, + ], + }, + ], + }; + }, [featureFlags.metricThresholdAlertRuleEnabled, onCreateRuleClick]); +} + +function useCustomThresholdMenu( + onCreateRuleClick: (flyoutType: VisibleFlyoutType) => void +): ContextMenuEntries { + const { featureFlags } = usePluginConfig(); + + return useMemo(() => { + if (!featureFlags.customThresholdAlertsEnabled) { + return { items: [], panels: [] }; + } + + return { + items: [ + { + 'data-test-subj': 'custom-threshold-alerts-menu-option', + name: i18n.translate('xpack.infra.alerting.customThresholdDropdownMenu', { + defaultMessage: 'Create custom threshold rule', + }), + onClick: () => onCreateRuleClick('customThreshold'), + }, + ], + panels: [], + }; + }, [featureFlags.customThresholdAlertsEnabled, onCreateRuleClick]); +} + export const MetricsAlertDropdown = () => { const [popoverOpen, setPopoverOpen] = useState(false); const [visibleFlyoutType, setVisibleFlyoutType] = useState(null); @@ -34,8 +145,6 @@ export const MetricsAlertDropdown = () => { () => Boolean(uiCapabilities?.infrastructure?.save), [uiCapabilities] ); - const { featureFlags } = usePluginConfig(); - const closeFlyout = useCallback(() => setVisibleFlyoutType(null), [setVisibleFlyoutType]); const closePopover = useCallback(() => { @@ -45,50 +154,19 @@ export const MetricsAlertDropdown = () => { const togglePopover = useCallback(() => { setPopoverOpen(!popoverOpen); }, [setPopoverOpen, popoverOpen]); - const infrastructureAlertsPanel = useMemo( - () => ({ - id: 1, - title: i18n.translate('xpack.infra.alerting.infrastructureDropdownTitle', { - defaultMessage: 'Infrastructure rules', - }), - items: [ - { - 'data-test-subj': 'inventory-alerts-create-rule', - name: i18n.translate('xpack.infra.alerting.createInventoryRuleButton', { - defaultMessage: 'Create inventory rule', - }), - onClick: () => { - closePopover(); - setVisibleFlyoutType('inventory'); - }, - }, - ], - }), - [setVisibleFlyoutType, closePopover] - ); - const metricsAlertsPanel = useMemo( - () => ({ - id: 2, - title: i18n.translate('xpack.infra.alerting.metricsDropdownTitle', { - defaultMessage: 'Metrics rules', - }), - items: [ - { - 'data-test-subj': 'metrics-threshold-alerts-create-rule', - name: i18n.translate('xpack.infra.alerting.createThresholdRuleButton', { - defaultMessage: 'Create threshold rule', - }), - onClick: () => { - closePopover(); - setVisibleFlyoutType('metricThreshold'); - }, - }, - ], - }), - [setVisibleFlyoutType, closePopover] + const onCreateRuleClick = useCallback( + (flyoutType: VisibleFlyoutType) => { + closePopover(); + setVisibleFlyoutType(flyoutType); + }, + [closePopover] ); + const infrastructureMenu = useInfrastructureMenu(onCreateRuleClick); + const metricsMenu = useMetricsMenu(onCreateRuleClick); + const customThresholdMenu = useCustomThresholdMenu(onCreateRuleClick); + const manageRulesLinkProps = observability.useRulesLink(); const manageAlertsMenuItem = useMemo( @@ -102,56 +180,27 @@ export const MetricsAlertDropdown = () => { [manageRulesLinkProps] ); - const firstPanelMenuItems: EuiContextMenuPanelDescriptor['items'] = useMemo( - () => - canCreateAlerts - ? [ - { - 'data-test-subj': 'inventory-alerts-menu-option', - name: i18n.translate('xpack.infra.alerting.infrastructureDropdownMenu', { - defaultMessage: 'Infrastructure', - }), - panel: 1, - }, - { - 'data-test-subj': 'metrics-threshold-alerts-menu-option', - name: i18n.translate('xpack.infra.alerting.metricsDropdownMenu', { - defaultMessage: 'Metrics', - }), - panel: 2, - }, - ...(featureFlags.customThresholdAlertsEnabled - ? [ - { - 'data-test-subj': 'custom-threshold-alerts-menu-option', - name: i18n.translate('xpack.infra.alerting.customThresholdDropdownMenu', { - defaultMessage: 'Create custom threshold rule', - }), - onClick: () => { - closePopover(); - setVisibleFlyoutType('customThreshold'); - }, - }, - ] - : []), - manageAlertsMenuItem, - ] - : [manageAlertsMenuItem], - [canCreateAlerts, closePopover, featureFlags.customThresholdAlertsEnabled, manageAlertsMenuItem] - ); - const panels: EuiContextMenuPanelDescriptor[] = useMemo( - () => - [ - { - id: 0, - title: i18n.translate('xpack.infra.alerting.alertDropdownTitle', { - defaultMessage: 'Alerts and rules', - }), - items: firstPanelMenuItems, - }, - ].concat(canCreateAlerts ? [infrastructureAlertsPanel, metricsAlertsPanel] : []), - [infrastructureAlertsPanel, metricsAlertsPanel, firstPanelMenuItems, canCreateAlerts] + () => [ + { + id: 0, + title: i18n.translate('xpack.infra.alerting.alertDropdownTitle', { + defaultMessage: 'Alerts and rules', + }), + items: canCreateAlerts + ? [ + ...infrastructureMenu.items, + ...metricsMenu.items, + ...customThresholdMenu.items, + manageAlertsMenuItem, + ] + : [manageAlertsMenuItem], + }, + ...(canCreateAlerts + ? [...infrastructureMenu.panels, ...metricsMenu.panels, ...customThresholdMenu.panels] + : []), + ], + [canCreateAlerts, infrastructureMenu, metricsMenu, customThresholdMenu, manageAlertsMenuItem] ); return ( diff --git a/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx b/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx index 3e064d26159e4..19e60e43fd877 100644 --- a/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx +++ b/x-pack/plugins/infra/public/alerting/custom_threshold/components/alert_flyout.tsx @@ -27,6 +27,15 @@ export function AlertFlyout({ onClose }: Props) { onClose, canChangeTrigger: false, ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + metadata: { + currentOptions: { + /* + Setting the groupBy is currently required in custom threshold + rule for it to populate the rule with additional host context. + */ + groupBy: 'host.name', + }, + }, }); }, [onClose, triggersActionsUI]); diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/alert_flyout.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/alert_flyout.tsx deleted file mode 100644 index a2b0284708459..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/alert_flyout.tsx +++ /dev/null @@ -1,53 +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, { useCallback, useContext, useMemo } from 'react'; - -import { TriggerActionsContext } from '../../../utils/triggers_actions_context'; -import { METRIC_ANOMALY_ALERT_TYPE_ID } from '../../../../common/alerting/metrics'; -import { InfraWaffleMapOptions } from '../../../lib/lib'; -import { InventoryItemType } from '../../../../common/inventory_models/types'; -import { useAlertPrefillContext } from '../../use_alert_prefill'; - -interface Props { - visible?: boolean; - metric?: InfraWaffleMapOptions['metric']; - nodeType?: InventoryItemType; - filter?: string; - setVisible(val: boolean): void; -} - -export const AlertFlyout = ({ metric, nodeType, visible, setVisible }: Props) => { - const { triggersActionsUI } = useContext(TriggerActionsContext); - - const onCloseFlyout = useCallback(() => setVisible(false), [setVisible]); - const AddAlertFlyout = useMemo( - () => - triggersActionsUI && - triggersActionsUI.getAddRuleFlyout({ - consumer: 'infrastructure', - onClose: onCloseFlyout, - canChangeTrigger: false, - ruleTypeId: METRIC_ANOMALY_ALERT_TYPE_ID, - metadata: { - metric, - nodeType, - }, - }), - // eslint-disable-next-line react-hooks/exhaustive-deps - [triggersActionsUI, visible] - ); - - return <>{visible && AddAlertFlyout}; -}; - -export const PrefilledAnomalyAlertFlyout = ({ onClose }: { onClose(): void }) => { - const { inventoryPrefill } = useAlertPrefillContext(); - const { nodeType, metric } = inventoryPrefill; - - return ; -}; diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.test.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.test.tsx deleted file mode 100644 index de3fcd03df675..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.test.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -// We are using this inside a `jest.mock` call. Jest requires dynamic dependencies to be prefixed with `mock` -import { coreMock as mockCoreMock } from '@kbn/core/public/mocks'; -import React from 'react'; -import { Expression, AlertContextMeta } from './expression'; -import { act } from 'react-dom/test-utils'; -import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; - -jest.mock('../../../containers/metrics_source/source', () => ({ - withSourceProvider: () => jest.fn, - useSourceContext: () => ({ - source: { id: 'default' }, - createDerivedIndexPattern: () => ({ fields: [], title: 'metricbeat-*' }), - }), -})); - -jest.mock('../../../hooks/use_kibana', () => ({ - useKibanaContextForPlugin: () => ({ - services: mockCoreMock.createStart(), - }), -})); - -jest.mock('../../../hooks/use_kibana_space', () => ({ - useActiveKibanaSpace: () => ({ - space: { id: 'default' }, - }), -})); - -jest.mock('../../../containers/ml/infra_ml_capabilities', () => ({ - useInfraMLCapabilities: () => ({ - isLoading: false, - hasInfraMLCapabilities: true, - }), -})); - -const dataViewMock = dataViewPluginMocks.createStartContract(); - -describe('Expression', () => { - async function setup(currentOptions: AlertContextMeta) { - const ruleParams = { - metric: undefined, - nodeType: undefined, - threshold: 50, - }; - const wrapper = mountWithIntl( - Reflect.set(ruleParams, key, value)} - setRuleProperty={() => {}} - metadata={currentOptions} - dataViews={dataViewMock} - /> - ); - - const update = async () => - await act(async () => { - await nextTick(); - wrapper.update(); - }); - - await update(); - - return { wrapper, update, ruleParams }; - } - - it('should prefill the alert using the context metadata', async () => { - const currentOptions = { - nodeType: 'pod', - metric: { type: 'tx' }, - }; - const { ruleParams } = await setup(currentOptions as AlertContextMeta); - expect(ruleParams.nodeType).toBe('k8s'); - expect(ruleParams.metric).toBe('network_out'); - }); -}); diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.tsx deleted file mode 100644 index 76dbac0b8821b..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/expression.tsx +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { EuiFlexGroup, EuiSkeletonText, EuiSpacer, EuiText } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { euiStyled, EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import { - RuleTypeParams, - RuleTypeParamsExpressionProps, - WhenExpression, -} from '@kbn/triggers-actions-ui-plugin/public'; -import { ML_ANOMALY_THRESHOLD } from '@kbn/ml-anomaly-utils/anomaly_threshold'; -import { useSourceContext, withSourceProvider } from '../../../containers/metrics_source'; -import { MetricAnomalyParams } from '../../../../common/alerting/metrics'; -import { findInventoryModel } from '../../../../common/inventory_models'; -import { InventoryItemType, SnapshotMetricType } from '../../../../common/inventory_models/types'; -import { SubscriptionSplashPrompt } from '../../../components/subscription_splash_content'; -import { useInfraMLCapabilities } from '../../../containers/ml/infra_ml_capabilities'; -import { useActiveKibanaSpace } from '../../../hooks/use_kibana_space'; -import { InfraWaffleMapOptions } from '../../../lib/lib'; -import { InfluencerFilter } from './influencer_filter'; -import { NodeTypeExpression } from './node_type'; -import { SeverityThresholdExpression } from './severity_threshold'; - -export interface AlertContextMeta { - metric?: InfraWaffleMapOptions['metric']; - nodeType?: InventoryItemType; -} - -type AlertParams = RuleTypeParams & - MetricAnomalyParams & { sourceId: string; spaceId: string; hasInfraMLCapabilities: boolean }; - -type Props = Omit< - RuleTypeParamsExpressionProps, - 'defaultActionGroupId' | 'actionGroups' | 'charts' | 'data' | 'unifiedSearch' | 'onChangeMetaData' ->; - -export const defaultExpression = { - metric: 'memory_usage' as MetricAnomalyParams['metric'], - threshold: ML_ANOMALY_THRESHOLD.MAJOR as MetricAnomalyParams['threshold'], - nodeType: 'hosts' as MetricAnomalyParams['nodeType'], - influencerFilter: undefined, -}; - -export const Expression: React.FC = (props) => { - const { hasInfraMLCapabilities, isLoading: isLoadingMLCapabilities } = useInfraMLCapabilities(); - const { space } = useActiveKibanaSpace(); - - const { setRuleParams, ruleParams, ruleInterval, metadata } = props; - const { source, createDerivedIndexPattern } = useSourceContext(); - - const derivedIndexPattern = useMemo( - () => createDerivedIndexPattern(), - [createDerivedIndexPattern] - ); - - const [influencerFieldName, updateInfluencerFieldName] = useState( - ruleParams.influencerFilter?.fieldName ?? 'host.name' - ); - - useEffect(() => { - setRuleParams('hasInfraMLCapabilities', hasInfraMLCapabilities); - }, [setRuleParams, hasInfraMLCapabilities]); - - useEffect(() => { - if (ruleParams.influencerFilter) { - setRuleParams('influencerFilter', { - ...ruleParams.influencerFilter, - fieldName: influencerFieldName, - }); - } - }, [influencerFieldName, ruleParams, setRuleParams]); - const updateInfluencerFieldValue = useCallback( - (value: string) => { - if (value) { - setRuleParams('influencerFilter', { - ...ruleParams.influencerFilter, - fieldValue: value, - } as MetricAnomalyParams['influencerFilter']); - } else { - setRuleParams('influencerFilter', undefined); - } - }, - [setRuleParams, ruleParams] - ); - - useEffect(() => { - setRuleParams('alertInterval', ruleInterval); - }, [setRuleParams, ruleInterval]); - - const updateNodeType = useCallback( - (nt: any) => { - setRuleParams('nodeType', nt); - }, - [setRuleParams] - ); - - const updateMetric = useCallback( - (metric: string) => { - setRuleParams('metric', metric as MetricAnomalyParams['metric']); - }, - [setRuleParams] - ); - - const updateSeverityThreshold = useCallback( - (threshold: any) => { - setRuleParams('threshold', threshold); - }, - [setRuleParams] - ); - - const prefillNodeType = useCallback(() => { - const md = metadata; - if (md && md.nodeType) { - setRuleParams( - 'nodeType', - getMLNodeTypeFromInventoryNodeType(md.nodeType) ?? defaultExpression.nodeType - ); - } else { - setRuleParams('nodeType', defaultExpression.nodeType); - } - }, [metadata, setRuleParams]); - - const prefillMetric = useCallback(() => { - const md = metadata; - if (md && md.metric) { - setRuleParams( - 'metric', - getMLMetricFromInventoryMetric(md.metric.type) ?? defaultExpression.metric - ); - } else { - setRuleParams('metric', defaultExpression.metric); - } - }, [metadata, setRuleParams]); - - useEffect(() => { - if (!ruleParams.nodeType) { - prefillNodeType(); - } - - if (!ruleParams.threshold) { - setRuleParams('threshold', defaultExpression.threshold); - } - - if (!ruleParams.metric) { - prefillMetric(); - } - - if (!ruleParams.sourceId) { - setRuleParams('sourceId', source?.id || 'default'); - } - - if (!ruleParams.spaceId) { - setRuleParams('spaceId', space?.id || 'default'); - } - }, [metadata, derivedIndexPattern, defaultExpression, source, space]); // eslint-disable-line react-hooks/exhaustive-deps - - if (isLoadingMLCapabilities) return ; - if (!hasInfraMLCapabilities) return ; - - return ( - // https://github.com/elastic/kibana/issues/89506 - - -

- -

-
- - - - - - - - - - - - - - - - - -
- ); -}; - -// required for dynamic import -// eslint-disable-next-line import/no-default-export -export default withSourceProvider(Expression)('default'); - -const StyledExpressionRow = euiStyled(EuiFlexGroup)` - display: flex; - flex-wrap: wrap; - margin: 0 -4px; -`; - -const StyledExpression = euiStyled.div` - padding: 0 4px; -`; - -const getDisplayNameForType = (type: InventoryItemType) => { - const inventoryModel = findInventoryModel(type); - return inventoryModel.displayName; -}; - -export const nodeTypes: { [key: string]: any } = { - hosts: { - text: getDisplayNameForType('host'), - value: 'hosts', - }, - k8s: { - text: getDisplayNameForType('pod'), - value: 'k8s', - }, -}; - -const getMLMetricFromInventoryMetric: ( - metric: SnapshotMetricType -) => MetricAnomalyParams['metric'] | null = (metric) => { - switch (metric) { - case 'memory': - return 'memory_usage'; - case 'tx': - return 'network_out'; - case 'rx': - return 'network_in'; - default: - return null; - } -}; - -const getMLNodeTypeFromInventoryNodeType: ( - nodeType: InventoryItemType -) => MetricAnomalyParams['nodeType'] | null = (nodeType) => { - switch (nodeType) { - case 'host': - return 'hosts'; - case 'pod': - return 'k8s'; - default: - return null; - } -}; diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/influencer_filter.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/influencer_filter.tsx deleted file mode 100644 index cc1e664d6f9d9..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/influencer_filter.tsx +++ /dev/null @@ -1,193 +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 { debounce } from 'lodash'; -import { i18n } from '@kbn/i18n'; -import React, { useState, useCallback, useEffect, useMemo } from 'react'; -import { first } from 'lodash'; -import { EuiFlexGroup, EuiFormRow, EuiCheckbox, EuiFlexItem, EuiSelect } from '@elastic/eui'; -import { - MetricsExplorerKueryBar, - CurryLoadSuggestionsType, -} from '../../../pages/metrics/metrics_explorer/components/kuery_bar'; -import { MetricAnomalyParams } from '../../../../common/alerting/metrics'; - -interface Props { - fieldName: string; - fieldValue: string; - nodeType: MetricAnomalyParams['nodeType']; - onChangeFieldName: (v: string) => void; - onChangeFieldValue: (v: string) => void; - derivedIndexPattern: Parameters[0]['derivedIndexPattern']; -} - -const FILTER_TYPING_DEBOUNCE_MS = 500; - -export const InfluencerFilter = ({ - fieldName, - fieldValue, - nodeType, - onChangeFieldName, - onChangeFieldValue, - derivedIndexPattern, -}: Props) => { - const fieldNameOptions = useMemo( - () => (nodeType === 'k8s' ? k8sFieldNames : hostFieldNames), - [nodeType] - ); - - // If initial props contain a fieldValue, assume it was passed in from loaded alertParams, - // and enable the UI element - const [isEnabled, updateIsEnabled] = useState(fieldValue ? true : false); - const [storedFieldValue, updateStoredFieldValue] = useState(fieldValue); - - useEffect( - () => - nodeType === 'k8s' - ? onChangeFieldName(first(k8sFieldNames)!.value) - : onChangeFieldName(first(hostFieldNames)!.value), - [nodeType, onChangeFieldName] - ); - - const onSelectFieldName = useCallback( - (e) => onChangeFieldName(e.target.value), - [onChangeFieldName] - ); - const onUpdateFieldValue = useCallback( - (value) => { - updateStoredFieldValue(value); - onChangeFieldValue(value); - }, - [onChangeFieldValue] - ); - - const toggleEnabled = useCallback(() => { - const nextState = !isEnabled; - updateIsEnabled(nextState); - if (!nextState) { - onChangeFieldValue(''); - } else { - onChangeFieldValue(storedFieldValue); - } - }, [isEnabled, updateIsEnabled, onChangeFieldValue, storedFieldValue]); - - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - const debouncedOnUpdateFieldValue = useCallback( - debounce(onUpdateFieldValue, FILTER_TYPING_DEBOUNCE_MS), - [onUpdateFieldValue] - ); - - const affixFieldNameToQuery: CurryLoadSuggestionsType = - (fn) => (expression, cursorPosition, maxSuggestions) => { - // Add the field name to the front of the passed-in query - const prefix = `${fieldName}:`; - // Trim whitespace to prevent AND/OR suggestions - const modifiedExpression = `${prefix}${expression}`.trim(); - // Move the cursor position forward by the length of the field name - const modifiedPosition = cursorPosition + prefix.length; - return fn(modifiedExpression, modifiedPosition, maxSuggestions, (suggestions) => - suggestions - .map((s) => ({ - ...s, - // Remove quotes from suggestions - text: s.text.replace(/\"/g, '').trim(), - // Offset the returned suggestions' cursor positions so that they can be autocompleted accurately - start: s.start - prefix.length, - end: s.end - prefix.length, - })) - // Removing quotes can lead to an already-selected suggestion still coming up in the autocomplete list, - // so filter these out - .filter((s) => !expression.startsWith(s.text)) - ); - }; - - return ( - - } - helpText={ - isEnabled ? ( - <> - {i18n.translate('xpack.infra.metrics.alertFlyout.anomalyFilterHelpText', { - defaultMessage: - 'Limit the scope of your alert trigger to anomalies influenced by certain node(s).', - })} -
- {i18n.translate('xpack.infra.metrics.alertFlyout.anomalyFilterHelpTextExample', { - defaultMessage: 'For example: "my-node-1" or "my-node-*"', - })} - - ) : null - } - fullWidth - display="rowCompressed" - > - {isEnabled ? ( - - - - - - - - - ) : ( - <> - )} -
- ); -}; - -const hostFieldNames = [ - { - value: 'host.name', - text: 'host.name', - }, -]; - -const k8sFieldNames = [ - { - value: 'kubernetes.pod.uid', - text: 'kubernetes.pod.uid', - }, - { - value: 'kubernetes.node.name', - text: 'kubernetes.node.name', - }, - { - value: 'kubernetes.namespace', - text: 'kubernetes.namespace', - }, -]; - -const filterByNodeLabel = i18n.translate('xpack.infra.metrics.alertFlyout.filterByNodeLabel', { - defaultMessage: 'Filter by node', -}); diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/node_type.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/node_type.tsx deleted file mode 100644 index a3cfbc978388a..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/node_type.tsx +++ /dev/null @@ -1,118 +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, { useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiExpression, EuiPopover, EuiFlexGroup, EuiFlexItem, EuiSelect } from '@elastic/eui'; -import { EuiPopoverTitle, EuiButtonIcon } from '@elastic/eui'; -import { MetricAnomalyParams } from '../../../../common/alerting/metrics'; - -type Node = MetricAnomalyParams['nodeType']; - -interface WhenExpressionProps { - value: Node; - options: { [key: string]: { text: string; value: Node } }; - onChange: (value: Node) => void; - popupPosition?: - | 'upCenter' - | 'upLeft' - | 'upRight' - | 'downCenter' - | 'downLeft' - | 'downRight' - | 'leftCenter' - | 'leftUp' - | 'leftDown' - | 'rightCenter' - | 'rightUp' - | 'rightDown'; -} - -export const NodeTypeExpression = ({ - value, - options, - onChange, - popupPosition, -}: WhenExpressionProps) => { - const [aggTypePopoverOpen, setAggTypePopoverOpen] = useState(false); - - return ( - { - setAggTypePopoverOpen(true); - }} - /> - } - isOpen={aggTypePopoverOpen} - closePopover={() => { - setAggTypePopoverOpen(false); - }} - ownFocus - anchorPosition={popupPosition ?? 'downLeft'} - > -
- setAggTypePopoverOpen(false)}> - - - { - onChange(e.target.value as Node); - setAggTypePopoverOpen(false); - }} - options={Object.values(options).map((o) => o)} - /> -
-
- ); -}; - -interface ClosablePopoverTitleProps { - children: JSX.Element; - onClose: () => void; -} - -export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitleProps) => { - return ( - - - {children} - - onClose()} - /> - - - - ); -}; diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/severity_threshold.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/severity_threshold.tsx deleted file mode 100644 index d910de567a1e9..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/severity_threshold.tsx +++ /dev/null @@ -1,141 +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, { useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiExpression, EuiPopover, EuiFlexGroup, EuiFlexItem, EuiSelect } from '@elastic/eui'; -import { EuiPopoverTitle, EuiButtonIcon } from '@elastic/eui'; -import { ML_ANOMALY_THRESHOLD } from '@kbn/ml-anomaly-utils/anomaly_threshold'; - -interface WhenExpressionProps { - value: Exclude; - onChange: (value: ML_ANOMALY_THRESHOLD) => void; - popupPosition?: - | 'upCenter' - | 'upLeft' - | 'upRight' - | 'downCenter' - | 'downLeft' - | 'downRight' - | 'leftCenter' - | 'leftUp' - | 'leftDown' - | 'rightCenter' - | 'rightUp' - | 'rightDown'; -} - -const options = { - [ML_ANOMALY_THRESHOLD.CRITICAL]: { - text: i18n.translate('xpack.infra.metrics.alertFlyout.expression.severityScore.criticalLabel', { - defaultMessage: 'Critical', - }), - value: ML_ANOMALY_THRESHOLD.CRITICAL, - }, - [ML_ANOMALY_THRESHOLD.MAJOR]: { - text: i18n.translate('xpack.infra.metrics.alertFlyout.expression.severityScore.majorLabel', { - defaultMessage: 'Major', - }), - value: ML_ANOMALY_THRESHOLD.MAJOR, - }, - [ML_ANOMALY_THRESHOLD.MINOR]: { - text: i18n.translate('xpack.infra.metrics.alertFlyout.expression.severityScore.minorLabel', { - defaultMessage: 'Minor', - }), - value: ML_ANOMALY_THRESHOLD.MINOR, - }, - [ML_ANOMALY_THRESHOLD.WARNING]: { - text: i18n.translate('xpack.infra.metrics.alertFlyout.expression.severityScore.warningLabel', { - defaultMessage: 'Warning', - }), - value: ML_ANOMALY_THRESHOLD.WARNING, - }, -}; - -export const SeverityThresholdExpression = ({ - value, - onChange, - popupPosition, -}: WhenExpressionProps) => { - const [aggTypePopoverOpen, setAggTypePopoverOpen] = useState(false); - - return ( - { - setAggTypePopoverOpen(true); - }} - /> - } - isOpen={aggTypePopoverOpen} - closePopover={() => { - setAggTypePopoverOpen(false); - }} - ownFocus - anchorPosition={popupPosition ?? 'downLeft'} - > -
- setAggTypePopoverOpen(false)}> - - - { - onChange(Number(e.target.value) as ML_ANOMALY_THRESHOLD); - setAggTypePopoverOpen(false); - }} - options={Object.values(options).map((o) => o)} - /> -
-
- ); -}; - -interface ClosablePopoverTitleProps { - children: JSX.Element; - onClose: () => void; -} - -export const ClosablePopoverTitle = ({ children, onClose }: ClosablePopoverTitleProps) => { - return ( - - - {children} - - onClose()} - /> - - - - ); -}; diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/validation.tsx b/x-pack/plugins/infra/public/alerting/metric_anomaly/components/validation.tsx deleted file mode 100644 index fa278674d55e8..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/components/validation.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 { i18n } from '@kbn/i18n'; -import type { ValidationResult } from '@kbn/triggers-actions-ui-plugin/public'; - -export function validateMetricAnomaly({ - hasInfraMLCapabilities, -}: { - hasInfraMLCapabilities: boolean; -}): ValidationResult { - const validationResult = { errors: {} }; - const errors: { - hasInfraMLCapabilities: string[]; - } = { - hasInfraMLCapabilities: [], - }; - - validationResult.errors = errors; - - if (!hasInfraMLCapabilities) { - errors.hasInfraMLCapabilities.push( - i18n.translate('xpack.infra.metrics.alertFlyout.error.mlCapabilitiesRequired', { - defaultMessage: 'Cannot create an anomaly alert when machine learning is disabled.', - }) - ); - } - - return validationResult; -} diff --git a/x-pack/plugins/infra/public/alerting/metric_anomaly/index.ts b/x-pack/plugins/infra/public/alerting/metric_anomaly/index.ts deleted file mode 100644 index 2dfee3891b86b..0000000000000 --- a/x-pack/plugins/infra/public/alerting/metric_anomaly/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import React from 'react'; -import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; -import { RuleTypeParams } from '@kbn/alerting-plugin/common'; -import { METRIC_ANOMALY_ALERT_TYPE_ID } from '../../../common/alerting/metrics'; -import { validateMetricAnomaly } from './components/validation'; - -interface MetricAnomalyRuleTypeParams extends RuleTypeParams { - hasInfraMLCapabilities: boolean; -} - -export function createMetricAnomalyRuleType(): RuleTypeModel { - return { - id: METRIC_ANOMALY_ALERT_TYPE_ID, - description: i18n.translate('xpack.infra.metrics.anomaly.alertFlyout.alertDescription', { - defaultMessage: 'Alert when the anomaly score exceeds a defined threshold.', - }), - iconClass: 'bell', - documentationUrl(docLinks) { - return `${docLinks.ELASTIC_WEBSITE_URL}guide/en/observability/${docLinks.DOC_LINK_VERSION}/infrastructure-anomaly-alert.html`; - }, - ruleParamsExpression: React.lazy(() => import('./components/expression')), - validate: validateMetricAnomaly, - defaultActionMessage: i18n.translate( - 'xpack.infra.metrics.alerting.anomaly.defaultActionMessage', - { - defaultMessage: `\\{\\{alertName\\}\\} is in a state of \\{\\{context.alertState\\}\\} - -\\{\\{context.metric\\}\\} was \\{\\{context.summary\\}\\} than normal at \\{\\{context.timestamp\\}\\} - -Typical value: \\{\\{context.typical\\}\\} -Actual value: \\{\\{context.actual\\}\\} -`, - } - ), - requiresAppContext: false, - }; -} diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/host/nginx_charts.ts b/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/host/nginx_charts.ts deleted file mode 100644 index 7c18f5a5d65e6..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/host/nginx_charts.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { nginxLensFormulas } from '../../../formulas'; -import { XY_OVERRIDES } from '../../constants'; -import type { XYConfig } from '../../types'; - -export const nginxStubstatusCharts: XYConfig[] = [ - { - id: 'requestRate', - title: i18n.translate('xpack.infra.assetDetails.metricsCharts.nginx.requestRate', { - defaultMessage: 'Request Rate', - }), - - layers: [ - { - data: [nginxLensFormulas.requestRate], - type: 'visualization', - }, - ], - dataViewOrigin: 'metrics', - }, - { - id: 'activeConnections', - title: i18n.translate('xpack.infra.assetDetails.metricsCharts.nginx.activeConnections', { - defaultMessage: 'Active Connections', - }), - - layers: [ - { - data: [nginxLensFormulas.activeConnections], - type: 'visualization', - }, - ], - dataViewOrigin: 'metrics', - }, - { - id: 'requestsPerConnection', - title: i18n.translate('xpack.infra.assetDetails.metricsCharts.nginx.requestsPerConnection', { - defaultMessage: 'Requests Per Connection', - }), - - layers: [ - { - data: [nginxLensFormulas.requestsPerConnection], - type: 'visualization', - }, - ], - dataViewOrigin: 'metrics', - }, -]; - -export const nginxAccessCharts: XYConfig[] = [ - { - id: 'responseStatusCodes', - title: i18n.translate('xpack.infra.assetDetails.metricsCharts.nginx.responseStatusCodes', { - defaultMessage: 'Response Status Codes', - }), - - layers: [ - { - data: [ - nginxLensFormulas.successStatusCodes, - nginxLensFormulas.redirectStatusCodes, - nginxLensFormulas.clientErrorStatusCodes, - nginxLensFormulas.serverErrorStatusCodes, - ], - options: { - seriesType: 'area', - }, - type: 'visualization', - }, - ], - overrides: { - settings: XY_OVERRIDES.settings, - }, - dataViewOrigin: 'metrics', - }, -]; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/index.ts b/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/index.ts index 772241da4b73b..aef6787c088fc 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/index.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/dashboards/asset_details/index.ts @@ -7,17 +7,10 @@ import { hostMetricFlyoutCharts, hostMetricChartsFullPage } from './host/host_metric_charts'; import { hostKPICharts } from './host/host_kpi_charts'; -import { nginxAccessCharts, nginxStubstatusCharts } from './host/nginx_charts'; import { kubernetesCharts } from './host/kubernetes_charts'; export const assetDetailsDashboards = { host: { hostMetricFlyoutCharts, hostMetricChartsFullPage, hostKPICharts, keyField: 'host.name' }, - nginx: { - nginxStubstatusCharts, - nginxAccessCharts, - keyField: 'host.name', - dependsOn: ['nginx.stubstatus', 'nginx.access'], - }, kubernetes: { kubernetesCharts, keyField: 'kubernetes.node.name', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/index.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/index.ts index 18e993a0d0a99..fbdb959e0e945 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/index.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/index.ts @@ -6,5 +6,4 @@ */ export { hostLensFormulas } from './host'; -export { nginxLensFormulas } from './nginx'; export { kubernetesLensFormulas } from './kubernetes'; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/active_connections.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/active_connections.ts deleted file mode 100644 index 90161ac7ebc5f..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/active_connections.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; - -export const activeConnections: FormulaValueConfig = { - label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.activeConnections', { - defaultMessage: 'Active Connections', - }), - value: 'average(nginx.stubstatus.active)', - format: { - id: 'number', - params: { - decimals: 0, - }, - }, -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/client_error_status_codes.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/client_error_status_codes.ts deleted file mode 100644 index 2588f71f1444b..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/client_error_status_codes.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; -import { defaultPalette, Color } from '../../../../../../common/color_palette'; - -export const clientErrorStatusCodes: FormulaValueConfig = { - label: '400-499', - value: `count(kql='http.response.status_code >= 400 and http.response.status_code <= 499')`, - format: { - id: 'number', - params: { - decimals: 0, - }, - }, - color: defaultPalette[Color.color5], -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/index.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/index.ts deleted file mode 100644 index 87a1d5db40fd5..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/index.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 { requestRate } from './request_rate'; -import { activeConnections } from './active_connections'; -import { requestsPerConnection } from './requests_per_connection'; -import { successStatusCodes } from './success_status_codes'; -import { redirectStatusCodes } from './redirect_status_codes'; -import { clientErrorStatusCodes } from './client_error_status_codes'; -import { serverErrorStatusCodes } from './server_error_status_codes'; - -export const nginxLensFormulas = { - activeConnections, - requestRate, - requestsPerConnection, - successStatusCodes, - redirectStatusCodes, - clientErrorStatusCodes, - serverErrorStatusCodes, -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/redirect_status_codes.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/redirect_status_codes.ts deleted file mode 100644 index 637546667dbab..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/redirect_status_codes.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; -import { defaultPalette, Color } from '../../../../../../common/color_palette'; - -export const redirectStatusCodes: FormulaValueConfig = { - label: '300-399', - value: `count(kql='http.response.status_code >= 300 and http.response.status_code <= 399')`, - format: { - id: 'number', - params: { - decimals: 0, - }, - }, - color: defaultPalette[Color.color0], -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/request_rate.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/request_rate.ts deleted file mode 100644 index 1e86f28a4bfce..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/request_rate.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; - -export const requestRate: FormulaValueConfig = { - label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.requestRate', { - defaultMessage: 'Request Rate', - }), - value: 'differences(max(nginx.stubstatus.requests))', - format: { - id: 'number', - params: { - decimals: 0, - }, - }, - timeScale: 's', -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/requests_per_connection.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/requests_per_connection.ts deleted file mode 100644 index a74f46e2014da..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/requests_per_connection.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; - -export const requestsPerConnection: FormulaValueConfig = { - label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.requestsPerConnection', { - defaultMessage: 'Requests Per Connection', - }), - value: 'max(nginx.stubstatus.requests) / max(nginx.stubstatus.handled)', - format: { - id: 'number', - params: { - decimals: 0, - }, - }, -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/server_error_status_codes.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/server_error_status_codes.ts deleted file mode 100644 index f5fba7775190b..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/server_error_status_codes.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; -import { defaultPalette, Color } from '../../../../../../common/color_palette'; - -export const serverErrorStatusCodes: FormulaValueConfig = { - label: '500-599', - value: `count(kql='http.response.status_code >= 500 and http.response.status_code <= 599')`, - format: { - id: 'number', - params: { - decimals: 0, - }, - }, - color: defaultPalette[Color.color1], -}; diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/success_status_codes.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/success_status_codes.ts deleted file mode 100644 index 865ce8dd907b4..0000000000000 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/nginx/success_status_codes.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; -import { defaultPalette, Color } from '../../../../../../common/color_palette'; - -export const successStatusCodes: FormulaValueConfig = { - label: '200-299', - value: `count(kql='http.response.status_code >= 200 and http.response.status_code <= 299')`, - format: { - id: 'number', - params: { - decimals: 0, - }, - }, - color: defaultPalette[Color.color2], -}; diff --git a/x-pack/plugins/infra/public/components/asset_details/components/section_titles.tsx b/x-pack/plugins/infra/public/components/asset_details/components/section_titles.tsx index da639ff88bd13..0e4b1b7baa5ca 100644 --- a/x-pack/plugins/infra/public/components/asset_details/components/section_titles.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/components/section_titles.tsx @@ -64,14 +64,6 @@ export const MetricsSectionTitle = () => { ); }; -export const NginxMetricsSectionTitle = () => ( - -); - export const KubernetesMetricsSectionTitle = () => ( { + const { featureFlags } = usePluginConfig(); const [isAlertFlyoutVisible, { toggle: toggleAlertFlyout }] = useBoolean(false); const { overrides } = useAssetDetailsRenderPropsContext(); @@ -51,9 +53,11 @@ export const AlertsSummaryContent = ({ - - - + {featureFlags.inventoryThresholdAlertRuleEnabled && ( + + + + )} - + + {featureFlags.inventoryThresholdAlertRuleEnabled && ( + + )} ); }; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_section.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_section.tsx index 2360bc1a3864c..beaa4f8c4e8ce 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_section.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/metrics/metrics_section.tsx @@ -13,7 +13,6 @@ import { EuiFlexGroup } from '@elastic/eui'; import { assetDetailsDashboards } from '../../../../../common/visualizations'; import { MetricsSectionTitle, - NginxMetricsSectionTitle, KubernetesMetricsSectionTitle, } from '../../../components/section_titles'; import { useMetadataStateProviderContext } from '../../../hooks/use_metadata_state'; @@ -26,7 +25,7 @@ interface Props { logsDataView?: DataView; } -const { host, nginx, kubernetes } = assetDetailsDashboards; +const { host, kubernetes } = assetDetailsDashboards; export const MetricsSection = ({ assetName, metricsDataView, logsDataView, dateRange }: Props) => { return ( @@ -53,26 +52,6 @@ export const MetricsSection = ({ assetName, metricsDataView, logsDataView, dateR data-test-subj="infraAssetDetailsKubernetesMetricsChart" /> -
- ({ - ...chart, - dependsOn: ['nginx.stubstatus'], - })), - ...nginx.nginxAccessCharts.map((chart) => ({ - ...chart, - dependsOn: ['nginx.access'], - })), - ]} - metricsDataView={metricsDataView} - logsDataView={logsDataView} - data-test-subj="infraAssetDetailsNginxMetricsChart" - /> -
); }; diff --git a/x-pack/plugins/infra/public/components/asset_details/types.ts b/x-pack/plugins/infra/public/components/asset_details/types.ts index cc985f8d782bd..0ac33ce08ecfd 100644 --- a/x-pack/plugins/infra/public/components/asset_details/types.ts +++ b/x-pack/plugins/infra/public/components/asset_details/types.ts @@ -92,6 +92,5 @@ export interface RouteState { export type DataViewOrigin = 'logs' | 'metrics'; export enum INTEGRATION_NAME { - nginx = 'nginx', kubernetes = 'kubernetes', } diff --git a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx index 70b3cf466f749..a8afb67fb6e32 100644 --- a/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx +++ b/x-pack/plugins/infra/public/containers/plugin_config_context.test.tsx @@ -24,6 +24,9 @@ describe('usePluginConfig()', () => { logsUIEnabled: false, metricsExplorerEnabled: false, osqueryEnabled: false, + inventoryThresholdAlertRuleEnabled: true, + metricThresholdAlertRuleEnabled: true, + logThresholdAlertRuleEnabled: true, }, }; const { result } = renderHook(() => usePluginConfig(), { diff --git a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts index d956b30940f4c..a1381f9679d9b 100644 --- a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts @@ -11,6 +11,7 @@ import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { GetViewInAppRelativeUrlFnOpts, PluginSetupContract } from '@kbn/alerting-plugin/server'; import { observabilityPaths } from '@kbn/observability-plugin/common'; import { TimeUnitChar } from '@kbn/observability-plugin/common/utils/formatters/duration'; +import type { InfraConfig } from '../../../../common/plugin_config_types'; import { Comparator, METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, @@ -81,10 +82,15 @@ const groupActionVariableDescription = i18n.translate( } ); -export async function registerMetricInventoryThresholdRuleType( +export async function registerInventoryThresholdRuleType( alertingPlugin: PluginSetupContract, - libs: InfraBackendLibs + libs: InfraBackendLibs, + { featureFlags }: InfraConfig ) { + if (!featureFlags.inventoryThresholdAlertRuleEnabled) { + return; + } + alertingPlugin.registerType({ id: METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, name: i18n.translate('xpack.infra.metrics.inventory.alertName', { diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts index 40848b9a109ed..f16e7dfd284d2 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { GetViewInAppRelativeUrlFnOpts, PluginSetupContract } from '@kbn/alerting-plugin/server'; import { observabilityPaths } from '@kbn/observability-plugin/common'; +import type { InfraConfig } from '../../../../common/plugin_config_types'; import { O11Y_AAD_FIELDS } from '../../../../common/constants'; import { createLogThresholdExecutor, FIRED_ACTIONS } from './log_threshold_executor'; import { extractReferences, injectReferences } from './log_threshold_references_manager'; @@ -103,8 +104,13 @@ const viewInAppUrlActionVariableDescription = i18n.translate( export async function registerLogThresholdRuleType( alertingPlugin: PluginSetupContract, - libs: InfraBackendLibs + libs: InfraBackendLibs, + { featureFlags }: InfraConfig ) { + if (!featureFlags.logThresholdAlertRuleEnabled) { + return; + } + if (!alertingPlugin) { throw new Error( 'Cannot register log threshold alert type. Both the actions and alerting plugins need to be enabled.' diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/evaluate_condition.ts b/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/evaluate_condition.ts deleted file mode 100644 index 362cf0bc5a073..0000000000000 --- a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/evaluate_condition.ts +++ /dev/null @@ -1,51 +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 { MetricAnomalyParams } from '../../../../common/alerting/metrics'; -import { getMetricsHostsAnomalies, getMetricK8sAnomalies } from '../../infra_ml'; -import { MlSystem, MlAnomalyDetectors } from '../../../types'; - -type ConditionParams = Omit & { - spaceId: string; - startTime: number; - endTime: number; - mlSystem: MlSystem; - mlAnomalyDetectors: MlAnomalyDetectors; -}; - -export const evaluateCondition = async ({ - nodeType, - spaceId, - sourceId, - mlSystem, - mlAnomalyDetectors, - startTime, - endTime, - metric, - threshold, - influencerFilter, -}: ConditionParams) => { - const getAnomalies = nodeType === 'k8s' ? getMetricK8sAnomalies : getMetricsHostsAnomalies; - - const result = await getAnomalies({ - context: { - spaceId, - mlSystem, - mlAnomalyDetectors, - }, - sourceId: sourceId ?? 'default', - anomalyThreshold: threshold, - startTime, - endTime, - metric, - sort: { field: 'anomalyScore', direction: 'desc' }, - pagination: { pageSize: 100 }, - influencerFilter, - }); - - return result; -}; diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/metric_anomaly_executor.ts b/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/metric_anomaly_executor.ts deleted file mode 100644 index b6d583cb17e6b..0000000000000 --- a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/metric_anomaly_executor.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { KibanaRequest } from '@kbn/core/server'; -import { first } from 'lodash'; -import moment from 'moment'; -import { - ActionGroup, - AlertInstanceContext as AlertContext, - AlertInstanceState as AlertState, -} from '@kbn/alerting-plugin/common'; -import { RuleExecutorOptions } from '@kbn/alerting-plugin/server'; -import { MlPluginSetup } from '@kbn/ml-plugin/server'; -import { AlertStates, MetricAnomalyParams } from '../../../../common/alerting/metrics'; -import { getIntervalInSeconds } from '../../../../common/utils/get_interval_in_seconds'; -import { MappedAnomalyHit } from '../../infra_ml'; -import { InfraBackendLibs } from '../../infra_types'; -import { stateToAlertMessage } from '../common/messages'; -import { evaluateCondition } from './evaluate_condition'; -import { MetricAnomalyAllowedActionGroups } from './register_metric_anomaly_rule_type'; - -export const createMetricAnomalyExecutor = - (_libs: InfraBackendLibs, ml?: MlPluginSetup) => - async ({ - services, - params, - startedAt, - }: RuleExecutorOptions< - /** - * TODO: Remove this use of `any` by utilizing a proper type - */ - Record, - Record, - AlertState, - AlertContext, - MetricAnomalyAllowedActionGroups - >) => { - if (!ml) { - return { state: {} }; - } - const request = {} as KibanaRequest; - const mlSystem = ml.mlSystemProvider(request, services.savedObjectsClient); - const mlAnomalyDetectors = ml.anomalyDetectorsProvider(request, services.savedObjectsClient); - - const { metric, alertInterval, influencerFilter, sourceId, spaceId, nodeType, threshold } = - params as MetricAnomalyParams; - - const bucketInterval = getIntervalInSeconds('15m') * 1000; - const alertIntervalInMs = getIntervalInSeconds(alertInterval ?? '1m') * 1000; - - const endTime = startedAt.getTime(); - // Anomalies are bucketed at :00, :15, :30, :45 minutes every hour - const previousBucketStartTime = endTime - (endTime % bucketInterval); - - // If the alert interval is less than 15m, make sure that it actually queries an anomaly bucket - const startTime = Math.min(endTime - alertIntervalInMs, previousBucketStartTime); - - const { data } = await evaluateCondition({ - sourceId: sourceId ?? 'default', - spaceId: spaceId ?? 'default', - mlSystem, - mlAnomalyDetectors, - startTime, - endTime, - metric, - threshold, - nodeType, - influencerFilter, - }); - - const shouldAlertFire = data.length > 0; - - if (shouldAlertFire) { - const { - startTime: anomalyStartTime, - anomalyScore, - actual, - typical, - influencers, - } = first(data as MappedAnomalyHit[])!; - const alert = services.alertFactory.create(`${nodeType}-${metric}`); - - alert.scheduleActions(FIRED_ACTIONS_ID, { - alertState: stateToAlertMessage[AlertStates.ALERT], - timestamp: moment(anomalyStartTime).toISOString(), - anomalyScore, - actual, - typical, - metric: metricNameMap[metric], - summary: generateSummaryMessage(actual, typical), - influencers: influencers.join(', '), - }); - } - - return { state: {} }; - }; - -export const FIRED_ACTIONS_ID = 'metrics.anomaly.fired'; -export const FIRED_ACTIONS: ActionGroup = { - id: FIRED_ACTIONS_ID, - name: i18n.translate('xpack.infra.metrics.alerting.anomaly.fired', { - defaultMessage: 'Fired', - }), -}; - -const generateSummaryMessage = (actual: number, typical: number) => { - const differential = (Math.max(actual, typical) / Math.min(actual, typical)) - .toFixed(1) - .replace('.0', ''); - if (actual > typical) { - return i18n.translate('xpack.infra.metrics.alerting.anomaly.summaryHigher', { - defaultMessage: '{differential}x higher', - values: { - differential, - }, - }); - } else { - return i18n.translate('xpack.infra.metrics.alerting.anomaly.summaryLower', { - defaultMessage: '{differential}x lower', - values: { - differential, - }, - }); - } -}; - -const metricNameMap = { - memory_usage: i18n.translate('xpack.infra.metrics.alerting.anomaly.memoryUsage', { - defaultMessage: 'Memory usage', - }), - network_in: i18n.translate('xpack.infra.metrics.alerting.anomaly.networkIn', { - defaultMessage: 'Network in', - }), - network_out: i18n.translate('xpack.infra.metrics.alerting.anomaly.networkOut', { - defaultMessage: 'Network out', - }), -}; diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/preview_metric_anomaly_alert.ts b/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/preview_metric_anomaly_alert.ts deleted file mode 100644 index 5c55fa3499202..0000000000000 --- a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/preview_metric_anomaly_alert.ts +++ /dev/null @@ -1,132 +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 { Unit } from '@kbn/datemath'; -import { countBy } from 'lodash'; -import { - isTooManyBucketsPreviewException, - MetricAnomalyParams, - TOO_MANY_BUCKETS_PREVIEW_EXCEPTION, -} from '../../../../common/alerting/metrics'; -import { getIntervalInSeconds } from '../../../../common/utils/get_interval_in_seconds'; -import { MlAnomalyDetectors, MlSystem } from '../../../types'; -import { MappedAnomalyHit } from '../../infra_ml'; -import { evaluateCondition } from './evaluate_condition'; - -interface PreviewMetricAnomalyAlertParams { - mlSystem: MlSystem; - mlAnomalyDetectors: MlAnomalyDetectors; - spaceId: string; - params: MetricAnomalyParams; - sourceId: string; - lookback: Unit; - alertInterval: string; - alertThrottle: string; - alertOnNoData: boolean; - alertNotifyWhen: string; -} - -export const previewMetricAnomalyAlert = async ({ - mlSystem, - mlAnomalyDetectors, - spaceId, - params, - sourceId, - lookback, - alertInterval, - alertThrottle, - alertNotifyWhen, -}: PreviewMetricAnomalyAlertParams) => { - const { metric, threshold, influencerFilter, nodeType } = params as MetricAnomalyParams; - - const alertIntervalInSeconds = getIntervalInSeconds(alertInterval); - const throttleIntervalInSeconds = getIntervalInSeconds(alertThrottle); - - const lookbackInterval = `1${lookback}`; - const lookbackIntervalInSeconds = getIntervalInSeconds(lookbackInterval); - const endTime = Date.now(); - const startTime = endTime - lookbackIntervalInSeconds * 1000; - - const numberOfExecutions = Math.floor(lookbackIntervalInSeconds / alertIntervalInSeconds); - const bucketIntervalInSeconds = getIntervalInSeconds('15m'); - const bucketsPerExecution = Math.max( - 1, - Math.floor(alertIntervalInSeconds / bucketIntervalInSeconds) - ); - - try { - let anomalies: MappedAnomalyHit[] = []; - const { data } = await evaluateCondition({ - nodeType, - spaceId, - sourceId, - mlSystem, - mlAnomalyDetectors, - startTime, - endTime, - metric, - threshold, - influencerFilter, - }); - anomalies = [...anomalies, ...data]; - - const anomaliesByTime = countBy(anomalies, ({ startTime: anomStartTime }) => anomStartTime); - - let numberOfTimesFired = 0; - let numberOfNotifications = 0; - let throttleTracker = 0; - let previousActionGroup: string | null = null; - const notifyWithThrottle = (actionGroup: string) => { - if (alertNotifyWhen === 'onActionGroupChange') { - if (previousActionGroup !== actionGroup) numberOfNotifications++; - } else if (alertNotifyWhen === 'onThrottleInterval') { - if (throttleTracker === 0) numberOfNotifications++; - throttleTracker += alertIntervalInSeconds; - } else { - numberOfNotifications++; - } - previousActionGroup = actionGroup; - }; - // Mock each alert evaluation - for (let i = 0; i < numberOfExecutions; i++) { - const executionTime = startTime + alertIntervalInSeconds * 1000 * i; - // Get an array of bucket times this mock alert evaluation will be looking at - // Anomalies are bucketed at :00, :15, :30, :45 minutes every hour, - // so this is an array of how many of those times occurred between this evaluation - // and the previous one - const bucketsLookedAt = Array.from(Array(bucketsPerExecution), (_, idx) => { - const previousBucketStartTime = - executionTime - - (executionTime % (bucketIntervalInSeconds * 1000)) - - idx * bucketIntervalInSeconds * 1000; - return previousBucketStartTime; - }); - const anomaliesDetectedInBuckets = bucketsLookedAt.some((bucketTime) => - Reflect.has(anomaliesByTime, bucketTime) - ); - - if (anomaliesDetectedInBuckets) { - numberOfTimesFired++; - notifyWithThrottle('fired'); - } else { - previousActionGroup = 'recovered'; - if (throttleTracker > 0) { - throttleTracker += alertIntervalInSeconds; - } - } - if (throttleTracker >= throttleIntervalInSeconds) { - throttleTracker = 0; - } - } - - return { fired: numberOfTimesFired, notifications: numberOfNotifications }; - } catch (e) { - if (!isTooManyBucketsPreviewException(e)) throw e; - const { maxBuckets } = e; - throw new Error(`${TOO_MANY_BUCKETS_PREVIEW_EXCEPTION}:${maxBuckets}`); - } -}; diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/register_metric_anomaly_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/register_metric_anomaly_rule_type.ts deleted file mode 100644 index dc3fd1b28546c..0000000000000 --- a/x-pack/plugins/infra/server/lib/alerting/metric_anomaly/register_metric_anomaly_rule_type.ts +++ /dev/null @@ -1,125 +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 { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; -import { schema } from '@kbn/config-schema'; -import { i18n } from '@kbn/i18n'; -import { MlPluginSetup } from '@kbn/ml-plugin/server'; -import { - RuleType, - AlertInstanceState as AlertState, - AlertInstanceContext as AlertContext, - GetViewInAppRelativeUrlFnOpts, -} from '@kbn/alerting-plugin/server'; -import { RecoveredActionGroupId } from '@kbn/alerting-plugin/common'; -import { observabilityPaths } from '@kbn/observability-plugin/common'; -import { O11Y_AAD_FIELDS } from '../../../../common/constants'; -import { - createMetricAnomalyExecutor, - FIRED_ACTIONS, - FIRED_ACTIONS_ID, -} from './metric_anomaly_executor'; -import { METRIC_ANOMALY_ALERT_TYPE_ID } from '../../../../common/alerting/metrics'; -import { InfraBackendLibs } from '../../infra_types'; -import { oneOfLiterals, validateIsStringElasticsearchJSONFilter } from '../common/utils'; -import { alertStateActionVariableDescription } from '../common/messages'; - -export type MetricAnomalyAllowedActionGroups = typeof FIRED_ACTIONS_ID; - -export const registerMetricAnomalyRuleType = ( - libs: InfraBackendLibs, - ml?: MlPluginSetup -): RuleType< - /** - * TODO: Remove this use of `any` by utilizing a proper type - */ - Record, - never, // Only use if defining useSavedObjectReferences hook - Record, - AlertState, - AlertContext, - MetricAnomalyAllowedActionGroups, - RecoveredActionGroupId -> => ({ - id: METRIC_ANOMALY_ALERT_TYPE_ID, - name: i18n.translate('xpack.infra.metrics.anomaly.alertName', { - defaultMessage: 'Infrastructure anomaly', - }), - validate: { - params: schema.object( - { - nodeType: oneOfLiterals(['hosts', 'k8s']), - alertInterval: schema.string(), - metric: oneOfLiterals(['memory_usage', 'network_in', 'network_out']), - threshold: schema.number(), - filterQuery: schema.maybe( - schema.string({ validate: validateIsStringElasticsearchJSONFilter }) - ), - sourceId: schema.string(), - spaceId: schema.string(), - }, - { unknowns: 'allow' } - ), - }, - defaultActionGroupId: FIRED_ACTIONS_ID, - actionGroups: [FIRED_ACTIONS], - category: DEFAULT_APP_CATEGORIES.observability.id, - producer: 'infrastructure', - minimumLicenseRequired: 'basic', - isExportable: true, - executor: createMetricAnomalyExecutor(libs, ml), - fieldsForAAD: O11Y_AAD_FIELDS, - actionVariables: { - context: [ - { name: 'alertState', description: alertStateActionVariableDescription }, - { - name: 'metric', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyMetricDescription', { - defaultMessage: 'The metric name in the specified condition.', - }), - }, - { - name: 'timestamp', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyTimestampDescription', { - defaultMessage: 'A timestamp of when the anomaly was detected.', - }), - }, - { - name: 'anomalyScore', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyScoreDescription', { - defaultMessage: 'The exact severity score of the detected anomaly.', - }), - }, - { - name: 'actual', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyActualDescription', { - defaultMessage: 'The actual value of the monitored metric at the time of the anomaly.', - }), - }, - { - name: 'typical', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyTypicalDescription', { - defaultMessage: 'The typical value of the monitored metric at the time of the anomaly.', - }), - }, - { - name: 'summary', - description: i18n.translate('xpack.infra.metrics.alerting.anomalySummaryDescription', { - defaultMessage: 'A description of the anomaly, e.g. "2x higher."', - }), - }, - { - name: 'influencers', - description: i18n.translate('xpack.infra.metrics.alerting.anomalyInfluencersDescription', { - defaultMessage: 'A list of node names that influenced the anomaly.', - }), - }, - ], - }, - getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => - observabilityPaths.ruleDetails(rule.id), -}); diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index b3b82602f11f1..f7052b3e1916f 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -1903,6 +1903,9 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ logsUIEnabled: true, metricsExplorerEnabled: true, osqueryEnabled: true, + inventoryThresholdAlertRuleEnabled: true, + metricThresholdAlertRuleEnabled: true, + logThresholdAlertRuleEnabled: true, }, enabled: true, sources, diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts index ad6429eb2ba0f..e7ea693a0e74d 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts @@ -15,6 +15,7 @@ import { RuleType, } from '@kbn/alerting-plugin/server'; import { observabilityPaths } from '@kbn/observability-plugin/common'; +import type { InfraConfig } from '../../../../common/plugin_config_types'; import { Comparator, METRIC_THRESHOLD_ALERT_TYPE_ID } from '../../../../common/alerting/metrics'; import { METRIC_EXPLORER_AGGREGATIONS } from '../../../../common/http_api'; import { InfraBackendLibs } from '../../infra_types'; @@ -56,8 +57,13 @@ export type MetricThresholdAlertType = Omit & { export async function registerMetricThresholdRuleType( alertingPlugin: PluginSetupContract, - libs: InfraBackendLibs + libs: InfraBackendLibs, + { featureFlags }: InfraConfig ) { + if (!featureFlags.metricThresholdAlertRuleEnabled) { + return; + } + const baseCriterion = { threshold: schema.arrayOf(schema.number()), comparator: oneOfLiterals(Object.values(Comparator)), diff --git a/x-pack/plugins/infra/server/lib/alerting/register_rule_types.ts b/x-pack/plugins/infra/server/lib/alerting/register_rule_types.ts index ee05dc38cc1f5..36c836fc50aa7 100644 --- a/x-pack/plugins/infra/server/lib/alerting/register_rule_types.ts +++ b/x-pack/plugins/infra/server/lib/alerting/register_rule_types.ts @@ -7,12 +7,11 @@ import { legacyExperimentalFieldMap } from '@kbn/alerts-as-data-utils'; import { type IRuleTypeAlerts, PluginSetupContract } from '@kbn/alerting-plugin/server'; -import { MlPluginSetup } from '@kbn/ml-plugin/server'; import { registerMetricThresholdRuleType } from './metric_threshold/register_metric_threshold_rule_type'; -import { registerMetricInventoryThresholdRuleType } from './inventory_metric_threshold/register_inventory_metric_threshold_rule_type'; -import { registerMetricAnomalyRuleType } from './metric_anomaly/register_metric_anomaly_rule_type'; +import { registerInventoryThresholdRuleType } from './inventory_metric_threshold/register_inventory_metric_threshold_rule_type'; import { registerLogThresholdRuleType } from './log_threshold/register_log_threshold_rule_type'; import { InfraBackendLibs } from '../infra_types'; +import type { InfraConfig } from '../../types'; export const LOGS_RULES_ALERT_CONTEXT = 'observability.logs'; // Defines which alerts-as-data index logs rules will use @@ -35,18 +34,16 @@ export const MetricsRulesTypeAlertDefinition: IRuleTypeAlerts = { const registerRuleTypes = ( alertingPlugin: PluginSetupContract, libs: InfraBackendLibs, - ml?: MlPluginSetup + config: InfraConfig ) => { if (alertingPlugin) { - alertingPlugin.registerType(registerMetricAnomalyRuleType(libs, ml)); - const registerFns = [ registerLogThresholdRuleType, - registerMetricInventoryThresholdRuleType, + registerInventoryThresholdRuleType, registerMetricThresholdRuleType, ]; registerFns.forEach((fn) => { - fn(alertingPlugin, libs); + fn(alertingPlugin, libs, config); }); } }; diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index d9e3e3ee4dbac..bf31f4ed099d8 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -130,6 +130,9 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ logsUIEnabled: true, metricsExplorerEnabled: true, osqueryEnabled: true, + inventoryThresholdAlertRuleEnabled: true, + metricThresholdAlertRuleEnabled: true, + logThresholdAlertRuleEnabled: true, }, sources, enabled: true, diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index 04a57f294303f..2dae74a2083b6 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -83,7 +83,7 @@ export const config: PluginConfigDescriptor = { featureFlags: schema.object({ customThresholdAlertsEnabled: offeringBasedSchema({ traditional: schema.boolean({ defaultValue: false }), - serverless: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), }), logsUIEnabled: offeringBasedSchema({ traditional: schema.boolean({ defaultValue: true }), @@ -97,6 +97,18 @@ export const config: PluginConfigDescriptor = { traditional: schema.boolean({ defaultValue: true }), serverless: schema.boolean({ defaultValue: false }), }), + inventoryThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + metricThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + logThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), }), }), deprecations: configDeprecations, @@ -238,7 +250,7 @@ export class InfraServerPlugin } initInfraServer(this.libs); - registerRuleTypes(plugins.alerting, this.libs, plugins.ml); + registerRuleTypes(plugins.alerting, this.libs, this.config); core.http.registerRouteHandlerContext( 'infra', diff --git a/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts b/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts index 05b4452dc5557..6c5aafe34fa81 100644 --- a/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts +++ b/x-pack/plugins/infra/server/routes/log_alerts/chart_preview_data.ts @@ -16,8 +16,7 @@ export const initGetLogAlertsChartPreviewDataRoute = ({ framework, getStartServices, }: Pick) => { - // Replace with the corresponding logs alert rule feature flag - if (!framework.config.featureFlags.logsUIEnabled) { + if (!framework.config.featureFlags.logThresholdAlertRuleEnabled) { return; } diff --git a/x-pack/plugins/lens/common/constants.ts b/x-pack/plugins/lens/common/constants.ts index 4ee31881b0eb0..4274bdb17c747 100644 --- a/x-pack/plugins/lens/common/constants.ts +++ b/x-pack/plugins/lens/common/constants.ts @@ -87,3 +87,5 @@ export function getEditPath( export function getFullPath(id?: string) { return `/app/${PLUGIN_ID}${id ? getEditPath(id) : getBasePath()}`; } + +export const COLOR_MAPPING_OFF_BY_DEFAULT = true; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts index d9cfa8c84c62f..e12182cd07bff 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_helpers.ts @@ -11,6 +11,7 @@ import { VisualizeFieldContext } from '@kbn/ui-actions-plugin/public'; import { difference } from 'lodash'; import type { DataViewsContract, DataViewSpec } from '@kbn/data-views-plugin/public'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; +import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; import { DataViewPersistableStateService } from '@kbn/data-views-plugin/common'; import type { DataPublicPluginStart, TimefilterContract } from '@kbn/data-plugin/public'; import { EventAnnotationServiceType } from '@kbn/event-annotation-plugin/public'; @@ -18,7 +19,8 @@ import { type EventAnnotationGroupConfig, EVENT_ANNOTATION_GROUP_TYPE, } from '@kbn/event-annotation-common'; -import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; +import { COLOR_MAPPING_OFF_BY_DEFAULT } from '../../../common/constants'; + import type { Datasource, DatasourceMap, @@ -28,6 +30,7 @@ import type { InitializationOptions, VisualizationMap, VisualizeEditorContext, + SuggestionRequest, } from '../../types'; import { buildExpression } from './expression_helpers'; import { Document } from '../../persistence/saved_object_store'; @@ -37,6 +40,19 @@ import { readFromStorage } from '../../settings_storage'; import { loadIndexPatternRefs, loadIndexPatterns } from '../../data_views_service/loader'; import { getDatasourceLayers } from '../../state_management/utils'; +// there are 2 ways of coloring, the color mapping where the user can map specific colors to +// specific terms, and the palette assignment where the colors are assinged automatically +// by a palette with rotating the colors +const COLORING_METHOD: SuggestionRequest['mainPalette'] = COLOR_MAPPING_OFF_BY_DEFAULT + ? { + type: 'legacyPalette', + value: { + name: 'default', + type: 'palette', + }, + } + : { type: 'colorMapping', value: { ...DEFAULT_COLOR_MAPPING_CONFIG } }; + function getIndexPatterns( annotationGroupDataviewIds: string[], references?: SavedObjectReference[], @@ -290,8 +306,8 @@ export function initializeVisualization({ visualizationMap[visualizationState.activeId]?.initialize( () => '', visualizationState.state, - // initialize a new visualization always with the new color mapping - { type: 'colorMapping', value: { ...DEFAULT_COLOR_MAPPING_CONFIG } }, + // initialize a new visualization with the color mapping off + COLORING_METHOD, annotationGroups, references ) ?? visualizationState.state diff --git a/x-pack/plugins/lens/public/lens_suggestions_api.ts b/x-pack/plugins/lens/public/lens_suggestions_api.ts index e30bfefa66a97..cddcf5ade4cf3 100644 --- a/x-pack/plugins/lens/public/lens_suggestions_api.ts +++ b/x-pack/plugins/lens/public/lens_suggestions_api.ts @@ -7,12 +7,7 @@ import type { VisualizeFieldContext } from '@kbn/ui-actions-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { getSuggestions } from './editor_frame_service/editor_frame/suggestion_helpers'; -import type { - DatasourceMap, - VisualizationMap, - VisualizeEditorContext, - SuggestionRequest, -} from './types'; +import type { DatasourceMap, VisualizationMap, VisualizeEditorContext } from './types'; import type { DataViewsState } from './state_management'; interface SuggestionsApi { @@ -23,14 +18,6 @@ interface SuggestionsApi { excludedVisualizations?: string[]; } -const PREFERRED_PALETTE: SuggestionRequest['mainPalette'] = { - type: 'legacyPalette', - value: { - name: 'default', - type: 'palette', - }, -}; - export const suggestionsApi = ({ context, dataView, @@ -75,7 +62,6 @@ export const suggestionsApi = ({ visualizationState: undefined, visualizeTriggerFieldContext: context, dataViews, - mainPalette: PREFERRED_PALETTE, }); if (!suggestions.length) return []; const activeVisualization = suggestions[0]; @@ -98,7 +84,6 @@ export const suggestionsApi = ({ activeVisualization: visualizationMap[activeVisualization.visualizationId], visualizationState: activeVisualization.visualizationState, dataViews, - mainPalette: PREFERRED_PALETTE, }).filter((sug) => !sug.hide && sug.visualizationId !== 'lnsLegacyMetric'); const suggestionsList = [activeVisualization, ...newSuggestions]; // until we separate the text based suggestions logic from the dataview one, diff --git a/x-pack/plugins/lens/public/utils.ts b/x-pack/plugins/lens/public/utils.ts index 90011c6bad735..86c769444c69c 100644 --- a/x-pack/plugins/lens/public/utils.ts +++ b/x-pack/plugins/lens/public/utils.ts @@ -9,7 +9,7 @@ import { uniq, cloneDeep } from 'lodash'; import { i18n } from '@kbn/i18n'; import moment from 'moment-timezone'; import type { Serializable } from '@kbn/utility-types'; - +import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; import type { TimefilterContract } from '@kbn/data-plugin/public'; import type { IUiSettingsClient, SavedObjectReference } from '@kbn/core/public'; import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; @@ -36,6 +36,7 @@ import { } from './types'; import type { DatasourceStates, VisualizationState } from './state_management'; import type { IndexPatternServiceAPI } from './data_views_service/service'; +import { COLOR_MAPPING_OFF_BY_DEFAULT } from '../common/constants'; export function getVisualizeGeoFieldMessage(fieldType: string) { return i18n.translate('xpack.lens.visualizeGeoFieldMessage', { @@ -421,3 +422,10 @@ export function shouldRemoveSource( dropType === 'replace_incompatible') ); } + +export const getColorMappingDefaults = () => { + if (COLOR_MAPPING_OFF_BY_DEFAULT) { + return undefined; + } + return { ...DEFAULT_COLOR_MAPPING_CONFIG }; +}; diff --git a/x-pack/plugins/lens/public/visualizations/partition/suggestions.test.ts b/x-pack/plugins/lens/public/visualizations/partition/suggestions.test.ts index 6486c1a95558a..64b0488a79bb5 100644 --- a/x-pack/plugins/lens/public/visualizations/partition/suggestions.test.ts +++ b/x-pack/plugins/lens/public/visualizations/partition/suggestions.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { DEFAULT_COLOR_MAPPING_CONFIG, PaletteOutput } from '@kbn/coloring'; +import { PaletteOutput } from '@kbn/coloring'; import { suggestions } from './suggestions'; import type { DataType, SuggestionRequest } from '../../types'; import type { PieLayerState, PieVisualizationState } from '../../../common/types'; @@ -683,7 +683,7 @@ describe('suggestions', () => { legendMaxLines: 1, truncateLegend: true, nestedLegend: true, - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }, diff --git a/x-pack/plugins/lens/public/visualizations/partition/suggestions.ts b/x-pack/plugins/lens/public/visualizations/partition/suggestions.ts index e78c203670aec..eec86da39d606 100644 --- a/x-pack/plugins/lens/public/visualizations/partition/suggestions.ts +++ b/x-pack/plugins/lens/public/visualizations/partition/suggestions.ts @@ -7,7 +7,6 @@ import { partition } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; import type { SuggestionRequest, TableSuggestionColumn, @@ -24,6 +23,7 @@ import { isPartitionShape } from '../../../common/visualizations'; import type { PieChartType } from '../../../common/types'; import { PartitionChartsMeta } from './partition_charts_meta'; import { layerTypes } from '../..'; +import { getColorMappingDefaults } from '../../utils'; function hasIntervalScale(columns: TableSuggestionColumn[]) { return columns.some((col) => col.operation.scale === 'interval'); @@ -142,7 +142,7 @@ export function suggestions({ metrics: metricColumnIds, layerType: layerTypes.DATA, colorMapping: !mainPalette - ? { ...DEFAULT_COLOR_MAPPING_CONFIG } + ? getColorMappingDefaults() : mainPalette?.type === 'colorMapping' ? mainPalette.value : state.layers[0].colorMapping, @@ -157,7 +157,7 @@ export function suggestions({ nestedLegend: false, layerType: layerTypes.DATA, colorMapping: !mainPalette - ? { ...DEFAULT_COLOR_MAPPING_CONFIG } + ? getColorMappingDefaults() : mainPalette?.type === 'colorMapping' ? mainPalette.value : undefined, diff --git a/x-pack/plugins/lens/public/visualizations/partition/visualization.tsx b/x-pack/plugins/lens/public/visualizations/partition/visualization.tsx index 429089f743c33..da42517ad30cc 100644 --- a/x-pack/plugins/lens/public/visualizations/partition/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/partition/visualization.tsx @@ -51,13 +51,13 @@ import { DimensionDataExtraEditor, DimensionEditor } from './dimension_editor'; import { LayerSettings } from './layer_settings'; import { checkTableForContainsSmallValues } from './render_helpers'; import { DatasourcePublicAPI } from '../..'; -import { nonNullable } from '../../utils'; +import { nonNullable, getColorMappingDefaults } from '../../utils'; const metricLabel = i18n.translate('xpack.lens.pie.groupMetricLabelSingular', { defaultMessage: 'Metric', }); -function newLayerState(layerId: string, colorMapping: ColorMapping.Config): PieLayerState { +function newLayerState(layerId: string, colorMapping?: ColorMapping.Config): PieLayerState { return { layerId, primaryGroups: [], @@ -168,9 +168,7 @@ export const getPieVisualization = ({ layers: [ newLayerState( addNewLayer(), - mainPalette?.type === 'colorMapping' - ? mainPalette.value - : { ...DEFAULT_COLOR_MAPPING_CONFIG } + mainPalette?.type === 'colorMapping' ? mainPalette.value : getColorMappingDefaults() ), ], palette: mainPalette?.type === 'legacyPalette' ? mainPalette.value : undefined, diff --git a/x-pack/plugins/lens/public/visualizations/tagcloud/suggestions.ts b/x-pack/plugins/lens/public/visualizations/tagcloud/suggestions.ts index 4a528c99d41ad..0ce9624305692 100644 --- a/x-pack/plugins/lens/public/visualizations/tagcloud/suggestions.ts +++ b/x-pack/plugins/lens/public/visualizations/tagcloud/suggestions.ts @@ -7,10 +7,10 @@ import { partition } from 'lodash'; import { IconChartTagcloud } from '@kbn/chart-icons'; -import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; import type { SuggestionRequest, VisualizationSuggestion } from '../../types'; import type { TagcloudState } from './types'; import { DEFAULT_STATE, TAGCLOUD_LABEL } from './constants'; +import { getColorMappingDefaults } from '../../utils'; export function getSuggestions({ table, @@ -42,15 +42,14 @@ export function getSuggestions({ return { previewIcon: IconChartTagcloud, title: TAGCLOUD_LABEL, - hide: true, // hide suggestions while in tech preview - score: 0.1, + score: bucket.operation.dataType === 'string' ? 0.4 : 0.2, state: { layerId: table.layerId, tagAccessor: bucket.columnId, valueAccessor: metrics[0].columnId, ...DEFAULT_STATE, colorMapping: !mainPalette - ? { ...DEFAULT_COLOR_MAPPING_CONFIG } + ? getColorMappingDefaults() : mainPalette?.type === 'colorMapping' ? mainPalette.value : undefined, diff --git a/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx b/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx index 7e7a667c778bb..bb69dfda2b0a0 100644 --- a/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/tagcloud/tagcloud_visualization.tsx @@ -16,11 +16,12 @@ import { buildExpressionFunction, ExpressionFunctionTheme, } from '@kbn/expressions-plugin/common'; -import { PaletteRegistry, DEFAULT_COLOR_MAPPING_CONFIG, getColorsFromMapping } from '@kbn/coloring'; +import { PaletteRegistry, getColorsFromMapping } from '@kbn/coloring'; import { IconChartTagcloud } from '@kbn/chart-icons'; import { SystemPaletteExpressionFunctionDefinition } from '@kbn/charts-plugin/common'; import useObservable from 'react-use/lib/useObservable'; import type { OperationMetadata, Visualization } from '../..'; +import { getColorMappingDefaults } from '../../utils'; import type { TagcloudState } from './types'; import { getSuggestions } from './suggestions'; import { TagcloudToolbar } from './tagcloud_toolbar'; @@ -47,7 +48,6 @@ export const getTagcloudVisualization = ({ groupLabel: i18n.translate('xpack.lens.pie.groupLabel', { defaultMessage: 'Proportion', }), - showExperimentalBadge: true, }, ], @@ -102,13 +102,14 @@ export const getTagcloudVisualization = ({ triggers: [VIS_EVENT_TO_TRIGGER.filter], - initialize(addNewLayer, state) { + initialize(addNewLayer, state, mainPalette) { return ( state || { layerId: addNewLayer(), layerType: LayerTypes.DATA, ...DEFAULT_STATE, - colorMapping: { ...DEFAULT_COLOR_MAPPING_CONFIG }, + colorMapping: + mainPalette?.type === 'colorMapping' ? mainPalette.value : getColorMappingDefaults(), } ); }, diff --git a/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx index 6be7d5a532759..4e0983e29860a 100644 --- a/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/tagcloud/tags_dimension_editor.tsx @@ -28,11 +28,10 @@ import { EuiBadge, } from '@elastic/eui'; import { useState, MutableRefObject, useCallback } from 'react'; -import { PalettePicker } from '@kbn/coloring/src/shared_components/coloring/palette_picker'; import { useDebouncedValue } from '@kbn/visualization-ui-components'; import { getColorCategories } from '@kbn/chart-expressions-common'; import type { TagcloudState } from './types'; -import { PalettePanelContainer } from '../../shared_components'; +import { PalettePanelContainer, PalettePicker } from '../../shared_components'; import { FramePublicAPI } from '../../types'; import { trackUiCounterEvents } from '../../lens_ui_telemetry'; diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx index 962766ee9c5d7..53d51849a6a7b 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.test.tsx @@ -57,7 +57,6 @@ import { } from './visualization_helpers'; import { cloneDeep } from 'lodash'; import { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; -import { EUIAmsterdamColorBlindPalette } from '@kbn/coloring'; const DATE_HISTORGRAM_COLUMN_ID = 'date_histogram_column'; const exampleAnnotation: EventAnnotationConfig = { @@ -222,27 +221,7 @@ describe('xy_visualization', () => { "layers": Array [ Object { "accessors": Array [], - "colorMapping": Object { - "assignmentMode": "auto", - "assignments": Array [], - "colorMode": Object { - "type": "categorical", - }, - "paletteId": "${EUIAmsterdamColorBlindPalette.id}", - "specialAssignments": Array [ - Object { - "color": Object { - "colorIndex": 1, - "paletteId": "neutral", - "type": "categorical", - }, - "rule": Object { - "type": "other", - }, - "touched": false, - }, - ], - }, + "colorMapping": undefined, "layerId": "l1", "layerType": "data", "palette": undefined, diff --git a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx index e1b453b7e9f52..d3bb805a0a381 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/visualization.tsx @@ -25,7 +25,7 @@ import type { EventAnnotationGroupConfig } from '@kbn/event-annotation-common'; import { isEqual } from 'lodash'; import { type AccessorConfig, DimensionTrigger } from '@kbn/visualization-ui-components'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; -import { DEFAULT_COLOR_MAPPING_CONFIG, getColorsFromMapping } from '@kbn/coloring'; +import { getColorsFromMapping } from '@kbn/coloring'; import useObservable from 'react-use/lib/useObservable'; import { generateId } from '../../id_generator'; import { @@ -34,6 +34,7 @@ import { isOperationFromTheSameGroup, nonNullable, renewIDs, + getColorMappingDefaults, } from '../../utils'; import { getSuggestions } from './xy_suggestions'; import { XyToolbar } from './xy_config_panel'; @@ -281,9 +282,7 @@ export const getXyVisualization = ({ layerType: LayerTypes.DATA, palette: mainPalette?.type === 'legacyPalette' ? mainPalette.value : undefined, colorMapping: - mainPalette?.type === 'colorMapping' - ? mainPalette.value - : { ...DEFAULT_COLOR_MAPPING_CONFIG }, + mainPalette?.type === 'colorMapping' ? mainPalette.value : getColorMappingDefaults(), }, ], } diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts index 4d733d005dcf4..82368c2414c9a 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.test.ts @@ -18,7 +18,7 @@ import { generateId } from '../../id_generator'; import { getXyVisualization } from './xy_visualization'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { eventAnnotationServiceMock } from '@kbn/event-annotation-plugin/public/mocks'; -import { DEFAULT_COLOR_MAPPING_CONFIG, PaletteOutput } from '@kbn/coloring'; +import { PaletteOutput } from '@kbn/coloring'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { fieldFormatsServiceMock } from '@kbn/field-formats-plugin/public/mocks'; import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; @@ -917,7 +917,7 @@ describe('xy_suggestions', () => { { ...currentState.layers[0], seriesType: 'line', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); @@ -964,7 +964,7 @@ describe('xy_suggestions', () => { { ...currentState.layers[0], seriesType: 'line', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); @@ -975,7 +975,7 @@ describe('xy_suggestions', () => { { ...currentState.layers[0], seriesType: 'bar_stacked', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); @@ -1099,7 +1099,7 @@ describe('xy_suggestions', () => { ...currentState.layers[0], xAccessor: 'product', splitAccessor: 'category', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); @@ -1145,7 +1145,7 @@ describe('xy_suggestions', () => { ...currentState.layers[0], xAccessor: 'category', splitAccessor: 'product', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); @@ -1192,7 +1192,7 @@ describe('xy_suggestions', () => { ...currentState.layers[0], xAccessor: 'timestamp', splitAccessor: 'product', - colorMapping: DEFAULT_COLOR_MAPPING_CONFIG, + colorMapping: undefined, }, ], }); diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts index 1d29cd32323fb..1e6e12cbc8c11 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import { partition } from 'lodash'; import { Position } from '@elastic/charts'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; -import { DEFAULT_COLOR_MAPPING_CONFIG } from '@kbn/coloring'; import type { SuggestionRequest, VisualizationSuggestion, @@ -17,6 +16,7 @@ import type { TableSuggestion, TableChangeType, } from '../../types'; +import { getColorMappingDefaults } from '../../utils'; import { State, XYState, @@ -556,7 +556,7 @@ function buildSuggestion({ : undefined, layerType: LayerTypes.DATA, colorMapping: !mainPalette - ? { ...DEFAULT_COLOR_MAPPING_CONFIG } + ? getColorMappingDefaults() : mainPalette?.type === 'colorMapping' ? mainPalette.value : undefined, diff --git a/x-pack/plugins/logs_shared/server/services/log_views/log_views_client.test.ts b/x-pack/plugins/logs_shared/server/services/log_views/log_views_client.test.ts index 5efdf9e125deb..b9f5037ced6b1 100644 --- a/x-pack/plugins/logs_shared/server/services/log_views/log_views_client.test.ts +++ b/x-pack/plugins/logs_shared/server/services/log_views/log_views_client.test.ts @@ -249,6 +249,7 @@ describe('LogViewsClient class', () => { }, ], "dataViewReference": DataView { + "allowHidden": false, "allowNoIndex": false, "deleteFieldFormat": [Function], "fieldAttrs": Object {}, @@ -273,6 +274,7 @@ describe('LogViewsClient class', () => { }, "fields": FldList [], "flattenHit": [Function], + "getAllowHidden": [Function], "getFieldAttrs": [Function], "getIndexPattern": [Function], "getName": [Function], diff --git a/x-pack/plugins/ml/common/openapi/README.md b/x-pack/plugins/ml/common/openapi/README.md index 7c482dc055b98..7a79e55608894 100644 --- a/x-pack/plugins/ml/common/openapi/README.md +++ b/x-pack/plugins/ml/common/openapi/README.md @@ -12,6 +12,9 @@ It is possible to validate the docs before bundling them by running these commands in the `x-pack/plugins/ml/common/openapi/` folder: ``` -npx swagger-cli validate ml_apis_v3.yaml -npx @redocly/cli lint ml_apis_v3.yaml +npx swagger-cli validate ml_apis.yaml +npx @redocly/cli lint ml_apis.yaml + +npx swagger-cli validate ml_apis_serverless.yaml +npx @redocly/cli lint ml_apis_serverless.yaml ``` diff --git a/x-pack/plugins/ml/common/openapi/ml_apis.yaml b/x-pack/plugins/ml/common/openapi/ml_apis.yaml new file mode 100644 index 0000000000000..bde6c4c5cca7a --- /dev/null +++ b/x-pack/plugins/ml/common/openapi/ml_apis.yaml @@ -0,0 +1,213 @@ +openapi: 3.0.1 +info: + title: Machine learning APIs + description: Kibana APIs for the machine learning feature + version: "1.0.1" + license: + name: Elastic License 2.0 + url: https://www.elastic.co/licensing/elastic-license +tags: + - name: ml + description: Machine learning +servers: + - url: https://localhost:5601 +paths: + /api/ml/saved_objects/sync: + get: + summary: Synchronizes Kibana saved objects for machine learning jobs and trained models. + description: This API runs automatically when you start Kibana and periodically thereafter. + operationId: mlSync + tags: + - ml + parameters: + - $ref: '#/components/parameters/simulateParam' + responses: + '200': + description: Indicates a successful call + content: + application/json: + schema: + $ref: '#/components/schemas/mlSync200Response' + examples: + syncExample: + $ref: '#/components/examples/mlSyncExample' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/mlSync4xxResponse' + + /s/{spaceId}/api/ml/saved_objects/sync: + get: + summary: Synchronizes Kibana saved objects for machine learning jobs and trained models. + description: > + You must have `all` privileges for the **Machine Learning** feature in the **Analytics** section of the Kibana feature privileges. + This API runs automatically when you start Kibana and periodically thereafter. + operationId: mlSyncWithSpaceId + tags: + - ml + parameters: + - $ref: '#/components/parameters/spaceParam' + - $ref: '#/components/parameters/simulateParam' + responses: + '200': + description: Indicates a successful call + content: + application/json: + schema: + $ref: '#/components/schemas/mlSync200Response' + examples: + syncExample: + $ref: '#/components/examples/mlSyncExample' + '401': + description: Authorization information is missing or invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/mlSync4xxResponse' +components: + parameters: + spaceParam: + in: path + name: spaceId + description: An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used. + required: true + schema: + type: string + simulateParam: + in: query + name: simulate + description: When true, simulates the synchronization by returning only the list of actions that would be performed. + required: false + schema: + type: boolean + example: 'true' + securitySchemes: + basicAuth: + type: http + scheme: basic + apiKeyAuth: + type: apiKey + in: header + name: ApiKey + schemas: + mlSyncResponseSuccess: + type: boolean + description: The success or failure of the synchronization. + mlSyncResponseAnomalyDetectors: + type: object + title: Sync API response for anomaly detection jobs + description: The sync machine learning saved objects API response contains this object when there are anomaly detection jobs affected by the synchronization. There is an object for each relevant job, which contains the synchronization status. + properties: + success: + $ref: '#/components/schemas/mlSyncResponseSuccess' + mlSyncResponseDatafeeds: + type: object + title: Sync API response for datafeeds + description: The sync machine learning saved objects API response contains this object when there are datafeeds affected by the synchronization. There is an object for each relevant datafeed, which contains the synchronization status. + properties: + success: + $ref: '#/components/schemas/mlSyncResponseSuccess' + mlSyncResponseDataFrameAnalytics: + type: object + title: Sync API response for data frame analytics jobs + description: The sync machine learning saved objects API response contains this object when there are data frame analytics jobs affected by the synchronization. There is an object for each relevant job, which contains the synchronization status. + properties: + success: + $ref: '#/components/schemas/mlSyncResponseSuccess' + mlSyncResponseSavedObjectsCreated: + type: object + title: Sync API response for created saved objects + description: If saved objects are missing for machine learning jobs or trained models, they are created when you run the sync machine learning saved objects API. + properties: + anomaly-detector: + type: object + description: If saved objects are missing for anomaly detection jobs, they are created. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseAnomalyDetectors' + data-frame-analytics: + type: object + description: If saved objects are missing for data frame analytics jobs, they are created. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseDataFrameAnalytics' + trained-model: + type: object + description: If saved objects are missing for trained models, they are created. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseTrainedModels' + mlSyncResponseSavedObjectsDeleted: + type: object + title: Sync API response for deleted saved objects + description: If saved objects exist for machine learning jobs or trained models that no longer exist, they are deleted when you run the sync machine learning saved objects API. + properties: + anomaly-detector: + type: object + description: If there are saved objects exist for nonexistent anomaly detection jobs, they are deleted. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseAnomalyDetectors' + data-frame-analytics: + type: object + description: If there are saved objects exist for nonexistent data frame analytics jobs, they are deleted. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseDataFrameAnalytics' + trained-model: + type: object + description: If there are saved objects exist for nonexistent trained models, they are deleted. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseTrainedModels' + mlSyncResponseTrainedModels: + type: object + title: Sync API response for trained models + description: The sync machine learning saved objects API response contains this object when there are trained models affected by the synchronization. There is an object for each relevant trained model, which contains the synchronization status. + properties: + success: + $ref: '#/components/schemas/mlSyncResponseSuccess' + mlSync200Response: + type: object + title: Successful sync API response + properties: + datafeedsAdded: + type: object + description: If a saved object for an anomaly detection job is missing a datafeed identifier, it is added when you run the sync machine learning saved objects API. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseDatafeeds' + datafeedsRemoved: + type: object + description: If a saved object for an anomaly detection job references a datafeed that no longer exists, it is deleted when you run the sync machine learning saved objects API. + additionalProperties: + $ref: '#/components/schemas/mlSyncResponseDatafeeds' + savedObjectsCreated: + $ref: '#/components/schemas/mlSyncResponseSavedObjectsCreated' + savedObjectsDeleted: + $ref: '#/components/schemas/mlSyncResponseSavedObjectsDeleted' + mlSync4xxResponse: + type: object + title: Unsuccessful sync API response + properties: + error: + type: string + example: Unauthorized + message: + type: string + statusCode: + type: integer + example: 401 + examples: + mlSyncExample: + summary: Two anomaly detection jobs required synchronization in this example. + value: + { + "savedObjectsCreated": { + "anomaly-detector": { + "myjob1": { "success":true }, + "myjob2": { "success":true } + } + }, + "savedObjectsDeleted": {}, + "datafeedsAdded": {}, + "datafeedsRemoved": {} + } +security: + - basicAuth: [ ] + - apiKeyAuth: [ ] \ No newline at end of file diff --git a/x-pack/plugins/ml/common/openapi/ml_apis_v3.yaml b/x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml similarity index 91% rename from x-pack/plugins/ml/common/openapi/ml_apis_v3.yaml rename to x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml index ff8e3b98cda5d..0cb7f3b3d9911 100644 --- a/x-pack/plugins/ml/common/openapi/ml_apis_v3.yaml +++ b/x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml @@ -12,17 +12,14 @@ tags: servers: - url: https://localhost:5601 paths: - /s/{spaceId}/api/ml/saved_objects/sync: + /api/ml/saved_objects/sync: get: summary: Synchronizes Kibana saved objects for machine learning jobs and trained models. - description: > - You must have `all` privileges for the **Machine Learning** feature in the **Analytics** section of the Kibana feature privileges. - This API runs automatically when you start Kibana and periodically thereafter. - operationId: ml-sync + description: This API runs automatically when you start Kibana and periodically thereafter. + operationId: mlSync tags: - ml parameters: - - $ref: '#/components/parameters/spaceParam' - $ref: '#/components/parameters/simulateParam' responses: '200': @@ -42,13 +39,6 @@ paths: $ref: '#/components/schemas/mlSync4xxResponse' components: parameters: - spaceParam: - in: path - name: spaceId - description: An identifier for the space. If `/s/` and the identifier are omitted from the path, the default space is used. - required: true - schema: - type: string simulateParam: in: query name: simulate @@ -58,9 +48,6 @@ components: type: boolean example: 'true' securitySchemes: - basicAuth: - type: http - scheme: basic apiKeyAuth: type: apiKey in: header @@ -183,4 +170,4 @@ components: "datafeedsRemoved": {} } security: - - basicAuth: [ ] \ No newline at end of file + - apiKeyAuth: [ ] \ No newline at end of file diff --git a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_index_patterns_editor.tsx b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_index_patterns_editor.tsx index 76cf041426758..5e388d72af92c 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_index_patterns_editor.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_index_patterns_editor.tsx @@ -246,7 +246,7 @@ export function DataDriftIndexPatternsEditor({ children: ( @@ -183,6 +186,12 @@ export function DataViewEditor({ columns={columns} pagination={pagination} onChange={onTableChange} + data-test-subject={`mlDataDriftIndexPatternTable-${id ?? ''}`} + rowProps={(item) => { + return { + 'data-test-subj': `mlDataDriftIndexPatternTableRow row-${id}`, + }; + }} /> diff --git a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx index 1f414d8224578..18f3dcea8ae70 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx @@ -88,6 +88,7 @@ export const DataDriftIndexOrSearchRedirect: FC = () => { iconType="plusInCircleFilled" onClick={() => navigateToPath(createPath(ML_PAGES.DATA_DRIFT_CUSTOM))} disabled={!canEditDataView} + data-test-subj={'dataDriftCreateDataViewButton'} > = ({ item }) => { : []), { id: 'models_map', - 'data-test-subj': 'mlTrainedModelsMap', + 'data-test-subj': 'mlTrainedModelMap', name: ( = ({ item }) => { /> ), content: ( -
+
{ this.setInitializationFinished(); diff --git a/x-pack/plugins/observability/common/custom_threshold_rule/types.ts b/x-pack/plugins/observability/common/custom_threshold_rule/types.ts index 66e058dfad8cf..dc5b434e0a7e9 100644 --- a/x-pack/plugins/observability/common/custom_threshold_rule/types.ts +++ b/x-pack/plugins/observability/common/custom_threshold_rule/types.ts @@ -166,7 +166,6 @@ export enum MetricsExplorerChartType { export enum InfraRuleType { MetricThreshold = 'metrics.alert.threshold', InventoryThreshold = 'metrics.alert.inventory.threshold', - Anomaly = 'metrics.alert.anomaly', } export enum AlertStates { diff --git a/x-pack/plugins/observability/dev_docs/composite_slo.md b/x-pack/plugins/observability/dev_docs/composite_slo.md deleted file mode 100644 index 4e34933c8560e..0000000000000 --- a/x-pack/plugins/observability/dev_docs/composite_slo.md +++ /dev/null @@ -1,65 +0,0 @@ -# Composite SLO - -Composite SLO is available from 8.9. - -A composite SLO is an SLO that aggregates up to 30 other SLOs, so we can get a higher view of the performance of a service. -A composite SLO uses the rollup data of the source SLOs with the applied weight to compute its SLI and error budget consumption & remaining. - -We currently support only weighted average composite method. This means every source SLO is given a weight (1 to +Infinity) that we use to compute the composite SLI. - -When creating a composite SLO, we validate that every source SLOs are of the same time window and budgeting method. - -## Examples - -Create a composite SLO: - -``` -curl --request POST \ - --url http://localhost:5601/kibana/api/observability/composite_slos \ - --header 'Authorization: Basic ZWxhc3RpYzpjaGFuZ2VtZQ==' \ - --header 'Content-Type: application/json' \ - --header 'kbn-xsrf: oui' \ - --data '{ - "name": "composite slo test", - "compositeMethod": "weightedAverage", - "sources": [ - { "id": "f6694b30-f97c-11ed-895c-170d13e61076", "revision": 1, "weight": 2 }, - { "id": "f9072790-f97c-11ed-895c-170d13e61076", "revision": 2, "weight": 1 } - ], - "timeWindow": { - "duration": "7d", - "type": "rolling" - }, - "budgetingMethod": "occurrences", - "objective": { - "target": 0.95 - } -}' -``` - - -Delete a composite SLO: - -``` -curl --request DELETE \ - --url http://localhost:5601/kibana/api/observability/composite_slos/7ba92850-fbd6-11ed-8eb2-037af7d0dfa6 \ - --header 'Authorization: Basic ZWxhc3RpYzpjaGFuZ2VtZQ==' \ - --header 'Content-Type: application/json' \ - --header 'kbn-xsrf: oui' -``` - -Update an existing composite SLO: - -``` -curl --request PUT \ - --url http://localhost:5601/kibana/api/observability/composite_slos/01af9e10-fbf1-11ed-83f3-01ffee47b374 \ - --header 'Authorization: Basic ZWxhc3RpYzpjaGFuZ2VtZQ==' \ - --header 'Content-Type: application/json' \ - --header 'kbn-xsrf: oui' \ - --data '{ - "name": "new composite slo name", - "objective": { - "target": 0.90 - } -}' -``` \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.json b/x-pack/plugins/observability/docs/openapi/slo/bundled.json index e51f3828886cf..3ba6ab7762e93 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.json +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.json @@ -30,10 +30,6 @@ { "name": "slo", "description": "SLO APIs enable you to define, manage and track service-level objectives" - }, - { - "name": "composite slo", - "description": "Composite SLO APIs enable you to define, manage and track a group of SLOs." } ], "paths": { diff --git a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml index 4b0ca84bc7c52..c50403e5096f8 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/bundled.yaml @@ -17,8 +17,6 @@ security: tags: - name: slo description: SLO APIs enable you to define, manage and track service-level objectives - - name: composite slo - description: Composite SLO APIs enable you to define, manage and track a group of SLOs. paths: /s/{spaceId}/api/observability/slos: post: diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/parameters/composite_slo_id.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/parameters/composite_slo_id.yaml deleted file mode 100644 index d8f698b99b214..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/parameters/composite_slo_id.yaml +++ /dev/null @@ -1,7 +0,0 @@ -in: path -name: compositeSloId -description: An identifier for the composite slo. -required: true -schema: - type: string - example: 9c235211-6834-11ea-a78c-6feb38a34414 diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/base_composite_slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/base_composite_slo_response.yaml deleted file mode 100644 index 07dd47d1707fd..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/base_composite_slo_response.yaml +++ /dev/null @@ -1,29 +0,0 @@ -title: Composite SLO response -type: object -properties: - id: - description: The identifier of the composite SLO. - type: string - example: 8853df00-ae2e-11ed-90af-09bb6422b258 - name: - description: The name of the composite SLO. - type: string - example: My Service SLO - timeWindow: - $ref: "time_window.yaml" - budgetingMethod: - $ref: "budgeting_method.yaml" - compositeMethod: - $ref: "composite_method.yaml" - objective: - $ref: "objective.yaml" - sources: - - $ref: "weighted_composite_sources.yaml" - createdAt: - description: The creation date - type: string - example: "2023-01-12T10:03:19.000Z" - updatedAt: - description: The last update date - type: string - example: "2023-01-12T10:03:19.000Z" diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_method.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_method.yaml deleted file mode 100644 index 0414a68a48742..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_method.yaml +++ /dev/null @@ -1,6 +0,0 @@ -title: Composite method -type: string -description: The composite method to use for the composite SLO. -enum: - - weightedAverage -example: weightedAverage \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_objective.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_objective.yaml deleted file mode 100644 index a8946e9e2fca2..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_objective.yaml +++ /dev/null @@ -1,10 +0,0 @@ -title: Objective -required: - - target -description: Defines properties for objective -type: object -properties: - target: - description: the target objective between 0 and 1 excluded - type: number - example: 0.95 \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_slo_response.yaml deleted file mode 100644 index 00a9c3426756e..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/composite_slo_response.yaml +++ /dev/null @@ -1,31 +0,0 @@ -title: Composite SLO with summary response -type: object -properties: - id: - description: The identifier of the composite SLO. - type: string - example: 8853df00-ae2e-11ed-90af-09bb6422b258 - name: - description: The name of the composite SLO. - type: string - example: My Service SLO - timeWindow: - $ref: "time_window.yaml" - budgetingMethod: - $ref: "budgeting_method.yaml" - compositeMethod: - $ref: "composite_method.yaml" - objective: - $ref: "objective.yaml" - sources: - - $ref: "weighted_composite_sources.yaml" - summary: - $ref: "summary.yaml" - createdAt: - description: The creation date - type: string - example: "2023-01-12T10:03:19.000Z" - updatedAt: - description: The last update date - type: string - example: "2023-01-12T10:03:19.000Z" diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_request.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_request.yaml deleted file mode 100644 index 97536626c1287..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_request.yaml +++ /dev/null @@ -1,29 +0,0 @@ -title: Create composite SLO request -description: > - The create Composite SLO API request body. The provided source SLOs must exists and their budgeting method and time window must match the one from the composite SLO. -type: object -required: - - name - - timeWindow - - budgetingMethod - - compositeMethod - - objective - - sources -properties: - id: - description: A unique identifier for the composite SLO. Must be between 8 and 36 chars - type: string - example: my-super-composite-slo-id - name: - description: A name for the composite SLO. - type: string - timeWindow: - $ref: "time_window.yaml" - budgetingMethod: - $ref: "budgeting_method.yaml" - compositeMethod: - $ref: "composite_method.yaml" - objective: - $ref: "objective.yaml" - sources: - - $ref: "weighted_composite_sources.yaml" diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_response.yaml deleted file mode 100644 index 7a1b6286e2310..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/create_composite_slo_response.yaml +++ /dev/null @@ -1,8 +0,0 @@ -title: Create composite SLO response -type: object -required: - - id -properties: - id: - type: string - example: 8853df00-ae2e-11ed-90af-09bb6422b258 diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_composite_slo_response.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_composite_slo_response.yaml deleted file mode 100644 index 0c6ae26e1ec7c..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/find_composite_slo_response.yaml +++ /dev/null @@ -1,17 +0,0 @@ -title: Find composite SLO response -description: A paginated response of composite SLOs matching the query. -type: object -properties: - page: - type: number - example: 1 - perPage: - type: number - example: 25 - total: - type: number - example: 34 - results: - type: array - items: - $ref: 'composite_slo_response.yaml' \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/update_composite_slo_request.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/update_composite_slo_request.yaml deleted file mode 100644 index c93578f4404c0..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/update_composite_slo_request.yaml +++ /dev/null @@ -1,22 +0,0 @@ -title: Update composite SLO request -description: > - The update composite SLO API request body. The provided source SLOs must exists and their budgeting method and time window must match the one from the composite SLO. -type: object -properties: - id: - description: A unique identifier for the composite SLO. Must be between 8 and 36 chars - type: string - example: my-super-composite-slo-id - name: - description: A name for the composite SLO. - type: string - timeWindow: - $ref: "time_window.yaml" - budgetingMethod: - $ref: "budgeting_method.yaml" - compositeMethod: - $ref: "composite_method.yaml" - objective: - $ref: "objective.yaml" - sources: - - $ref: "weighted_composite_sources.yaml" diff --git a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/weighted_composite_sources.yaml b/x-pack/plugins/observability/docs/openapi/slo/components/schemas/weighted_composite_sources.yaml deleted file mode 100644 index 1caca49407386..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/components/schemas/weighted_composite_sources.yaml +++ /dev/null @@ -1,22 +0,0 @@ -title: Weighted sources -description: An array of source SLO to use for the weighted average composite. -type: "array" -items: - type: object - required: - - id - - revision - - weight - properties: - id: - description: The id of the SLO. - type: string - example: 8853df00-ae2e-11ed-90af-09bb6422b258 - revision: - description: The revision number of the SLO. - type: number - example: 2 - weight: - description: The weight to apply to this SLO. - type: number - example: 3 \ No newline at end of file diff --git a/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml b/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml index ee722573efa91..687fd94f006a4 100644 --- a/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml +++ b/x-pack/plugins/observability/docs/openapi/slo/entrypoint.yaml @@ -11,16 +11,10 @@ info: tags: - name: slo description: SLO APIs enable you to define, manage and track service-level objectives - - name: composite slo - description: Composite SLO APIs enable you to define, manage and track a group of SLOs. servers: - url: "http://localhost:5601" description: local paths: - #'/s/{spaceId}/api/observability/composite_slos': - # $ref: 'paths/s@{spaceid}@api@composite_slos.yaml' - #'/s/{spaceId}/api/observability/composite_slos/{compositeSloId}': - # $ref: 'paths/s@{spaceid}@api@composite_slos@{compositesloid}.yaml' "/s/{spaceId}/api/observability/slos": $ref: "paths/s@{spaceid}@api@slos.yaml" "/s/{spaceId}/api/observability/slos/{sloId}": diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos.yaml deleted file mode 100644 index 94230cde86002..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos.yaml +++ /dev/null @@ -1,121 +0,0 @@ -post: - summary: Creates a Composite SLO - operationId: createCompositeSloOp - description: > - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - tags: - - composite slo - parameters: - - $ref: ../components/headers/kbn_xsrf.yaml - - $ref: ../components/parameters/space_id.yaml - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/create_composite_slo_request.yaml' - responses: - '200': - description: Successful request - content: - application/json: - schema: - $ref: '../components/schemas/create_composite_slo_response.yaml' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/401_response.yaml' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/403_response.yaml' - '409': - description: Conflict - The Composite SLO id already exists - content: - application/json: - schema: - $ref: '../components/schemas/409_response.yaml' - -get: - summary: Retrieves a paginated list of composite SLOs with summary - operationId: findCompositeSloOp - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - tags: - - composite slo - parameters: - - $ref: ../components/headers/kbn_xsrf.yaml - - $ref: ../components/parameters/space_id.yaml - - name: page - in: query - description: The page number to return - schema: - type: integer - default: 1 - example: 1 - - name: perPage - in: query - description: The number of SLOs to return per page - schema: - type: integer - default: 25 - example: 20 - - name: sortBy - in: query - description: Sort by field - schema: - type: string - enum: [creationTime] - default: creationTime - example: creationTime - - name: sortDirection - in: query - description: Sort order - schema: - type: string - enum: [asc, desc] - default: asc - example: asc - responses: - '200': - description: Successful request - content: - application/json: - schema: - $ref: '../components/schemas/find_composite_slo_response.yaml' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/401_response.yaml' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/403_response.yaml' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '../components/schemas/404_response.yaml' diff --git a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos@{compositesloid}.yaml b/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos@{compositesloid}.yaml deleted file mode 100644 index 826ed87a27cd8..0000000000000 --- a/x-pack/plugins/observability/docs/openapi/slo/paths/s@{spaceid}@api@composite_slos@{compositesloid}.yaml +++ /dev/null @@ -1,133 +0,0 @@ -get: - summary: Retrieves a composite SLO - operationId: getCompositeSloOp - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - tags: - - composite slo - parameters: - - $ref: ../components/headers/kbn_xsrf.yaml - - $ref: ../components/parameters/space_id.yaml - - $ref: ../components/parameters/composite_slo_id.yaml - responses: - '200': - description: Successful request - content: - application/json: - schema: - $ref: '../components/schemas/composite_slo_response.yaml' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/401_response.yaml' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/403_response.yaml' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '../components/schemas/404_response.yaml' - -put: - summary: Updates a composite SLO - operationId: updateCompositeSloOp - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - tags: - - composite slo - parameters: - - $ref: ../components/headers/kbn_xsrf.yaml - - $ref: ../components/parameters/space_id.yaml - - $ref: ../components/parameters/composite_slo_id.yaml - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/update_composite_slo_request.yaml' - responses: - '200': - description: Successful request - content: - application/json: - schema: - $ref: '../components/schemas/base_composite_slo_response.yaml' - '400': - description: Bad request - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/401_response.yaml' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/403_response.yaml' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '../components/schemas/404_response.yaml' - -delete: - summary: Deletes a composite SLO - operationId: deleteCompositeSloOp - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - tags: - - composite slo - parameters: - - $ref: ../components/headers/kbn_xsrf.yaml - - $ref: ../components/parameters/space_id.yaml - - $ref: ../components/parameters/composite_slo_id.yaml - responses: - '204': - description: Successful request - '400': - description: Bad request - content: - application/json: - schema: - $ref: '../components/schemas/400_response.yaml' - '401': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/401_response.yaml' - '403': - description: Unauthorized response - content: - application/json: - schema: - $ref: '../components/schemas/403_response.yaml' - '404': - description: Not found response - content: - application/json: - schema: - $ref: '../components/schemas/404_response.yaml' diff --git a/x-pack/plugins/observability/public/application/index.tsx b/x-pack/plugins/observability/public/application/index.tsx index 2d251ac71660e..40724d6db5b9f 100644 --- a/x-pack/plugins/observability/public/application/index.tsx +++ b/x-pack/plugins/observability/public/application/index.tsx @@ -14,8 +14,9 @@ import { Router, Routes, Route } from '@kbn/shared-ux-router'; import { AppMountParameters, APP_WRAPPER_CLASS, CoreStart } from '@kbn/core/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import type { LazyObservabilityPageTemplateProps } from '@kbn/observability-shared-plugin/public'; -import { KibanaContextProvider, RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; @@ -111,8 +112,7 @@ export const renderApp = ({ diff --git a/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts b/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts index 2175f67e807fb..feec4d475e3a8 100644 --- a/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts +++ b/x-pack/plugins/observability/public/hooks/slo/query_key_factory.ts @@ -14,12 +14,6 @@ interface SloListFilter { sortDirection: string; } -interface CompositeSloKeyFilter { - name: string; - page: number; - sortBy: string; -} - export const sloKeys = { all: ['slo'] as const, lists: () => [...sloKeys.all, 'list'] as const, @@ -41,20 +35,4 @@ export const sloKeys = { preview: (indicator?: Indicator) => [...sloKeys.all, 'preview', indicator] as const, }; -export const compositeSloKeys = { - all: ['compositeSlo'] as const, - lists: () => [...compositeSloKeys.all, 'list'] as const, - list: (filters: CompositeSloKeyFilter) => [...compositeSloKeys.lists(), filters] as const, - details: () => [...compositeSloKeys.all, 'details'] as const, - detail: (sloId?: string) => [...compositeSloKeys.details(), sloId] as const, - rules: () => [...compositeSloKeys.all, 'rules'] as const, - rule: (sloIds: string[]) => [...compositeSloKeys.rules(), sloIds] as const, - activeAlerts: () => [...compositeSloKeys.all, 'activeAlerts'] as const, - activeAlert: (sloIds: string[]) => [...compositeSloKeys.activeAlerts(), sloIds] as const, - historicalSummaries: () => [...compositeSloKeys.all, 'historicalSummary'] as const, - historicalSummary: (sloIds: string[]) => - [...compositeSloKeys.historicalSummaries(), sloIds] as const, - globalDiagnosis: () => [...compositeSloKeys.all, 'globalDiagnosis'] as const, -}; - -export type SloKeys = typeof compositeSloKeys | typeof sloKeys; +export type SloKeys = typeof sloKeys; diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_composite_slo_list.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_composite_slo_list.ts deleted file mode 100644 index 55ac51648e55d..0000000000000 --- a/x-pack/plugins/observability/public/hooks/slo/use_fetch_composite_slo_list.ts +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useState } from 'react'; -import { - QueryObserverResult, - RefetchOptions, - RefetchQueryFilters, - useQuery, - useQueryClient, -} from '@tanstack/react-query'; -import { i18n } from '@kbn/i18n'; -import { FindCompositeSLOResponse } from '@kbn/slo-schema'; - -import { useKibana } from '../../utils/kibana_react'; -import { compositeSloKeys } from './query_key_factory'; - -interface SLOListParams { - name?: string; - page?: number; - sortBy?: string; - shouldRefetch?: boolean; -} - -export interface UseFetchCompositeSloListResponse { - isInitialLoading: boolean; - isLoading: boolean; - isRefetching: boolean; - isSuccess: boolean; - isError: boolean; - sloList: FindCompositeSLOResponse | undefined; - refetch: ( - options?: (RefetchOptions & RefetchQueryFilters) | undefined - ) => Promise>; -} - -const SHORT_REFETCH_INTERVAL = 1000 * 5; // 5 seconds -const LONG_REFETCH_INTERVAL = 1000 * 60; // 1 minute - -export function useFetchCompositeSloList({ - name = '', - page = 1, - sortBy = 'creationTime', - shouldRefetch, -}: SLOListParams | undefined = {}): UseFetchCompositeSloListResponse { - const { - http, - notifications: { toasts }, - } = useKibana().services; - const queryClient = useQueryClient(); - - const [stateRefetchInterval, setStateRefetchInterval] = useState( - SHORT_REFETCH_INTERVAL - ); - - const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( - { - queryKey: compositeSloKeys.list({ name, page, sortBy }), - queryFn: async ({ signal }) => { - try { - const response = await http.get(`/api/observability/slos`, { - query: { - ...(page && { page }), - ...(name && { name }), - ...(sortBy && { sortBy }), - }, - signal, - }); - - return response; - } catch (error) { - throw error; - } - }, - keepPreviousData: true, - refetchOnWindowFocus: false, - refetchInterval: shouldRefetch ? stateRefetchInterval : undefined, - staleTime: 1000, - retry: (failureCount, error) => { - if (String(error) === 'Error: Forbidden') { - return false; - } - return failureCount < 4; - }, - onSuccess: ({ results }: FindCompositeSLOResponse) => { - if (!shouldRefetch) { - return; - } - - if (results.find((slo) => slo.summary.status === 'NO_DATA' || !slo.summary)) { - setStateRefetchInterval(SHORT_REFETCH_INTERVAL); - } else { - setStateRefetchInterval(LONG_REFETCH_INTERVAL); - } - - queryClient.invalidateQueries(compositeSloKeys.historicalSummaries()); - queryClient.invalidateQueries(compositeSloKeys.activeAlerts()); - queryClient.invalidateQueries(compositeSloKeys.rules()); - }, - onError: (error: Error) => { - toasts.addError(error, { - title: i18n.translate('xpack.observability.slo.list.errorNotification', { - defaultMessage: 'Something went wrong while fetching SLOs', - }), - }); - }, - } - ); - - return { - sloList: data, - isInitialLoading, - isLoading, - isRefetching, - isSuccess, - isError, - refetch, - }; -} diff --git a/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx b/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx index b307c0d858f12..247a700acfa6c 100644 --- a/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx @@ -60,9 +60,6 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ }, thresholdRule: { enabled: false }, }, - compositeSlo: { - enabled: false, - }, aiAssistant: { enabled: false, feedback: { diff --git a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx index df869f41c6735..d0937d1f2c72b 100644 --- a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx +++ b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx @@ -88,7 +88,6 @@ const withCore = makeDecorator({ }, thresholdRule: { enabled: false }, }, - compositeSlo: { enabled: false }, }; return ( diff --git a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx index 7a5fa20afa741..4239cdeee811e 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx @@ -47,9 +47,6 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ }, thresholdRule: { enabled: false }, }, - compositeSlo: { - enabled: false, - }, }, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx index 19c27928b292a..0fb29d5980ccb 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx @@ -258,7 +258,7 @@ export function SloEditForm({ slo }: Props) { ; diff --git a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx index 3cebd71109ba6..d5714924bdc97 100644 --- a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx +++ b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx @@ -35,7 +35,6 @@ export function KibanaReactStorybookDecorator(Story: ComponentType) { }, thresholdRule: { enabled: false }, }, - compositeSlo: { enabled: false }, }; const mockTheme: CoreTheme = { diff --git a/x-pack/plugins/observability/public/utils/test_helper.tsx b/x-pack/plugins/observability/public/utils/test_helper.tsx index 2f8035ae7be54..6c1610ac059c9 100644 --- a/x-pack/plugins/observability/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability/public/utils/test_helper.tsx @@ -39,7 +39,6 @@ const defaultConfig: ConfigSchema = { }, thresholdRule: { enabled: false }, }, - compositeSlo: { enabled: false }, }; const queryClient = new QueryClient({ diff --git a/x-pack/plugins/observability/server/domain/models/composite_slo.ts b/x-pack/plugins/observability/server/domain/models/composite_slo.ts deleted file mode 100644 index aa70d5a9a0b2b..0000000000000 --- a/x-pack/plugins/observability/server/domain/models/composite_slo.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as t from 'io-ts'; - -import { - compositeSloSchema, - compositeSloIdSchema, - weightedAverageSourceSchema, -} from '@kbn/slo-schema'; - -type CompositeSLO = t.TypeOf; -type CompositeSLOId = t.TypeOf; -type StoredCompositeSLO = t.OutputOf; - -type WeightedAverageSource = t.TypeOf; - -export type { CompositeSLO, CompositeSLOId, StoredCompositeSLO, WeightedAverageSource }; diff --git a/x-pack/plugins/observability/server/domain/models/index.ts b/x-pack/plugins/observability/server/domain/models/index.ts index a22e0cbdd95ac..16336c40928f8 100644 --- a/x-pack/plugins/observability/server/domain/models/index.ts +++ b/x-pack/plugins/observability/server/domain/models/index.ts @@ -11,4 +11,3 @@ export * from './error_budget'; export * from './indicators'; export * from './slo'; export * from './time_window'; -export * from './composite_slo'; diff --git a/x-pack/plugins/observability/server/domain/services/composite_slo/index.ts b/x-pack/plugins/observability/server/domain/services/composite_slo/index.ts deleted file mode 100644 index cae963f894602..0000000000000 --- a/x-pack/plugins/observability/server/domain/services/composite_slo/index.ts +++ /dev/null @@ -1,8 +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. - */ - -export * from './validate_composite_slo'; diff --git a/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.test.ts b/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.test.ts deleted file mode 100644 index 1bf5772b2a6b9..0000000000000 --- a/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.test.ts +++ /dev/null @@ -1,218 +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 { validateCompositeSLO } from '.'; -import { - createCompositeSLO, - createWeightedAverageSource, -} from '../../../services/composite_slo/fixtures/composite_slo'; -import { fiveMinute, twoMinute } from '../../../services/slo/fixtures/duration'; -import { - createSLO, - createSLOWithTimeslicesBudgetingMethod, -} from '../../../services/slo/fixtures/slo'; -import { - sevenDaysRolling, - thirtyDaysRolling, - weeklyCalendarAligned, -} from '../../../services/slo/fixtures/time_window'; - -describe('validateCompositeSLO', () => { - it('throws when the number of source SLOs is less than 2', () => { - const compositeSlo = createCompositeSLO({ - sources: [createWeightedAverageSource()], - }); - expect(() => validateCompositeSLO(compositeSlo, [])).toThrowError( - 'A composite SLO must contain between 2 and 30 source SLOs.' - ); - }); - - it('throws when the number of source SLOs is more than 30', () => { - const compositeSlo = createCompositeSLO({ - sources: Array(31) - .fill(0) - .map((i) => createWeightedAverageSource()), - }); - expect(() => validateCompositeSLO(compositeSlo, [])).toThrowError( - 'A composite SLO must contain between 2 and 30 source SLOs.' - ); - }); - - it("throws when specified source SLOs don't match the actual SLO revision", () => { - const sloOne = createSLO({ revision: 3 }); - const sloTwo = createSLO({ revision: 2 }); - const compositeSlo = createCompositeSLO({ - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: 1 }), - ], - }); - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'One or many source SLOs are not matching the specified id and revision.' - ); - }); - - it('throws when specified source SLOs refers to a non-existant SLO', () => { - const sloOne = createSLO({ revision: 3 }); - const compositeSlo = createCompositeSLO({ - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: 'non-existant' }), - ], - }); - expect(() => validateCompositeSLO(compositeSlo, [sloOne])).toThrowError( - 'One or many source SLOs are not matching the specified id and revision.' - ); - }); - - it('throws when the time window is not the same accros all source SLOs', () => { - const sloOne = createSLO({ timeWindow: sevenDaysRolling() }); - const sloTwo = createSLO({ timeWindow: weeklyCalendarAligned() }); - const compositeSlo = createCompositeSLO({ - timeWindow: sevenDaysRolling(), - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'Invalid time window. Every source SLO must use the same time window as the composite.' - ); - }); - - it('throws when the time window duration is not the same accros all source SLOs', () => { - const sloOne = createSLO({ timeWindow: sevenDaysRolling() }); - const sloTwo = createSLO({ timeWindow: thirtyDaysRolling() }); - const compositeSlo = createCompositeSLO({ - timeWindow: sevenDaysRolling(), - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'Invalid time window. Every source SLO must use the same time window as the composite.' - ); - }); - - it('throws when the budgeting method is not the same accros all source SLOs', () => { - const sloOne = createSLO({ budgetingMethod: 'occurrences' }); - const sloTwo = createSLO({ budgetingMethod: 'timeslices' }); - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'occurrences', - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'Invalid budgeting method. Every source SLO must use the same budgeting method as the composite.' - ); - }); - - it('throws when the timeslices window is not defined on the composite SLO', () => { - const sloOne = createSLO({ - budgetingMethod: 'timeslices', - objective: { target: 0.98, timesliceTarget: 0.95, timesliceWindow: fiveMinute() }, - }); - const sloTwo = createSLO({ - budgetingMethod: 'timeslices', - objective: { target: 0.98, timesliceTarget: 0.95, timesliceWindow: fiveMinute() }, - }); - - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'timeslices', - objective: { - target: 0.9, - }, - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'Invalid timeslices objective. A timeslice window must be set and equal to all source SLO.' - ); - }); - - it('throws when the timeslices window is not the same accros all source SLOs', () => { - const sloOne = createSLO({ - budgetingMethod: 'timeslices', - objective: { target: 0.98, timesliceTarget: 0.95, timesliceWindow: twoMinute() }, - }); - const sloTwo = createSLO({ - budgetingMethod: 'timeslices', - objective: { target: 0.98, timesliceTarget: 0.95, timesliceWindow: fiveMinute() }, - }); - - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'timeslices', - objective: { - target: 0.9, - timesliceTarget: 0.95, - timesliceWindow: fiveMinute(), - }, - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).toThrowError( - 'Invalid budgeting method. Every source SLO must use the same timeslice window.' - ); - }); - - describe('happy flow', () => { - it('throws nothing', () => { - const sloOne = createSLO({ - budgetingMethod: 'occurrences', - timeWindow: sevenDaysRolling(), - revision: 2, - }); - const sloTwo = createSLO({ - budgetingMethod: 'occurrences', - timeWindow: sevenDaysRolling(), - revision: 3, - }); - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'occurrences', - timeWindow: sevenDaysRolling(), - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).not.toThrow(); - }); - - it('throws nothing in case of timeslices source SLOs', () => { - const sloOne = createSLOWithTimeslicesBudgetingMethod(); - const sloTwo = createSLOWithTimeslicesBudgetingMethod(); - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'timeslices', - objective: { - target: 0.98, - timesliceTarget: 0.95, - timesliceWindow: twoMinute(), - }, - timeWindow: sevenDaysRolling(), - sources: [ - createWeightedAverageSource({ id: sloOne.id, revision: sloOne.revision }), - createWeightedAverageSource({ id: sloTwo.id, revision: sloTwo.revision }), - ], - }); - - expect(() => validateCompositeSLO(compositeSlo, [sloOne, sloTwo])).not.toThrow(); - }); - }); -}); diff --git a/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.ts b/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.ts deleted file mode 100644 index dd6edaf746c73..0000000000000 --- a/x-pack/plugins/observability/server/domain/services/composite_slo/validate_composite_slo.ts +++ /dev/null @@ -1,89 +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 { calendarAlignedTimeWindowSchema, rollingTimeWindowSchema } from '@kbn/slo-schema'; -import { IllegalArgumentError } from '../../../errors'; -import { SLO } from '../../models'; -import { CompositeSLO } from '../../models/composite_slo'; - -export function validateCompositeSLO(compositeSlo: CompositeSLO, sloList: SLO[]) { - assertNumberOfSourceSlo(compositeSlo); - assertMatchingSloList(compositeSlo, sloList); - assertSameBudgetingMethod(compositeSlo, sloList); - assertSameTimeWindow(compositeSlo, sloList); -} - -function assertNumberOfSourceSlo(compositeSlo: CompositeSLO) { - if (compositeSlo.sources.length < 2 || compositeSlo.sources.length > 30) { - throw new IllegalArgumentError('A composite SLO must contain between 2 and 30 source SLOs.'); - } -} - -function assertMatchingSloList(compositeSlo: CompositeSLO, sloList: SLO[]) { - const everySourceSloMatches = compositeSlo.sources.every((sourceSlo) => - sloList.find((slo) => sourceSlo.id === slo.id && sourceSlo.revision === slo.revision) - ); - - if (!everySourceSloMatches) { - throw new IllegalArgumentError( - 'One or many source SLOs are not matching the specified id and revision.' - ); - } -} - -function assertSameBudgetingMethod(compositeSlo: CompositeSLO, sloList: SLO[]) { - const haveSameBudgetingMethod = sloList.every( - (slo) => slo.budgetingMethod === compositeSlo.budgetingMethod - ); - - if (compositeSlo.budgetingMethod === 'timeslices') { - if (compositeSlo.objective.timesliceWindow === undefined) { - throw new IllegalArgumentError( - 'Invalid timeslices objective. A timeslice window must be set and equal to all source SLO.' - ); - } - const haveSameTimesliceWindow = sloList.every((slo) => - slo.objective.timesliceWindow?.isEqual(compositeSlo.objective.timesliceWindow!) - ); - if (!haveSameTimesliceWindow) { - throw new IllegalArgumentError( - 'Invalid budgeting method. Every source SLO must use the same timeslice window.' - ); - } - } - - if (!haveSameBudgetingMethod) { - throw new IllegalArgumentError( - 'Invalid budgeting method. Every source SLO must use the same budgeting method as the composite.' - ); - } -} - -function assertSameTimeWindow(compositeSlo: CompositeSLO, sloList: SLO[]) { - let haveSameTimeWindow = false; - if (rollingTimeWindowSchema.is(compositeSlo.timeWindow)) { - haveSameTimeWindow = sloList.every( - (slo) => - slo.timeWindow.duration.isEqual(compositeSlo.timeWindow.duration) && - rollingTimeWindowSchema.is(slo.timeWindow) - ); - } - - if (calendarAlignedTimeWindowSchema.is(compositeSlo.timeWindow)) { - haveSameTimeWindow = sloList.every( - (slo) => - slo.timeWindow.duration.isEqual(compositeSlo.timeWindow.duration) && - calendarAlignedTimeWindowSchema.is(slo.timeWindow) - ); - } - - if (!haveSameTimeWindow) { - throw new IllegalArgumentError( - 'Invalid time window. Every source SLO must use the same time window as the composite.' - ); - } -} diff --git a/x-pack/plugins/observability/server/domain/services/compute_summary_status.ts b/x-pack/plugins/observability/server/domain/services/compute_summary_status.ts index 77ada8cd9c233..3aaaffe180b6a 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_summary_status.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_summary_status.ts @@ -5,13 +5,9 @@ * 2.0. */ -import { CompositeSLO, ErrorBudget, SLO, Status } from '../models'; +import { ErrorBudget, SLO, Status } from '../models'; -export function computeSummaryStatus( - slo: SLO | CompositeSLO, - sliValue: number, - errorBudget: ErrorBudget -): Status { +export function computeSummaryStatus(slo: SLO, sliValue: number, errorBudget: ErrorBudget): Status { if (sliValue === -1) { return 'NO_DATA'; } diff --git a/x-pack/plugins/observability/server/errors/errors.ts b/x-pack/plugins/observability/server/errors/errors.ts index cbecb88d9ce05..eaec36e66d08b 100644 --- a/x-pack/plugins/observability/server/errors/errors.ts +++ b/x-pack/plugins/observability/server/errors/errors.ts @@ -17,9 +17,6 @@ export class ObservabilityError extends Error { export class SLONotFound extends ObservabilityError {} export class SLOIdConflict extends ObservabilityError {} -export class CompositeSLONotFound extends ObservabilityError {} -export class CompositeSLOIdConflict extends ObservabilityError {} - export class InvalidQueryError extends ObservabilityError {} export class InternalQueryError extends ObservabilityError {} export class NotSupportedError extends ObservabilityError {} diff --git a/x-pack/plugins/observability/server/errors/handler.ts b/x-pack/plugins/observability/server/errors/handler.ts index 2898e53624832..c10f1d98c083e 100644 --- a/x-pack/plugins/observability/server/errors/handler.ts +++ b/x-pack/plugins/observability/server/errors/handler.ts @@ -5,21 +5,14 @@ * 2.0. */ -import { - CompositeSLOIdConflict, - CompositeSLONotFound, - ObservabilityError, - SecurityException, - SLOIdConflict, - SLONotFound, -} from './errors'; +import { ObservabilityError, SecurityException, SLOIdConflict, SLONotFound } from './errors'; export function getHTTPResponseCode(error: ObservabilityError): number { - if (error instanceof SLONotFound || error instanceof CompositeSLONotFound) { + if (error instanceof SLONotFound) { return 404; } - if (error instanceof SLOIdConflict || error instanceof CompositeSLOIdConflict) { + if (error instanceof SLOIdConflict) { return 409; } diff --git a/x-pack/plugins/observability/server/index.ts b/x-pack/plugins/observability/server/index.ts index e2e6bc768918d..e05740ea9785c 100644 --- a/x-pack/plugins/observability/server/index.ts +++ b/x-pack/plugins/observability/server/index.ts @@ -57,9 +57,6 @@ const configSchema = schema.object({ groupByPageSize: schema.number({ defaultValue: 10_000 }), }), enabled: schema.boolean({ defaultValue: true }), - compositeSlo: schema.object({ - enabled: schema.boolean({ defaultValue: false }), - }), }); export const config: PluginConfigDescriptor = { diff --git a/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts index cc63f2cd688d3..719eddbd0e646 100644 --- a/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts @@ -14,7 +14,6 @@ import { TimeUnitChar } from '../../../../common'; export enum InfraRuleType { MetricThreshold = 'metrics.alert.threshold', InventoryThreshold = 'metrics.alert.inventory.threshold', - Anomaly = 'metrics.alert.anomaly', } export enum AlertStates { diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 9d35ced6cb648..b4a81fb11e850 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -43,7 +43,7 @@ import { registerSloUsageCollector } from './lib/collectors/register'; import { registerRuleTypes } from './lib/rules/register_rule_types'; import { getObservabilityServerRouteRepository } from './routes/get_global_observability_server_route_repository'; import { registerRoutes } from './routes/register_routes'; -import { compositeSlo, slo, SO_COMPOSITE_SLO_TYPE, SO_SLO_TYPE } from './saved_objects'; +import { slo, SO_SLO_TYPE } from './saved_objects'; import { threshold } from './saved_objects/threshold'; import { DefaultResourceInstaller, @@ -182,9 +182,7 @@ export class ObservabilityPlugin implements Plugin { const { ruleDataService } = plugins.ruleRegistry; - const savedObjectTypes = config.compositeSlo.enabled - ? [SO_SLO_TYPE, SO_COMPOSITE_SLO_TYPE] - : [SO_SLO_TYPE]; + const savedObjectTypes = [SO_SLO_TYPE]; plugins.features.registerKibanaFeature({ id: sloFeatureId, name: i18n.translate('xpack.observability.featureRegistry.linkSloTitle', { @@ -236,9 +234,6 @@ export class ObservabilityPlugin implements Plugin { }); core.savedObjects.registerType(slo); - if (config.compositeSlo.enabled) { - core.savedObjects.registerType(compositeSlo); - } core.savedObjects.registerType(threshold); registerRuleTypes( diff --git a/x-pack/plugins/observability/server/routes/composite_slo/route.ts b/x-pack/plugins/observability/server/routes/composite_slo/route.ts deleted file mode 100644 index e1259e3f64ce2..0000000000000 --- a/x-pack/plugins/observability/server/routes/composite_slo/route.ts +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { badRequest } from '@hapi/boom'; -import { - createCompositeSLOParamsSchema, - deleteCompositeSLOParamsSchema, - findCompositeSLOParamsSchema, - getCompositeSLOParamsSchema, - updateCompositeSLOParamsSchema, -} from '@kbn/slo-schema'; - -import { - CreateCompositeSLO, - DefaultSummaryClient, - DeleteCompositeSLO, - FindCompositeSLO, - KibanaSavedObjectsCompositeSLORepository, - UpdateCompositeSLO, -} from '../../services/composite_slo'; -import { GetCompositeSLO } from '../../services/composite_slo/get_composite_slo'; -import { KibanaSavedObjectsSLORepository } from '../../services/slo'; -import { ObservabilityRequestHandlerContext } from '../../types'; -import { createObservabilityServerRoute } from '../create_observability_server_route'; - -const assertLicenseAtLeastPlatinum = async (context: ObservabilityRequestHandlerContext) => { - const { license } = await context.licensing; - if (!license.hasAtLeast('platinum')) { - throw badRequest('Platinum license or higher is needed to make use of this feature.'); - } -}; - -const createCompositeSLORoute = createObservabilityServerRoute({ - endpoint: 'POST /api/observability/composite_slos 2023-05-24', - options: { - tags: ['access:slo_write'], - }, - params: createCompositeSLOParamsSchema, - handler: async ({ context, params }) => { - await assertLicenseAtLeastPlatinum(context); - - const soClient = (await context.core).savedObjects.client; - const compositeSloRepository = new KibanaSavedObjectsCompositeSLORepository(soClient); - const sloRepository = new KibanaSavedObjectsSLORepository(soClient); - const createCompositeSLO = new CreateCompositeSLO(compositeSloRepository, sloRepository); - - const response = await createCompositeSLO.execute(params.body); - - return response; - }, -}); - -const updateCompositeSLORoute = createObservabilityServerRoute({ - endpoint: 'PUT /api/observability/composite_slos/{id} 2023-05-24', - options: { - tags: ['access:slo_write'], - }, - params: updateCompositeSLOParamsSchema, - handler: async ({ context, params }) => { - await assertLicenseAtLeastPlatinum(context); - - const soClient = (await context.core).savedObjects.client; - const compositeSloRepository = new KibanaSavedObjectsCompositeSLORepository(soClient); - const sloRepository = new KibanaSavedObjectsSLORepository(soClient); - const updateCompositeSLO = new UpdateCompositeSLO(compositeSloRepository, sloRepository); - - const response = await updateCompositeSLO.execute(params.path.id, params.body); - - return response; - }, -}); - -const deleteCompositeSLORoute = createObservabilityServerRoute({ - endpoint: 'DELETE /api/observability/composite_slos/{id} 2023-05-24', - options: { - tags: ['access:slo_write'], - }, - params: deleteCompositeSLOParamsSchema, - handler: async ({ context, params }) => { - await assertLicenseAtLeastPlatinum(context); - - const soClient = (await context.core).savedObjects.client; - const compositeSloRepository = new KibanaSavedObjectsCompositeSLORepository(soClient); - const deleteCompositeSLO = new DeleteCompositeSLO(compositeSloRepository); - - await deleteCompositeSLO.execute(params.path.id); - }, -}); - -const getCompositeSLORoute = createObservabilityServerRoute({ - endpoint: 'GET /api/observability/composite_slos/{id} 2023-05-24', - options: { - tags: ['access:slo_read'], - }, - params: getCompositeSLOParamsSchema, - handler: async ({ context, params }) => { - await assertLicenseAtLeastPlatinum(context); - - const soClient = (await context.core).savedObjects.client; - const esClient = (await context.core).elasticsearch.client.asCurrentUser; - - const compositeSloRepository = new KibanaSavedObjectsCompositeSLORepository(soClient); - const summaryClient = new DefaultSummaryClient(esClient); - const getCompositeSlo = new GetCompositeSLO(compositeSloRepository, summaryClient); - - const response = await getCompositeSlo.execute(params.path.id); - - return response; - }, -}); - -const findCompositeSLORoute = createObservabilityServerRoute({ - endpoint: 'GET /api/observability/composite_slos 2023-05-24', - options: { - tags: ['access:slo_read'], - }, - params: findCompositeSLOParamsSchema, - handler: async ({ context, params }) => { - await assertLicenseAtLeastPlatinum(context); - - const soClient = (await context.core).savedObjects.client; - const esClient = (await context.core).elasticsearch.client.asCurrentUser; - const repository = new KibanaSavedObjectsCompositeSLORepository(soClient); - const summaryClient = new DefaultSummaryClient(esClient); - const findCompositeSlo = new FindCompositeSLO(repository, summaryClient); - - const response = await findCompositeSlo.execute(params?.query ?? {}); - - return response; - }, -}); - -export const compositeSloRouteRepository = { - ...createCompositeSLORoute, - ...updateCompositeSLORoute, - ...deleteCompositeSLORoute, - ...getCompositeSLORoute, - ...findCompositeSLORoute, -}; diff --git a/x-pack/plugins/observability/server/routes/get_global_observability_server_route_repository.ts b/x-pack/plugins/observability/server/routes/get_global_observability_server_route_repository.ts index 53f9ffcb750db..d6a71120bb37b 100644 --- a/x-pack/plugins/observability/server/routes/get_global_observability_server_route_repository.ts +++ b/x-pack/plugins/observability/server/routes/get_global_observability_server_route_repository.ts @@ -6,17 +6,13 @@ */ import { ObservabilityConfig } from '..'; -import { compositeSloRouteRepository } from './composite_slo/route'; import { rulesRouteRepository } from './rules/route'; import { sloRouteRepository } from './slo/route'; export function getObservabilityServerRouteRepository(config: ObservabilityConfig) { - const isCompositeSloFeatureEnabled = config.compositeSlo.enabled; - const repository = { ...rulesRouteRepository, ...sloRouteRepository, - ...(isCompositeSloFeatureEnabled ? compositeSloRouteRepository : {}), }; return repository; } diff --git a/x-pack/plugins/observability/server/saved_objects/composite_slo.ts b/x-pack/plugins/observability/server/saved_objects/composite_slo.ts deleted file mode 100644 index 3261cb4b64dc4..0000000000000 --- a/x-pack/plugins/observability/server/saved_objects/composite_slo.ts +++ /dev/null @@ -1,42 +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 { SavedObjectsType } from '@kbn/core-saved-objects-server'; -import { SavedObject } from '@kbn/core/server'; - -import { StoredCompositeSLO } from '../domain/models/composite_slo'; - -export const SO_COMPOSITE_SLO_TYPE = 'composite-slo'; - -export const compositeSlo: SavedObjectsType = { - name: SO_COMPOSITE_SLO_TYPE, - hidden: false, - namespaceType: 'multiple-isolated', - mappings: { - dynamic: false, - properties: { - id: { type: 'keyword' }, - name: { type: 'text' }, - budgetingMethod: { type: 'keyword' }, - compositeMethod: { type: 'keyword' }, - sources: { - properties: { - id: { type: 'keyword' }, - revision: { type: 'integer' }, - }, - }, - tags: { type: 'keyword' }, - }, - }, - management: { - displayName: 'Composite SLO', - importableAndExportable: true, - getTitle(compositeSloSavedObject: SavedObject) { - return `Composite SLO: [${compositeSloSavedObject.attributes.name}]`; - }, - }, -}; diff --git a/x-pack/plugins/observability/server/saved_objects/index.ts b/x-pack/plugins/observability/server/saved_objects/index.ts index 2e2a36f68e30d..6e4c8b66f7521 100644 --- a/x-pack/plugins/observability/server/saved_objects/index.ts +++ b/x-pack/plugins/observability/server/saved_objects/index.ts @@ -6,4 +6,3 @@ */ export { slo, SO_SLO_TYPE } from './slo'; -export { compositeSlo, SO_COMPOSITE_SLO_TYPE } from './composite_slo'; diff --git a/x-pack/plugins/observability/server/services/composite_slo/__snapshots__/summary_client.test.ts.snap b/x-pack/plugins/observability/server/services/composite_slo/__snapshots__/summary_client.test.ts.snap deleted file mode 100644 index ec4d29cba2f10..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/__snapshots__/summary_client.test.ts.snap +++ /dev/null @@ -1,185 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SummaryClient fetchSummary with a rolling and occurrences composite SLO returns the summary 1`] = ` -Object { - "errorBudget": Object { - "consumed": 1.666667, - "initial": 0.03, - "isEstimated": false, - "remaining": -0.666667, - }, - "sliValue": 0.95, - "status": "VIOLATED", -} -`; - -exports[`SummaryClient fetchSummary with a rolling and occurrences composite SLO returns the summary 2`] = ` -Array [ - Object { - "index": ".slo-observability.sli-v2*", - }, - Object { - "aggs": Object { - "bySloId": Object { - "aggs": Object { - "good": Object { - "sum": Object { - "field": "slo.numerator", - }, - }, - "total": Object { - "sum": Object { - "field": "slo.denominator", - }, - }, - }, - "terms": Object { - "field": "slo.id", - }, - }, - }, - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "2023-05-22T10:15:00.000Z", - "lt": "2023-05-29T10:15:00.000Z", - }, - }, - }, - ], - "minimum_should_match": 1, - "should": Array [ - Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "slo.id": "slo-1", - }, - }, - Object { - "term": Object { - "slo.revision": 1, - }, - }, - ], - }, - }, - Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "slo.id": "slo-2", - }, - }, - Object { - "term": Object { - "slo.revision": 2, - }, - }, - ], - }, - }, - ], - }, - }, - "size": 0, - }, -] -`; - -exports[`SummaryClient with rolling and timeslices SLO returns the summary 1`] = ` -Object { - "errorBudget": Object { - "consumed": 1.666667, - "initial": 0.03, - "isEstimated": false, - "remaining": -0.666667, - }, - "sliValue": 0.95, - "status": "VIOLATED", -} -`; - -exports[`SummaryClient with rolling and timeslices SLO returns the summary 2`] = ` -Array [ - Object { - "index": ".slo-observability.sli-v2*", - }, - Object { - "aggs": Object { - "bySloId": Object { - "aggs": Object { - "good": Object { - "sum": Object { - "field": "slo.isGoodSlice", - }, - }, - "total": Object { - "value_count": Object { - "field": "slo.isGoodSlice", - }, - }, - }, - "terms": Object { - "field": "slo.id", - }, - }, - }, - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "2023-05-22T10:15:00.000Z", - "lt": "2023-05-29T10:15:00.000Z", - }, - }, - }, - ], - "minimum_should_match": 1, - "should": Array [ - Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "slo.id": "slo-1", - }, - }, - Object { - "term": Object { - "slo.revision": 1, - }, - }, - ], - }, - }, - Object { - "bool": Object { - "must": Array [ - Object { - "term": Object { - "slo.id": "slo-2", - }, - }, - Object { - "term": Object { - "slo.revision": 2, - }, - }, - ], - }, - }, - ], - }, - }, - "size": 0, - }, -] -`; diff --git a/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.test.ts b/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.test.ts deleted file mode 100644 index e1d234018c547..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.test.ts +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { SavedObjectsClientContract, SavedObjectsFindResponse } from '@kbn/core/server'; -import { savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { compositeSloSchema } from '@kbn/slo-schema'; - -import { CompositeSLO, StoredCompositeSLO } from '../../domain/models'; -import { CompositeSLOIdConflict, CompositeSLONotFound } from '../../errors'; -import { SO_COMPOSITE_SLO_TYPE } from '../../saved_objects'; -import { KibanaSavedObjectsCompositeSLORepository } from './composite_slo_repository'; -import { aStoredCompositeSLO, createCompositeSLO } from './fixtures/composite_slo'; - -function createFindResponse( - compositeSloList: CompositeSLO[] -): SavedObjectsFindResponse { - return { - page: 1, - per_page: 25, - total: compositeSloList.length, - saved_objects: compositeSloList.map((compositeSlo) => ({ - id: compositeSlo.id, - attributes: compositeSloSchema.encode(compositeSlo), - type: SO_COMPOSITE_SLO_TYPE, - references: [], - score: 1, - })), - }; -} - -describe('KibanaSavedObjectsCompositeSLORepository', () => { - let soClientMock: jest.Mocked; - - beforeEach(() => { - soClientMock = savedObjectsClientMock.create(); - }); - - describe('saving a composite SLO', () => { - it('saves the new composite SLO', async () => { - const compositeSlo = createCompositeSLO({ id: 'my-composite-id' }); - soClientMock.find.mockResolvedValueOnce(createFindResponse([])); - soClientMock.create.mockResolvedValueOnce(aStoredCompositeSLO(compositeSlo)); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - - const savedCompositeSlo = await repository.save(compositeSlo); - - expect(savedCompositeSlo).toEqual(compositeSlo); - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `composite-slo.attributes.id:(${compositeSlo.id})`, - }); - expect(soClientMock.create).toHaveBeenCalledWith( - SO_COMPOSITE_SLO_TYPE, - compositeSloSchema.encode(compositeSlo), - { - id: undefined, - overwrite: true, - } - ); - }); - - it('throws when the Composite SLO id already exists and "throwOnConflict" is true', async () => { - const compositeSlo = createCompositeSLO({ id: 'my-composite-id' }); - soClientMock.find.mockResolvedValueOnce(createFindResponse([compositeSlo])); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - - await expect(repository.save(compositeSlo, { throwOnConflict: true })).rejects.toThrowError( - new CompositeSLOIdConflict(`Composite SLO [${compositeSlo.id}] already exists`) - ); - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `composite-slo.attributes.id:(${compositeSlo.id})`, - }); - }); - - it('updates the existing composite SLO', async () => { - const compositeSlo = createCompositeSLO({ id: 'my-composite-id' }); - soClientMock.find.mockResolvedValueOnce(createFindResponse([compositeSlo])); - soClientMock.create.mockResolvedValueOnce(aStoredCompositeSLO(compositeSlo)); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - - const savedCompositeSLO = await repository.save(compositeSlo); - - expect(savedCompositeSLO).toEqual(compositeSlo); - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `composite-slo.attributes.id:(${compositeSlo.id})`, - }); - expect(soClientMock.create).toHaveBeenCalledWith( - SO_COMPOSITE_SLO_TYPE, - compositeSloSchema.encode(compositeSlo), - { - id: 'my-composite-id', - overwrite: true, - } - ); - }); - }); - - describe('deleting a composite SLO', () => { - it('throws when not found', async () => { - soClientMock.find.mockResolvedValueOnce(createFindResponse([])); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - - await expect(repository.deleteById('inexistant-slo-id')).rejects.toThrowError( - new CompositeSLONotFound('Composite SLO [inexistant-slo-id] not found') - ); - }); - - it('deletes a composite SLO', async () => { - const compositeSlo = createCompositeSLO({ id: 'my-composite-id' }); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - soClientMock.find.mockResolvedValueOnce(createFindResponse([compositeSlo])); - - await repository.deleteById(compositeSlo.id); - - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `composite-slo.attributes.id:(${compositeSlo.id})`, - }); - expect(soClientMock.delete).toHaveBeenCalledWith(SO_COMPOSITE_SLO_TYPE, compositeSlo.id); - }); - }); - - describe('finding a composite SLO', () => { - it('finds an existing composite SLO', async () => { - const compositeSlo = createCompositeSLO(); - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - soClientMock.find.mockResolvedValueOnce(createFindResponse([compositeSlo])); - - const foundSLO = await repository.findById(compositeSlo.id); - expect(foundSLO).toEqual(compositeSlo); - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `composite-slo.attributes.id:(${compositeSlo.id})`, - }); - }); - - it('throws when the composite SLO does not exist', async () => { - const repository = new KibanaSavedObjectsCompositeSLORepository(soClientMock); - soClientMock.find.mockResolvedValueOnce(createFindResponse([])); - - await expect(repository.findById('inexistant-id')).rejects.toThrowError( - new CompositeSLONotFound('Composite SLO [inexistant-id] not found') - ); - - expect(soClientMock.find).toHaveBeenCalledWith({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: 'composite-slo.attributes.id:(inexistant-id)', - }); - }); - }); -}); diff --git a/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.ts b/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.ts deleted file mode 100644 index e11e0ecd8f071..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/composite_slo_repository.ts +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { compositeSloSchema } from '@kbn/slo-schema'; -import { fold } from 'fp-ts/lib/Either'; -import { pipe } from 'fp-ts/lib/pipeable'; -import * as t from 'io-ts'; - -import { CompositeSLO, StoredCompositeSLO } from '../../domain/models/composite_slo'; -import { CompositeSLOIdConflict, CompositeSLONotFound } from '../../errors'; -import { SO_COMPOSITE_SLO_TYPE } from '../../saved_objects'; - -export interface CompositeSLORepository { - save(compositeSlo: CompositeSLO, options?: { throwOnConflict: boolean }): Promise; - deleteById(id: string): Promise; - findById(id: string): Promise; - find(criteria: Criteria, sort: Sort, pagination: Pagination): Promise>; -} - -export interface Criteria { - name?: string; -} - -export interface Pagination { - page: number; - perPage: number; -} - -export const SortDirection = { - Asc: 'Asc', - Desc: 'Desc', -} as const; - -type ObjectValues = T[keyof T]; -type SortDirection = ObjectValues; - -export const SortField = { - CreationTime: 'CreationTime', - IndicatorType: 'IndicatorType', -}; - -type SortField = ObjectValues; - -export interface Sort { - field: SortField; - direction: SortDirection; -} - -export interface Paginated { - page: number; - perPage: number; - total: number; - results: T[]; -} - -const SAVED_OBJECT_ATTRIBUTES_PATH = 'composite-slo.attributes'; - -export class KibanaSavedObjectsCompositeSLORepository implements CompositeSLORepository { - constructor(private soClient: SavedObjectsClientContract) {} - - async save( - compositeSlo: CompositeSLO, - options = { throwOnConflict: false } - ): Promise { - let existingSavedObjectId; - const findResponse = await this.soClient.find({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `${SAVED_OBJECT_ATTRIBUTES_PATH}.id:(${compositeSlo.id})`, - }); - - if (findResponse.total === 1) { - if (options.throwOnConflict) { - throw new CompositeSLOIdConflict(`Composite SLO [${compositeSlo.id}] already exists`); - } - - existingSavedObjectId = findResponse.saved_objects[0].id; - } - - const createResponse = await this.soClient.create( - SO_COMPOSITE_SLO_TYPE, - toStoredCompositeSLO(compositeSlo), - { - id: existingSavedObjectId, - overwrite: true, - } - ); - - return toCompositeSLO(createResponse.attributes); - } - - async deleteById(id: string): Promise { - const response = await this.soClient.find({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `${SAVED_OBJECT_ATTRIBUTES_PATH}.id:(${id})`, - }); - - if (response.total === 0) { - throw new CompositeSLONotFound(`Composite SLO [${id}] not found`); - } - - await this.soClient.delete(SO_COMPOSITE_SLO_TYPE, response.saved_objects[0].id); - } - - async findById(id: string): Promise { - const response = await this.soClient.find({ - type: SO_COMPOSITE_SLO_TYPE, - page: 1, - perPage: 1, - filter: `${SAVED_OBJECT_ATTRIBUTES_PATH}.id:(${id})`, - }); - - if (response.total === 0) { - throw new CompositeSLONotFound(`Composite SLO [${id}] not found`); - } - - return toCompositeSLO(response.saved_objects[0].attributes); - } - - async find( - criteria: Criteria, - sort: Sort, - pagination: Pagination - ): Promise> { - const { search, searchFields } = buildSearch(criteria); - const { sortField, sortOrder } = buildSortQuery(sort); - const response = await this.soClient.find({ - type: SO_COMPOSITE_SLO_TYPE, - page: pagination.page, - perPage: pagination.perPage, - search, - searchFields, - sortField, - sortOrder, - }); - - return { - total: response.total, - page: response.page, - perPage: response.per_page, - results: response.saved_objects.map((so) => toCompositeSLO(so.attributes)), - }; - } -} - -function toStoredCompositeSLO(compositeSlo: CompositeSLO): StoredCompositeSLO { - return compositeSloSchema.encode(compositeSlo); -} - -function toCompositeSLO(storedCompositeSlo: StoredCompositeSLO): CompositeSLO { - return pipe( - compositeSloSchema.decode(storedCompositeSlo), - fold(() => { - throw new Error(`Invalid stored composite SLO [${storedCompositeSlo.id}]`); - }, t.identity) - ); -} - -function buildSearch(criteria: Criteria): { - search: string | undefined; - searchFields: string[] | undefined; -} { - if (!criteria.name) { - return { search: undefined, searchFields: undefined }; - } - - return { search: addWildcardsIfAbsent(criteria.name), searchFields: ['name'] }; -} - -function buildSortQuery(sort: Sort): { sortField: string; sortOrder: 'asc' | 'desc' } { - let sortField: string; - switch (sort.field) { - case SortField.CreationTime: - default: - sortField = 'created_at'; - break; - } - - return { - sortField, - sortOrder: sort.direction === SortDirection.Desc ? 'desc' : 'asc', - }; -} - -const WILDCARD_CHAR = '*'; -function addWildcardsIfAbsent(value: string): string { - let updatedValue = value; - if (updatedValue.substring(0, 1) !== WILDCARD_CHAR) { - updatedValue = `${WILDCARD_CHAR}${updatedValue}`; - } - - if (value.substring(value.length - 1) !== WILDCARD_CHAR) { - updatedValue = `${updatedValue}${WILDCARD_CHAR}`; - } - - return updatedValue; -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/create_composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/create_composite_slo.ts deleted file mode 100644 index 2e420a53798a6..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/create_composite_slo.ts +++ /dev/null @@ -1,54 +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 { - CreateCompositeSLOParams, - CreateCompositeSLOResponse, - CreateSLOResponse, -} from '@kbn/slo-schema'; -import { v1 as uuidv1 } from 'uuid'; - -import { CompositeSLO } from '../../domain/models/composite_slo'; -import { validateCompositeSLO } from '../../domain/services/composite_slo'; -import { SLORepository } from '../slo/slo_repository'; -import { CompositeSLORepository } from './composite_slo_repository'; - -export class CreateCompositeSLO { - constructor( - private compositeSloRepository: CompositeSLORepository, - private sloRepository: SLORepository - ) {} - - public async execute(params: CreateCompositeSLOParams): Promise { - const compositeSlo = toCompositeSLO(params); - const sloList = await this.sloRepository.findAllByIds( - compositeSlo.sources.map((slo) => slo.id) - ); - validateCompositeSLO(compositeSlo, sloList); - - await this.compositeSloRepository.save(compositeSlo, { throwOnConflict: true }); - - return toResponse(compositeSlo); - } -} - -function toCompositeSLO(params: CreateCompositeSLOParams): CompositeSLO { - const now = new Date(); - return { - ...params, - id: params.id ?? uuidv1(), - tags: params.tags ?? [], - createdAt: now, - updatedAt: now, - }; -} - -function toResponse(compositeSlo: CompositeSLO): CreateCompositeSLOResponse { - return { - id: compositeSlo.id, - }; -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/delete_composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/delete_composite_slo.ts deleted file mode 100644 index c795db2391cfa..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/delete_composite_slo.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { CompositeSLOId } from '../../domain/models'; -import { CompositeSLORepository } from './composite_slo_repository'; - -export class DeleteCompositeSLO { - constructor(private compositeSloRepository: CompositeSLORepository) {} - - public async execute(compositeSloId: CompositeSLOId): Promise { - await this.compositeSloRepository.deleteById(compositeSloId); - } -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/find_composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/find_composite_slo.ts deleted file mode 100644 index 79bdb734614b1..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/find_composite_slo.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - FindCompositeSLOParams, - FindCompositeSLOResponse, - findCompositeSLOResponseSchema, -} from '@kbn/slo-schema'; -import { CompositeSLO } from '../../domain/models'; -import { - CompositeSLORepository, - Paginated, - Pagination, - Sort, - SortDirection, - SortField, - Criteria, -} from './composite_slo_repository'; -import { SummaryClient } from './summary_client'; - -const DEFAULT_PAGE = 1; -const DEFAULT_PER_PAGE = 25; - -export class FindCompositeSLO { - constructor(private repository: CompositeSLORepository, private summaryClient: SummaryClient) {} - - public async execute(params: FindCompositeSLOParams): Promise { - const pagination: Pagination = toPagination(params); - const criteria: Criteria = toCriteria(params); - const sort: Sort = toSort(params); - - const { results: compositeSloList, ...resultMeta }: Paginated = - await this.repository.find(criteria, sort, pagination); - const summaryByCompositeSlo = await this.summaryClient.fetchSummary(compositeSloList); - - return findCompositeSLOResponseSchema.encode({ - page: resultMeta.page, - perPage: resultMeta.perPage, - total: resultMeta.total, - results: compositeSloList.map((compositeSlo) => ({ - ...compositeSlo, - summary: summaryByCompositeSlo[compositeSlo.id], - })), - }); - } -} - -function toCriteria(params: FindCompositeSLOParams): Criteria { - return { name: params.name }; -} - -function toPagination(params: FindCompositeSLOParams): Pagination { - const page = Number(params.page); - const perPage = Number(params.perPage); - - return { - page: !isNaN(page) && page >= 1 ? page : DEFAULT_PAGE, - perPage: !isNaN(perPage) && perPage >= 1 ? perPage : DEFAULT_PER_PAGE, - }; -} - -function toSort(params: FindCompositeSLOParams): Sort { - return { - field: SortField.CreationTime, - direction: params.sortDirection === 'desc' ? SortDirection.Desc : SortDirection.Asc, - }; -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/fixtures/composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/fixtures/composite_slo.ts deleted file mode 100644 index bba107e29d689..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/fixtures/composite_slo.ts +++ /dev/null @@ -1,60 +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 { cloneDeep } from 'lodash'; -import { v1 as uuidv1 } from 'uuid'; -import { SavedObject } from '@kbn/core-saved-objects-server'; - -import { compositeSloSchema } from '@kbn/slo-schema'; -import { SO_COMPOSITE_SLO_TYPE } from '../../../saved_objects'; -import { CompositeSLO, StoredCompositeSLO, WeightedAverageSource } from '../../../domain/models'; -import { sevenDaysRolling } from '../../slo/fixtures/time_window'; - -export const createWeightedAverageSource = ( - params: Partial = {} -): WeightedAverageSource => { - return cloneDeep({ - id: uuidv1(), - revision: 1, - weight: 1, - ...params, - }); -}; - -const defaultCompositeSLO: Omit = { - name: 'some composite slo', - timeWindow: sevenDaysRolling(), - budgetingMethod: 'occurrences', - objective: { - target: 0.95, - }, - compositeMethod: 'weightedAverage', - sources: [createWeightedAverageSource(), createWeightedAverageSource()], - tags: ['critical', 'k8s'], -}; - -export const createCompositeSLO = (params: Partial = {}): CompositeSLO => { - const now = new Date(); - return cloneDeep({ - ...defaultCompositeSLO, - id: uuidv1(), - createdAt: now, - updatedAt: now, - ...params, - }); -}; - -export const aStoredCompositeSLO = ( - compositeSlo: CompositeSLO -): SavedObject => { - return { - id: uuidv1(), - attributes: compositeSloSchema.encode(compositeSlo), - type: SO_COMPOSITE_SLO_TYPE, - references: [], - }; -}; diff --git a/x-pack/plugins/observability/server/services/composite_slo/get_composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/get_composite_slo.ts deleted file mode 100644 index 8a0170cbfa080..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/get_composite_slo.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { compositeSLOResponseSchema, GetCompositeSLOResponse } from '@kbn/slo-schema'; -import { CompositeSLO, CompositeSLOId, Summary } from '../../domain/models'; -import { CompositeSLORepository } from './composite_slo_repository'; -import { SummaryClient } from './summary_client'; - -export class GetCompositeSLO { - constructor( - private compositeSloRepository: CompositeSLORepository, - private summaryClient: SummaryClient - ) {} - - public async execute(compositeSloId: CompositeSLOId): Promise { - const compositeSlo = await this.compositeSloRepository.findById(compositeSloId); - const summaryByCompositeSlo = await this.summaryClient.fetchSummary([compositeSlo]); - - return toResponse(compositeSlo, summaryByCompositeSlo[compositeSlo.id]); - } -} - -function toResponse(compositeSlo: CompositeSLO, summary: Summary): GetCompositeSLOResponse { - return { - ...compositeSLOResponseSchema.encode(compositeSlo), - summary, - }; -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/index.ts b/x-pack/plugins/observability/server/services/composite_slo/index.ts deleted file mode 100644 index e9f8320ea833e..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/index.ts +++ /dev/null @@ -1,13 +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. - */ - -export * from './composite_slo_repository'; -export * from './create_composite_slo'; -export * from './delete_composite_slo'; -export * from './find_composite_slo'; -export * from './summary_client'; -export * from './update_composite_slo'; diff --git a/x-pack/plugins/observability/server/services/composite_slo/summary_client.test.ts b/x-pack/plugins/observability/server/services/composite_slo/summary_client.test.ts deleted file mode 100644 index 813183c6576d6..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/summary_client.test.ts +++ /dev/null @@ -1,102 +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 { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { CompositeSLO, Duration, DurationUnit } from '../../domain/models'; -import { sevenDaysRolling } from '../slo/fixtures/time_window'; -import { createCompositeSLO } from './fixtures/composite_slo'; -import { DefaultSummaryClient } from './summary_client'; - -const commonEsResponse = { - took: 100, - timed_out: false, - _shards: { - total: 0, - successful: 0, - skipped: 0, - failed: 0, - }, - hits: { - hits: [], - }, -}; - -const createEsResponse = (compositeSlo: CompositeSLO) => ({ - ...commonEsResponse, - responses: [ - { - ...commonEsResponse, - aggregations: { - bySloId: { - buckets: compositeSlo.sources.map((source) => ({ - key: source.id, - good: { value: 95 }, - total: { value: 100 }, - })), - }, - }, - }, - ], -}); - -describe('SummaryClient', () => { - let esClientMock: ElasticsearchClientMock; - - beforeEach(() => { - esClientMock = elasticsearchServiceMock.createElasticsearchClient(); - jest.useFakeTimers().setSystemTime(new Date('2023-05-29T10:15:00.000Z')); - }); - - describe('fetchSummary', () => { - describe('with a rolling and occurrences composite SLO', () => { - it('returns the summary', async () => { - const compositeSlo = createCompositeSLO({ - objective: { target: 0.97 }, - timeWindow: sevenDaysRolling(), - sources: [ - { id: 'slo-1', revision: 1, weight: 2 }, - { id: 'slo-2', revision: 2, weight: 1 }, - ], - }); - esClientMock.msearch.mockResolvedValueOnce(createEsResponse(compositeSlo)); - const summaryClient = new DefaultSummaryClient(esClientMock); - - const result = await summaryClient.fetchSummary([compositeSlo]); - - expect(result[compositeSlo.id]).toMatchSnapshot(); - // @ts-ignore - expect(esClientMock.msearch.mock.calls[0][0].searches).toMatchSnapshot(); - }); - }); - }); - - describe('with rolling and timeslices SLO', () => { - it('returns the summary', async () => { - const compositeSlo = createCompositeSLO({ - budgetingMethod: 'timeslices', - objective: { - target: 0.97, - timesliceTarget: 0.9, - timesliceWindow: new Duration(10, DurationUnit.Minute), - }, - sources: [ - { id: 'slo-1', revision: 1, weight: 2 }, - { id: 'slo-2', revision: 2, weight: 1 }, - ], - timeWindow: sevenDaysRolling(), - }); - esClientMock.msearch.mockResolvedValueOnce(createEsResponse(compositeSlo)); - const summaryClient = new DefaultSummaryClient(esClientMock); - - const result = await summaryClient.fetchSummary([compositeSlo]); - - expect(result[compositeSlo.id]).toMatchSnapshot(); - // @ts-ignore searches not typed properly - expect(esClientMock.msearch.mock.calls[0][0].searches).toMatchSnapshot(); - }); - }); -}); diff --git a/x-pack/plugins/observability/server/services/composite_slo/summary_client.ts b/x-pack/plugins/observability/server/services/composite_slo/summary_client.ts deleted file mode 100644 index 275e70b6db300..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/summary_client.ts +++ /dev/null @@ -1,192 +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 { MsearchMultisearchBody } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { ElasticsearchClient } from '@kbn/core/server'; -import { - calendarAlignedTimeWindowSchema, - Duration, - occurrencesBudgetingMethodSchema, - timeslicesBudgetingMethodSchema, - toMomentUnitOfTime, -} from '@kbn/slo-schema'; -import moment from 'moment'; -import { SLO_DESTINATION_INDEX_PATTERN } from '../../assets/constants'; -import { CompositeSLO, CompositeSLOId, DateRange, Summary } from '../../domain/models'; -import { computeSLI, computeSummaryStatus, toErrorBudget } from '../../domain/services'; -import { toDateRange } from '../../domain/services/date_range'; -import { toHighPrecision } from '../../utils/number'; - -export interface SummaryClient { - fetchSummary(compositeSloList: CompositeSLO[]): Promise>; -} - -export class DefaultSummaryClient implements SummaryClient { - constructor(private esClient: ElasticsearchClient) {} - - async fetchSummary(compositeSloList: CompositeSLO[]): Promise> { - const dateRangeByCompositeSlo = compositeSloList.reduce>( - (acc, compositeSlo) => { - acc[compositeSlo.id] = toDateRange(compositeSlo.timeWindow); - return acc; - }, - {} - ); - const searches = compositeSloList.flatMap((compositeSlo) => [ - { index: SLO_DESTINATION_INDEX_PATTERN }, - generateSearchQuery(compositeSlo, dateRangeByCompositeSlo[compositeSlo.id]), - ]); - - const summaryByCompositeSlo: Record = {}; - if (searches.length === 0) { - return summaryByCompositeSlo; - } - - const result = await this.esClient.msearch({ searches }); - - for (let i = 0; i < result.responses.length; i++) { - const compositeSlo = compositeSloList[i]; - - // @ts-ignore - const { aggregations = {} } = result.responses[i]; - const buckets = aggregations?.bySloId?.buckets ?? []; - - if ( - calendarAlignedTimeWindowSchema.is(compositeSlo.timeWindow) && - timeslicesBudgetingMethodSchema.is(compositeSlo.budgetingMethod) - ) { - let sliValue = 0; - let totalWeights = 0; - let maxSloTotalSlices = 0; - for (const bucket of buckets) { - const sourceSloId = bucket.key; - const sourceSloGoodSlices = bucket.good.value; - const sourceSloTotalSlices = bucket.total.value; - maxSloTotalSlices = - sourceSloTotalSlices > maxSloTotalSlices ? sourceSloTotalSlices : maxSloTotalSlices; - const sourceSloSliValue = computeSLI(sourceSloGoodSlices, sourceSloTotalSlices); - const sourceSloWeight = compositeSlo.sources.find( - (source) => source.id === sourceSloId - )!.weight; // used to build the query, therefore exists - - totalWeights += sourceSloWeight; - sliValue += sourceSloSliValue < 0 ? 0 : sourceSloWeight * sourceSloSliValue; - } - sliValue /= totalWeights === 0 ? 1 : totalWeights; - - const totalSlicesInCalendar = computeTotalSlicesFromDateRange( - dateRangeByCompositeSlo[compositeSlo.id], - compositeSlo.objective.timesliceWindow! - ); - const initialErrorBudget = 1 - compositeSlo.objective.target; - const errorBudgetConsumed = - ((1 - sliValue) / initialErrorBudget) * (maxSloTotalSlices / totalSlicesInCalendar); - - const errorBudget = toErrorBudget(initialErrorBudget, errorBudgetConsumed); - summaryByCompositeSlo[compositeSlo.id] = { - sliValue: toHighPrecision(sliValue), - errorBudget, - status: computeSummaryStatus(compositeSlo, sliValue, errorBudget), - }; - } else { - let sliValue = 0; - let totalWeights = 0; - for (const bucket of buckets) { - const sourceSloId = bucket.key; - const sourceSloGood = bucket.good.value; - const sourceSloTotal = bucket.total.value; - const sourceSloSliValue = computeSLI(sourceSloGood, sourceSloTotal); - const sourceSloWeight = compositeSlo.sources.find( - (source) => source.id === sourceSloId - )!.weight; // used to build the query, therefore exists - - totalWeights += sourceSloWeight; - sliValue += sourceSloSliValue < 0 ? 0 : sourceSloWeight * sourceSloSliValue; - } - sliValue /= totalWeights === 0 ? 1 : totalWeights; - - const initialErrorBudget = 1 - compositeSlo.objective.target; - const errorBudgetConsumed = (1 - sliValue) / initialErrorBudget; - const errorBudget = toErrorBudget( - initialErrorBudget, - errorBudgetConsumed, - calendarAlignedTimeWindowSchema.is(compositeSlo.timeWindow) - ); - summaryByCompositeSlo[compositeSlo.id] = { - sliValue: toHighPrecision(sliValue), - errorBudget, - status: computeSummaryStatus(compositeSlo, sliValue, errorBudget), - }; - } - } - - return summaryByCompositeSlo; - } -} - -function generateSearchQuery( - compositeSlo: CompositeSLO, - dateRange: DateRange -): MsearchMultisearchBody { - return { - size: 0, - query: { - bool: { - filter: [ - { - range: { - '@timestamp': { gte: dateRange.from.toISOString(), lt: dateRange.to.toISOString() }, - }, - }, - ], - should: compositeSlo.sources.map((source) => ({ - bool: { - must: [ - { term: { 'slo.id': source.id } }, - { term: { 'slo.revision': source.revision } }, - ], - }, - })), - minimum_should_match: 1, - }, - }, - ...(occurrencesBudgetingMethodSchema.is(compositeSlo.budgetingMethod) && { - aggs: { - bySloId: { - terms: { - field: 'slo.id', - }, - aggs: { - good: { sum: { field: 'slo.numerator' } }, - total: { sum: { field: 'slo.denominator' } }, - }, - }, - }, - }), - ...(timeslicesBudgetingMethodSchema.is(compositeSlo.budgetingMethod) && { - aggs: { - bySloId: { - terms: { - field: 'slo.id', - }, - aggs: { - good: { sum: { field: 'slo.isGoodSlice' } }, - total: { value_count: { field: 'slo.isGoodSlice' } }, - }, - }, - }, - }), - }; -} - -function computeTotalSlicesFromDateRange(dateRange: DateRange, timesliceWindow: Duration) { - const dateRangeDurationInUnit = moment(dateRange.to).diff( - dateRange.from, - toMomentUnitOfTime(timesliceWindow.unit) - ); - return Math.ceil(dateRangeDurationInUnit / timesliceWindow!.value); -} diff --git a/x-pack/plugins/observability/server/services/composite_slo/update_composite_slo.ts b/x-pack/plugins/observability/server/services/composite_slo/update_composite_slo.ts deleted file mode 100644 index 49725acdd927c..0000000000000 --- a/x-pack/plugins/observability/server/services/composite_slo/update_composite_slo.ts +++ /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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - UpdateCompositeSLOParams, - UpdateCompositeSLOResponse, - updateCompositeSLOResponseSchema, -} from '@kbn/slo-schema'; -import { CompositeSLO, CompositeSLOId } from '../../domain/models'; -import { validateCompositeSLO } from '../../domain/services/composite_slo'; -import { SLORepository } from '../slo'; -import { CompositeSLORepository } from './composite_slo_repository'; - -export class UpdateCompositeSLO { - constructor( - private compositeSloRepository: CompositeSLORepository, - private sloRepository: SLORepository - ) {} - - public async execute( - compositeSloId: CompositeSLOId, - params: UpdateCompositeSLOParams - ): Promise { - const originalCompositeSlo = await this.compositeSloRepository.findById(compositeSloId); - - const updatedCompositeSlo: CompositeSLO = Object.assign({}, originalCompositeSlo, params, { - updatedAt: new Date(), - }); - const sloList = await this.sloRepository.findAllByIds( - updatedCompositeSlo.sources.map((slo) => slo.id) - ); - validateCompositeSLO(updatedCompositeSlo, sloList); - - await this.compositeSloRepository.save(updatedCompositeSlo); - - return toResponse(updatedCompositeSlo); - } -} - -function toResponse(compositeSlo: CompositeSLO): UpdateCompositeSLOResponse { - return updateCompositeSLOResponseSchema.encode(compositeSlo); -} diff --git a/x-pack/plugins/observability/tsconfig.json b/x-pack/plugins/observability/tsconfig.json index a3d803b89bb97..d5123d9b5c86b 100644 --- a/x-pack/plugins/observability/tsconfig.json +++ b/x-pack/plugins/observability/tsconfig.json @@ -90,7 +90,8 @@ "@kbn/deeplinks-observability", "@kbn/core-application-common", "@kbn/react-kibana-mount", - "@kbn/react-kibana-context-theme" + "@kbn/react-kibana-context-theme", + "@kbn/shared-ux-link-redirect-app" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_onboarding/public/application/app.tsx b/x-pack/plugins/observability_onboarding/public/application/app.tsx index 93a62f5f378e3..fc791436e3887 100644 --- a/x-pack/plugins/observability_onboarding/public/application/app.tsx +++ b/x-pack/plugins/observability_onboarding/public/application/app.tsx @@ -24,7 +24,6 @@ import { Router, Routes, Route } from '@kbn/shared-ux-router'; import { euiDarkVars, euiLightVars } from '@kbn/ui-theme'; import React from 'react'; import ReactDOM from 'react-dom'; -import { RouteComponentProps, RouteProps } from 'react-router-dom'; import { ConfigSchema } from '..'; import { customLogsRoutes } from '../components/app/custom_logs'; import { systemLogsRoutes } from '../components/app/system_logs'; @@ -37,16 +36,6 @@ import { baseRoutes, routes } from '../routes'; import { CustomLogs } from '../routes/templates/custom_logs'; import { SystemLogs } from '../routes/templates/system_logs'; -export type BreadcrumbTitle< - T extends { [K in keyof T]?: string | undefined } = {} -> = string | ((props: RouteComponentProps) => string) | null; - -export interface RouteDefinition< - T extends { [K in keyof T]?: string | undefined } = any -> extends RouteProps { - breadcrumb: BreadcrumbTitle; -} - export const onBoardingTitle = i18n.translate( 'xpack.observability_onboarding.breadcrumbs.onboarding', { @@ -157,6 +146,8 @@ export function ObservabilityOnboardingAppRoot({ const i18nCore = core.i18n; const plugins = { ...deps }; + const renderFeedbackLinkAsPortal = !config.serverless.enabled; + return ( - - - + {renderFeedbackLinkAsPortal && ( + + + + )} diff --git a/x-pack/plugins/observability_onboarding/public/plugin.ts b/x-pack/plugins/observability_onboarding/public/plugin.ts index 05806059b12e3..1a4982eab0859 100644 --- a/x-pack/plugins/observability_onboarding/public/plugin.ts +++ b/x-pack/plugins/observability_onboarding/public/plugin.ts @@ -28,6 +28,7 @@ import type { ObservabilityOnboardingConfig } from '../server'; import { PLUGIN_ID } from '../common'; import { ObservabilityOnboardingLocatorDefinition } from './locators/onboarding_locator/locator_definition'; import { ObservabilityOnboardingPluginLocators } from './locators'; +import { ConfigSchema } from '.'; export type ObservabilityOnboardingPluginSetup = void; export type ObservabilityOnboardingPluginStart = void; @@ -44,6 +45,14 @@ export interface ObservabilityOnboardingPluginStartDeps { observability: ObservabilityPublicStart; } +export interface ObservabilityOnboardingPluginContextValue { + core: CoreStart; + plugins: ObservabilityOnboardingPluginSetupDeps; + data: DataPublicPluginStart; + observability: ObservabilityPublicStart; + config: ConfigSchema; +} + export class ObservabilityOnboardingPlugin implements Plugin< diff --git a/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx b/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx index c2a18238943d2..411eb2b8e79e1 100644 --- a/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx +++ b/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx @@ -9,6 +9,8 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; import React, { ComponentType, useRef, useState } from 'react'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { ObservabilityOnboardingPluginContextValue } from '../../plugin'; import { breadcrumbsApp } from '../../application/app'; import { Provider as WizardProvider } from '../../components/app/custom_logs'; import { @@ -16,6 +18,7 @@ import { FilmstripTransition, TransitionState, } from '../../components/shared/filmstrip_transition'; +import { ObservabilityOnboardingHeaderActionMenu } from '../../components/app/header_action_menu'; interface Props { children: React.ReactNode; @@ -43,6 +46,12 @@ function AnimatedTransitionsWizard({ children }: Props) { const [title, setTitle] = useState(); const TransitionComponent = useRef(() => null); + const { + services: { config }, + } = useKibana(); + + const isServerless = config.serverless.enabled; + function onChangeStep({ direction, stepTitle, @@ -68,21 +77,33 @@ function AnimatedTransitionsWizard({ children }: Props) { - -

- {title - ? title - : i18n.translate( - 'xpack.observability_onboarding.title.collectCustomLogs', - { - defaultMessage: 'Stream log files to Elastic', - } - )} -

-
+ + + +

+ {title + ? title + : i18n.translate( + 'xpack.observability_onboarding.title.collectCustomLogs', + { + defaultMessage: 'Stream log files to Elastic', + } + )} +

+
+
+ {isServerless && ( + + + + )} +
(); + + const isServerless = config.serverless.enabled; return ( - -

- {i18n.translate( - 'xpack.observability_onboarding.title.collectSystemLogs', - { defaultMessage: 'Install shipper to collect system logs' } - )} -

-
+ + + +

+ {i18n.translate( + 'xpack.observability_onboarding.title.collectSystemLogs', + { defaultMessage: 'Install shipper to collect system logs' } + )} +

+
+
+ {isServerless && ( + + + + )} +
{ - cy.contains(`action_data.query`); + cy.contains('action_data{ "query":'); }); cy.contains(discoverRegex); }); diff --git a/x-pack/plugins/osquery/cypress/e2e/all/custom_space.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/custom_space.cy.ts index 89d0526d41566..0c46fbf074966 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/custom_space.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/custom_space.cy.ts @@ -90,7 +90,7 @@ describe('ALL - Custom space', () => { // @ts-expect-error-next-line href string - check types cy.visit($href); cy.getBySel('discoverDocTable', { timeout: 60000 }).within(() => { - cy.contains('action_data.queryselect * from uptime'); + cy.contains('action_data{ "query": "select * from uptime;"'); }); }); }); diff --git a/x-pack/plugins/osquery/public/editor/index.tsx b/x-pack/plugins/osquery/public/editor/index.tsx index 876bdb7614a5c..5852f04099207 100644 --- a/x-pack/plugins/osquery/public/editor/index.tsx +++ b/x-pack/plugins/osquery/public/editor/index.tsx @@ -34,7 +34,6 @@ const OsqueryEditorComponent: React.FC = ({ }) => { const [editorValue, setEditorValue] = useState(defaultValue ?? ''); const [height, setHeight] = useState(MIN_HEIGHT); - useDebounce( () => { onChange(editorValue); diff --git a/x-pack/plugins/osquery/public/editor/osquery_highlight_rules.ts b/x-pack/plugins/osquery/public/editor/osquery_highlight_rules.ts index b9cdcff73793f..c0026e8e8a986 100644 --- a/x-pack/plugins/osquery/public/editor/osquery_highlight_rules.ts +++ b/x-pack/plugins/osquery/public/editor/osquery_highlight_rules.ts @@ -136,6 +136,7 @@ const theme = { export const initializeOsqueryEditor = () => { let disposable: IDisposable | null = null; if (monaco) { + monaco?.editor.defineTheme('osquery', theme); disposable = monaco.languages.onLanguage('sql', () => { monaco.languages.setMonarchTokensProvider('sql', { ignoreCase: true, @@ -175,7 +176,6 @@ export const initializeOsqueryEditor = () => { ], }, }); - monaco?.editor.defineTheme('osquery', theme); monaco?.languages.registerCompletionItemProvider('sql', { triggerCharacters: ['.'], provideCompletionItems: (model: monaco.editor.ITextModel, position: monaco.Position) => { diff --git a/x-pack/plugins/osquery/public/live_queries/form/index.tsx b/x-pack/plugins/osquery/public/live_queries/form/index.tsx index badd67fe3bf84..5f256b505043f 100644 --- a/x-pack/plugins/osquery/public/live_queries/form/index.tsx +++ b/x-pack/plugins/osquery/public/live_queries/form/index.tsx @@ -26,7 +26,7 @@ import { usePacks } from '../../packs/use_packs'; import { useCreateLiveQuery } from '../use_create_live_query_action'; import { useLiveQueryDetails } from '../../actions/use_live_query_details'; import type { AgentSelection } from '../../agents/types'; -import { LiveQueryQueryField } from './live_query_query_field'; +import LiveQueryQueryField from './live_query_query_field'; import { AgentsTableField } from './agents_table_field'; import { savedQueryDataSerializer } from '../../saved_queries/form/use_saved_query_form'; import { PackFieldWrapper } from '../../shared_components/osquery_response_action_type/pack_field_wrapper'; diff --git a/x-pack/plugins/osquery/public/live_queries/form/live_query_query_field.tsx b/x-pack/plugins/osquery/public/live_queries/form/live_query_query_field.tsx index 6372604d8b677..100319f7c16a5 100644 --- a/x-pack/plugins/osquery/public/live_queries/form/live_query_query_field.tsx +++ b/x-pack/plugins/osquery/public/live_queries/form/live_query_query_field.tsx @@ -162,7 +162,7 @@ const LiveQueryQueryFieldComponent: React.FC = ({ ); }; -export const LiveQueryQueryField = React.memo(LiveQueryQueryFieldComponent); +const LiveQueryQueryField = React.memo(LiveQueryQueryFieldComponent); // eslint-disable-next-line import/no-default-export export { LiveQueryQueryField as default }; diff --git a/x-pack/plugins/osquery/public/shared_components/osquery_response_action_type/index.tsx b/x-pack/plugins/osquery/public/shared_components/osquery_response_action_type/index.tsx index 5902eafddaa84..064e55d9350b2 100644 --- a/x-pack/plugins/osquery/public/shared_components/osquery_response_action_type/index.tsx +++ b/x-pack/plugins/osquery/public/shared_components/osquery_response_action_type/index.tsx @@ -16,7 +16,7 @@ import type { ECSMapping } from '@kbn/osquery-io-ts-types'; import { usePack } from '../../packs/use_pack'; import { QueryPackSelectable } from '../../live_queries/form/query_pack_selectable'; import { useKibana } from '../../common/lib/kibana'; -import { LiveQueryQueryField } from '../../live_queries/form/live_query_query_field'; +import LiveQueryQueryField from '../../live_queries/form/live_query_query_field'; import { PackFieldWrapper } from './pack_field_wrapper'; interface OsqueryResponseActionsValues { diff --git a/x-pack/plugins/reporting/kibana.jsonc b/x-pack/plugins/reporting/kibana.jsonc index a02db938c9ec3..e89e750ebe98c 100644 --- a/x-pack/plugins/reporting/kibana.jsonc +++ b/x-pack/plugins/reporting/kibana.jsonc @@ -22,7 +22,6 @@ "uiActions", "taskManager", "embeddable", - "screenshotting", "screenshotMode", "share", "features" @@ -30,7 +29,8 @@ "optionalPlugins": [ "security", "spaces", - "usageCollection" + "usageCollection", + "screenshotting", ], "requiredBundles": [ "kibanaReact", diff --git a/x-pack/plugins/reporting/server/core.ts b/x-pack/plugins/reporting/server/core.ts index 453940f3cc914..c240d6d165704 100644 --- a/x-pack/plugins/reporting/server/core.ts +++ b/x-pack/plugins/reporting/server/core.ts @@ -78,7 +78,7 @@ export interface ReportingInternalStart { fieldFormats: FieldFormatsStart; licensing: LicensingPluginStart; logger: Logger; - screenshotting: ScreenshottingStart; + screenshotting?: ScreenshottingStart; security?: SecurityPluginStart; taskManager: TaskManagerStartContract; } @@ -134,7 +134,7 @@ export class ReportingCore { this.getContract = () => ({ usesUiCapabilities: () => config.roles.enabled === false, registerExportTypes: (id) => id, - getScreenshots: this.getScreenshots.bind(this), + getScreenshots: config.statefulSettings.enabled ? this.getScreenshots.bind(this) : undefined, getSpaceId: this.getSpaceId.bind(this), }); @@ -408,7 +408,7 @@ export class ReportingCore { ): Rx.Observable { return Rx.defer(() => this.getPluginStartDeps()).pipe( switchMap(({ screenshotting }) => { - return screenshotting.getScreenshots({ + return screenshotting!.getScreenshots({ ...options, urls: options.urls.map((url) => typeof url === 'string' diff --git a/x-pack/plugins/reporting/server/export_types/common/export_type.ts b/x-pack/plugins/reporting/server/export_types/common/export_type.ts index dd9ad3a5a20ab..96240863122d0 100644 --- a/x-pack/plugins/reporting/server/export_types/common/export_type.ts +++ b/x-pack/plugins/reporting/server/export_types/common/export_type.ts @@ -37,7 +37,7 @@ export interface BaseExportTypeStartDeps { savedObjects: SavedObjectsServiceStart; uiSettings: UiSettingsServiceStart; esClient: IClusterClient; - screenshotting: ScreenshottingStart; + screenshotting?: ScreenshottingStart; reporting: ReportingStart; } diff --git a/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts b/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts index ac297cfd8c02b..6afac5dacb4cb 100644 --- a/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts +++ b/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts @@ -104,7 +104,7 @@ export class PngExportType extends ExportType return generatePngObservable( () => - this.startDeps.reporting.getScreenshots({ + this.startDeps.reporting.getScreenshots!({ format: 'png', headers, layout: { ...payload.layout, id: 'preserve_layout' }, diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts index 495a635370dc2..85e656642eb62 100644 --- a/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts +++ b/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts @@ -85,7 +85,7 @@ export class PdfV1ExportType extends ExportType - this.startDeps.reporting.getScreenshots({ + this.startDeps.reporting.getScreenshots!({ format: 'pdf', title, logo, diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/printable_pdf_v2.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/printable_pdf_v2.ts index f673229a168ee..862d5908ddb3c 100644 --- a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/printable_pdf_v2.ts +++ b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/printable_pdf_v2.ts @@ -108,7 +108,7 @@ export class PdfExportType extends ExportType this.config, this.getServerInfo(), () => - this.startDeps.reporting.getScreenshots({ + this.startDeps.reporting.getScreenshots!({ format: 'pdf', title, logo, diff --git a/x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts b/x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts index 34c7583f9ef06..703dd5b24a97b 100644 --- a/x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts +++ b/x-pack/plugins/reporting/server/routes/internal/diagnostic/browser.ts @@ -54,6 +54,7 @@ export const registerDiagnoseBrowser = (reporting: ReportingCore, logger: Logger const logsToHelpMap = logsToHelpMapFactory(docLinks); try { const { screenshotting } = await reporting.getPluginStartDeps(); + if (!screenshotting) throw new Error('Screenshotting is not enabled!'); const logs = await lastValueFrom(screenshotting.diagnose()); const knownIssues = Object.keys(logsToHelpMap) as Array; diff --git a/x-pack/plugins/reporting/server/types.ts b/x-pack/plugins/reporting/server/types.ts index da1e7f1f93037..d2ece5f1e2fab 100644 --- a/x-pack/plugins/reporting/server/types.ts +++ b/x-pack/plugins/reporting/server/types.ts @@ -41,7 +41,7 @@ import { ExportTypesRegistry } from './lib'; export interface ReportingSetup { registerExportTypes: ExportTypesRegistry['register']; getSpaceId: ReportingCore['getSpaceId']; - getScreenshots: ReportingCore['getScreenshots']; + getScreenshots?: ReportingCore['getScreenshots']; /** * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls */ @@ -93,7 +93,7 @@ export type RunTaskFn = ( export interface ReportingSetupDeps { features: FeaturesPluginSetup; - screenshotMode: ScreenshotModePluginSetup; + screenshotMode?: ScreenshotModePluginSetup; security?: SecurityPluginSetup; spaces?: SpacesPluginSetup; taskManager: TaskManagerSetupContract; @@ -105,7 +105,7 @@ export interface ReportingStartDeps { discover: DiscoverServerPluginStart; fieldFormats: FieldFormatsStart; licensing: LicensingPluginStart; - screenshotting: ScreenshottingStart; + screenshotting?: ScreenshottingStart; security?: SecurityPluginStart; taskManager: TaskManagerStartContract; } diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts index fb07eac64ed17..c9b9bbc9f8b03 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver.test.ts @@ -26,6 +26,7 @@ describe('chromium driver', () => { mockLogger.get = () => mockLogger; mockConfig = { + enabled: true, networkPolicy: { enabled: false, rules: [], diff --git a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts index 53f0fd5d642b5..ce8b8a3a209d9 100644 --- a/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts +++ b/x-pack/plugins/screenshotting/server/browsers/chromium/driver_factory/index.ts @@ -167,6 +167,7 @@ export class HeadlessChromiumDriverFactory { TZ: browserTimezone, }, headless: 'new', + protocolTimeout: 0, }); } catch (err) { observer.error( diff --git a/x-pack/plugins/screenshotting/server/config/schema.test.ts b/x-pack/plugins/screenshotting/server/config/schema.test.ts index bb68e8e938ace..a3a141429b4db 100644 --- a/x-pack/plugins/screenshotting/server/config/schema.test.ts +++ b/x-pack/plugins/screenshotting/server/config/schema.test.ts @@ -27,6 +27,7 @@ describe('ConfigSchema', () => { }, "zoom": 2, }, + "enabled": true, "networkPolicy": Object { "enabled": true, "rules": Array [ @@ -87,6 +88,7 @@ describe('ConfigSchema', () => { }, "zoom": 2, }, + "enabled": true, "networkPolicy": Object { "enabled": true, "rules": Array [ diff --git a/x-pack/plugins/screenshotting/server/config/schema.ts b/x-pack/plugins/screenshotting/server/config/schema.ts index 724f84ea3c811..0dda1e3ae9981 100644 --- a/x-pack/plugins/screenshotting/server/config/schema.ts +++ b/x-pack/plugins/screenshotting/server/config/schema.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema, TypeOf, offeringBasedSchema } from '@kbn/config-schema'; import moment from 'moment'; const RulesSchema = schema.object({ @@ -23,6 +23,10 @@ const RulesSchema = schema.object({ }); export const ConfigSchema = schema.object({ + enabled: offeringBasedSchema({ + serverless: schema.boolean({ defaultValue: false }), + traditional: schema.boolean({ defaultValue: true }), + }), networkPolicy: schema.object({ enabled: schema.boolean({ defaultValue: true }), rules: schema.arrayOf(RulesSchema, { diff --git a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts index f8bbbc081f38f..9538517d922ef 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts @@ -68,6 +68,7 @@ describe('Screenshot Observable Pipeline', () => { urls: ['/welcome/home/start/index.htm'], }; config = { + enabled: true, poolSize: 1, capture: { timeouts: { diff --git a/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts b/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts index d5e8757803c81..30803fcc95c32 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/screenshots.test.ts @@ -37,6 +37,7 @@ describe('class Screenshots', () => { mockLogger = loggerMock.create(); mockConfig = { + enabled: true, networkPolicy: { enabled: false, rules: [], diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index a30b5cfe17ae6..90346011c23e5 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -103,12 +103,6 @@ export const allowedExperimentalValues = Object.freeze({ * Enables experimental Entity Analytics HTTP endpoints */ riskScoringRoutesEnabled: true, - /* - * - * Enables Discover embedded within timeline - * - * */ - discoverInTimeline: true, /** * disables ES|QL rules diff --git a/x-pack/plugins/security_solution/common/types/timeline/index.ts b/x-pack/plugins/security_solution/common/types/timeline/index.ts index 7148009246dcd..0372765db9873 100644 --- a/x-pack/plugins/security_solution/common/types/timeline/index.ts +++ b/x-pack/plugins/security_solution/common/types/timeline/index.ts @@ -37,7 +37,7 @@ export enum TimelineTabs { eql = 'eql', session = 'session', securityAssistant = 'securityAssistant', - discover = 'discover', + esql = 'esql', } /* diff --git a/x-pack/plugins/security_solution/kibana.jsonc b/x-pack/plugins/security_solution/kibana.jsonc index bbb4b4eb20432..70f03ded9314c 100644 --- a/x-pack/plugins/security_solution/kibana.jsonc +++ b/x-pack/plugins/security_solution/kibana.jsonc @@ -53,7 +53,8 @@ "discover", "notifications", "savedObjects", - "savedSearch" + "savedSearch", + "unifiedDocViewer", ], "optionalPlugins": [ "cloudExperiments", diff --git a/x-pack/plugins/security_solution/public/actions/constants.ts b/x-pack/plugins/security_solution/public/actions/constants.ts index 95c5ef2d788d2..95e72e70ccbab 100644 --- a/x-pack/plugins/security_solution/public/actions/constants.ts +++ b/x-pack/plugins/security_solution/public/actions/constants.ts @@ -10,11 +10,11 @@ export enum SecurityCellActionsTrigger { ALERTS_COUNT = 'security-alertsCount-cellActions', } -export enum DiscoverInTimelineTrigger { +export enum EsqlInTimelineTrigger { HISTOGRAM_TRIGGER = 'security-discoverInTimeline-histogramTrigger', } -export enum DiscoverInTimelineAction { +export enum EsqlInTimelineAction { VIS_FILTER_ACTION = 'security-discoverInTimeline-visFilterAction', } diff --git a/x-pack/plugins/security_solution/public/actions/discover_in_timeline/vis_apply_filter.ts b/x-pack/plugins/security_solution/public/actions/discover_in_timeline/vis_apply_filter.ts index 5b6d2f547c491..8c3f9e0214a63 100644 --- a/x-pack/plugins/security_solution/public/actions/discover_in_timeline/vis_apply_filter.ts +++ b/x-pack/plugins/security_solution/public/actions/discover_in_timeline/vis_apply_filter.ts @@ -9,7 +9,7 @@ import { createFilterAction } from '@kbn/unified-search-plugin/public'; import type { History } from 'history'; import type { SecurityAppStore } from '../../common/store'; import type { StartServices } from '../../types'; -import { DiscoverInTimelineTrigger, DiscoverInTimelineAction } from '../constants'; +import { EsqlInTimelineTrigger, EsqlInTimelineAction } from '../constants'; const createDiscoverHistogramCustomFilterAction = ( store: SecurityAppStore, @@ -20,8 +20,8 @@ const createDiscoverHistogramCustomFilterAction = ( services.customDataService.query.filterManager, services.customDataService.query.timefilter.timefilter, services.theme, - DiscoverInTimelineAction.VIS_FILTER_ACTION, - DiscoverInTimelineAction.VIS_FILTER_ACTION + EsqlInTimelineAction.VIS_FILTER_ACTION, + EsqlInTimelineAction.VIS_FILTER_ACTION ); services.uiActions.registerAction(histogramApplyFilter); @@ -34,7 +34,7 @@ const createDiscoverHistogramCustomTrigger = ( services: StartServices ) => { services.uiActions.registerTrigger({ - id: DiscoverInTimelineTrigger.HISTOGRAM_TRIGGER, + id: EsqlInTimelineTrigger.HISTOGRAM_TRIGGER, }); }; @@ -47,8 +47,5 @@ export const registerDiscoverHistogramActions = ( const histogramApplyFilter = createDiscoverHistogramCustomFilterAction(store, history, services); - services.uiActions.attachAction( - DiscoverInTimelineTrigger.HISTOGRAM_TRIGGER, - histogramApplyFilter.id - ); + services.uiActions.attachAction(EsqlInTimelineTrigger.HISTOGRAM_TRIGGER, histogramApplyFilter.id); }; diff --git a/x-pack/plugins/security_solution/public/actions/types.ts b/x-pack/plugins/security_solution/public/actions/types.ts index 582c63c467360..3450f6796ce27 100644 --- a/x-pack/plugins/security_solution/public/actions/types.ts +++ b/x-pack/plugins/security_solution/public/actions/types.ts @@ -7,7 +7,7 @@ import type { CellAction, CellActionExecutionContext, CellActionFactory } from '@kbn/cell-actions'; import type { QueryOperator } from '../../common/types'; -export { DiscoverInTimelineAction, DiscoverInTimelineTrigger } from './constants'; +export { EsqlInTimelineTrigger, EsqlInTimelineAction } from './constants'; export interface AndFilter { field: string; value: string | string[]; diff --git a/x-pack/plugins/security_solution/public/app/home/template_wrapper/global_kql_header/index.tsx b/x-pack/plugins/security_solution/public/app/home/template_wrapper/global_kql_header/index.tsx index f5f9b55e59e7c..80ddc7769e91e 100644 --- a/x-pack/plugins/security_solution/public/app/home/template_wrapper/global_kql_header/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/template_wrapper/global_kql_header/index.tsx @@ -12,7 +12,7 @@ import { useGlobalHeaderPortal } from '../../../../common/hooks/use_global_heade const StyledStickyWrapper = styled.div` position: sticky; z-index: ${(props) => props.theme.eui.euiZHeaderBelowDataGrid}; - top: var(--euiFixedHeadersOffset, 0); + top: var(--kbnAppHeadersOffset, var(--euiFixedHeadersOffset, 0)); `; export const GlobalKQLHeader = React.memo(() => { diff --git a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx index e2950f3ecf73e..650497f39f61f 100644 --- a/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/control_columns/row_action/index.tsx @@ -12,7 +12,7 @@ import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { dataTableActions, TableId } from '@kbn/securitysolution-data-table'; import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; import { ENABLE_EXPANDABLE_FLYOUT_SETTING } from '../../../../../common/constants'; -import { RightPanelKey } from '../../../../flyout/right'; +import { RightPanelKey } from '../../../../flyout/document_details/right'; import type { SetEventsDeleted, SetEventsLoading, diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/response_actions_view.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/response_actions_view.tsx index 23f0948304379..58e18114f08f9 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/response_actions_view.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/response_actions_view.tsx @@ -11,7 +11,7 @@ import type { EuiTabbedContentTab } from '@elastic/eui'; import { EuiLink, EuiNotificationBadge, EuiSpacer } from '@elastic/eui'; import type { Ecs } from '@kbn/cases-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; -import { RESPONSE_NO_DATA_TEST_ID } from '../../../flyout/left/components/test_ids'; +import { RESPONSE_NO_DATA_TEST_ID } from '../../../flyout/document_details/left/components/test_ids'; import type { SearchHit } from '../../../../common/search_strategy'; import type { ExpandedEventFieldsObject, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.test.ts b/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.test.ts index 09c54ba2057f1..79c93d0d32ba3 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.test.ts @@ -545,7 +545,7 @@ describe('helpers', () => { range: { '@timestamp': { gte: '2020-10-29T21:06:10.192Z', - lt: '2020-10-29T21:07:38.774Z', + lte: '2020-10-29T21:07:38.774Z', format: 'strict_date_optional_time', }, }, @@ -557,7 +557,7 @@ describe('helpers', () => { key: '@timestamp', params: { gte: from, - lt: to, + lte: to, format: 'strict_date_optional_time', }, }, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.ts b/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.ts index 19fcd17cd3c93..7221a9ede2785 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.ts +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/helpers.ts @@ -224,7 +224,7 @@ export const buildTimeRangeFilter = (from: string, to: string): Filter[] => [ range: { '@timestamp': { gte: from, - lt: to, + lte: to, format: 'strict_date_optional_time', }, }, @@ -236,7 +236,7 @@ export const buildTimeRangeFilter = (from: string, to: string): Filter[] => [ key: '@timestamp', params: { gte: from, - lt: to, + lte: to, format: 'strict_date_optional_time', }, }, diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx index 8966232ef2b53..f4849978fa206 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx @@ -15,7 +15,7 @@ import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; jest.mock('./api'); jest.mock('../../../../common/hooks/use_app_toasts'); jest.mock('../../../../common/components/user_privileges/endpoint/use_endpoint_privileges'); -jest.mock('../../../../timelines/components/timeline/discover_tab_content'); +jest.mock('../../../../timelines/components/timeline/esql_tab_content'); describe('useSignalIndex', () => { let appToastsMock: jest.Mocked>; diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx index 41516d06942ff..1f1ce5618abfd 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx @@ -23,7 +23,7 @@ import { URL_PARAM_KEY } from '../../../common/hooks/use_url_state'; import { inputsSelectors } from '../../../common/store'; import { formatPageFilterSearchParam } from '../../../../common/utils/format_page_filter_search_param'; import { resolveFlyoutParams } from './utils'; -import { FLYOUT_URL_PARAM } from '../../../flyout/shared/hooks/url/use_sync_flyout_state_with_url'; +import { FLYOUT_URL_PARAM } from '../../../flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url'; export const AlertDetailsRedirect = () => { const { alertId } = useParams<{ alertId: string }>(); diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts b/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts index c08f6fd6ac4ee..fbc9c2723d45a 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts @@ -6,7 +6,7 @@ */ import { encode } from '@kbn/rison'; -import { expandableFlyoutStateFromEventMeta } from '../../../flyout/shared/hooks/url/expandable_flyout_state_from_event_meta'; +import { expandableFlyoutStateFromEventMeta } from '../../../flyout/document_details/shared/hooks/url/expandable_flyout_state_from_event_meta'; export interface ResolveFlyoutParamsConfig { index: string; diff --git a/x-pack/plugins/security_solution/public/flyout/README.md b/x-pack/plugins/security_solution/public/flyout/README.md index 43fee6ce87152..1d0e272af3ec5 100644 --- a/x-pack/plugins/security_solution/public/flyout/README.md +++ b/x-pack/plugins/security_solution/public/flyout/README.md @@ -1,44 +1,51 @@ -# expandable flyout panels +# Security Solution expandable flyouts + +For more info on the expandable flyout, see the `@kbn/expandable-flyout` package. ## Description -This folder hosts the panels that are displayed in the expandable flyout (see `@kbn/expandable-flyout` package). +The Security Solution plugin aims at having a single instance of the expandable flyout. That instance can display as many panels as we need. This folder hosts all the panels that are can be displayed in the Security Solution flyout. Panels can be differentiated as to be displayed in different sections of the expandable flyout (right, left or preview), but ultimately, nothing prevents us from displaying a panel in any section we want. -> Remember to add any new panels to the `index.tsx` at the root of the `flyout` folder. These are passed to the `@kbn/expandable-flyout` package as `registeredPanels`. +> Remember to add any new panels to the `index.tsx` at the root of the [flyout folder](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/flyout). These are passed to the `@kbn/expandable-flyout` package as `registeredPanels`. Failing to do so will result in the panel not being rendered. ## Notes -At the moment, we only have a single expandable flyout for the Security Solution plugin. This flyout will be used for all documents (signals, events, indicators, assets and findings). We're using a set of generic right/left/preview panels, hence the following folder structure: - +The structure of the `flyout` folder is intended to work as follows: +- multiple top level folders referring to the _type_ of flyout (for example document details, user, host, rule, cases...) and would contain all the panels for that flyout _type_. Each of these top level folders can be organized the way you want, but we recommend following a similar structure to the one we have for the `document_details` flyout type, where the `right`, `left` and `preview` folders correspond to the panels displayed in the right, left and preview flyout sections respectively. The `shared` folder contains any shared components/hooks/services/helpers that are used within the other folders. ``` -flyout -│ index.tsx -│ README.md -│ -└───right -└───left -└───preview +document_details +└─── right +└─── left +└─── preview +└─── shared ``` +- one top level `shared` folder containing all the components/hooks/services/helpers that are used across multiple flyout types. Putting code in this folder should be very deliberate, and should follow some guidelines: + - code built in isolation (meaning that it should not be built with a specific flyout type or usage in mind) + - extensively tested + - components should have storybook stories -If different right, left or preview panels are needed, we should refactor the folder structure as follows: - +The `flyout` folder structure should therefore look like this: ``` flyout │ index.tsx +│ jest.config.js │ README.md │ -└───documents -│ └───right -│ └───left -│ └───preview +└─── document_details +│ └─── right +│ └─── left +│ └─── preview +│ +└─── new_type +│ └─── right +│ └─── preview +│ +└─── other_new_type +│ └─── right +│ └─── left │ -└───new_type -│ └───right -│ └───left -│ └───preview +└─── ... │ -└───other_new_type - └───right - └───left - └───preview +└─── shared + └─── components ``` diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx similarity index 81% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/content.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx index 7f3671cc60805..e2b34e4010aaa 100644 --- a/x-pack/plugins/security_solution/public/flyout/isolate_host/content.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/content.tsx @@ -10,11 +10,11 @@ import React, { useCallback } from 'react'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { EuiPanel } from '@elastic/eui'; import { RightPanelKey } from '../right'; -import { useBasicDataFromDetailsData } from '../../timelines/components/side_panel/event_details/helpers'; -import { EndpointIsolateSuccess } from '../../common/components/endpoint/host_isolation'; -import { useHostIsolationTools } from '../../timelines/components/side_panel/event_details/use_host_isolation_tools'; +import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { EndpointIsolateSuccess } from '../../../common/components/endpoint/host_isolation'; +import { useHostIsolationTools } from '../../../timelines/components/side_panel/event_details/use_host_isolation_tools'; import { useIsolateHostPanelContext } from './context'; -import { HostIsolationPanel } from '../../detections/components/host_isolation'; +import { HostIsolationPanel } from '../../../detections/components/host_isolation'; /** * Document details expandable flyout section content for the isolate host component, displaying the form or the success banner diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/context.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx index 17d31ebd002af..53393e2f8a79b 100644 --- a/x-pack/plugins/security_solution/public/flyout/isolate_host/context.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/context.tsx @@ -9,8 +9,8 @@ import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; import React, { createContext, memo, useContext, useMemo } from 'react'; import { useEventDetails } from '../shared/hooks/use_event_details'; -import { FlyoutError } from '../shared/components/flyout_error'; -import { FlyoutLoading } from '../shared/components/flyout_loading'; +import { FlyoutError } from '../../shared/components/flyout_error'; +import { FlyoutLoading } from '../../shared/components/flyout_loading'; import type { IsolateHostPanelProps } from '.'; export interface IsolateHostPanelContext { diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/header.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/header.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/header.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/header.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/index.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/index.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/index.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/isolate_host/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/test_ids.ts similarity index 87% rename from x-pack/plugins/security_solution/public/flyout/isolate_host/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/test_ids.ts index 24b62d913772d..b3b18c76b4333 100644 --- a/x-pack/plugins/security_solution/public/flyout/isolate_host/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/isolate_host/test_ids.ts @@ -5,6 +5,6 @@ * 2.0. */ -import { PREFIX } from '../shared/test_ids'; +import { PREFIX } from '../../shared/test_ids'; export const FLYOUT_HEADER_TITLE_TEST_ID = `${PREFIX}HeaderTitle` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.test.tsx similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.test.tsx index d0a18279805cd..7b2307d06669d 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { LeftPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { AnalyzeGraph } from './analyze_graph'; import { ANALYZER_GRAPH_TEST_ID } from './test_ids'; @@ -18,7 +18,7 @@ jest.mock('react-router-dom', () => { return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; }); -jest.mock('../../../resolver/view/use_resolver_query_params_cleaner'); +jest.mock('../../../../resolver/view/use_resolver_query_params_cleaner'); const mockDispatch = jest.fn(); jest.mock('react-redux', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.tsx similarity index 86% rename from x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.tsx index 5ce8e47c681dd..6a252296983a3 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/analyze_graph.tsx @@ -10,9 +10,9 @@ import React, { useMemo } from 'react'; import { useLeftPanelContext } from '../context'; import { ANALYZER_GRAPH_TEST_ID } from './test_ids'; -import { Resolver } from '../../../resolver/view'; -import { useTimelineDataFilters } from '../../../timelines/containers/use_timeline_data_filters'; -import { isActiveTimeline } from '../../../helpers'; +import { Resolver } from '../../../../resolver/view'; +import { useTimelineDataFilters } from '../../../../timelines/containers/use_timeline_data_filters'; +import { isActiveTimeline } from '../../../../helpers'; export const ANALYZE_GRAPH_ID = 'analyze_graph'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx index c6efa418f9079..21214670241aa 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { CorrelationsDetails } from './correlations_details'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { LeftPanelContext } from '../context'; import { useShowRelatedAlertsByAncestry } from '../../shared/hooks/use_show_related_alerts_by_ancestry'; import { useShowRelatedAlertsBySameSourceEvent } from '../../shared/hooks/use_show_related_alerts_by_same_source_event'; @@ -27,7 +27,7 @@ import { useFetchRelatedAlertsByAncestry } from '../../shared/hooks/use_fetch_re import { useFetchRelatedAlertsBySameSourceEvent } from '../../shared/hooks/use_fetch_related_alerts_by_same_source_event'; import { useFetchRelatedCases } from '../../shared/hooks/use_fetch_related_cases'; import { mockContextValue } from '../mocks/mock_context'; -import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID } from '../../shared/components/test_ids'; +import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID } from '../../../shared/components/test_ids'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/components/correlations_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx index 250889402e455..f183df7f95913 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { EuiBasicTable } from '@elastic/eui'; import { CorrelationsDetailsAlertsTable, columns } from './correlations_details_alerts_table'; import { usePaginatedAlerts } from '../hooks/use_paginated_alerts'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx index 60296da8d43cd..0740263ca3347 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx @@ -15,13 +15,13 @@ import { ALERT_REASON, ALERT_RULE_NAME } from '@kbn/rule-data-utils'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper'; -import type { DataProvider } from '../../../../common/types'; -import { SeverityBadge } from '../../../detections/components/rules/severity_badge'; +import type { DataProvider } from '../../../../../common/types'; +import { SeverityBadge } from '../../../../detections/components/rules/severity_badge'; import { usePaginatedAlerts } from '../hooks/use_paginated_alerts'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; -import { InvestigateInTimelineButton } from '../../../common/components/event_details/table/investigate_in_timeline_button'; -import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../detections/components/alerts_table/translations'; -import { getDataProvider } from '../../../common/components/event_details/table/use_action_cell_data_provider'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; +import { InvestigateInTimelineButton } from '../../../../common/components/event_details/table/investigate_in_timeline_button'; +import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../../detections/components/alerts_table/translations'; +import { getDataProvider } from '../../../../common/components/event_details/table/use_action_cell_data_provider'; export const TIMESTAMP_DATE_FORMAT = 'MMM D, YYYY @ HH:mm:ss.SSS'; const dataProviderLimit = 5; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/entities_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/left/components/entities_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx index 17a94e7d05c25..80d7324d1cf51 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/entities_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.test.tsx @@ -9,18 +9,18 @@ import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { LeftPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { EntitiesDetails } from './entities_details'; import { ENTITIES_DETAILS_TEST_ID, HOST_DETAILS_TEST_ID, USER_DETAILS_TEST_ID } from './test_ids'; import { mockContextValue } from '../mocks/mock_context'; -import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../shared/components/test_ids'; +import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; }); -jest.mock('../../../resolver/view/use_resolver_query_params_cleaner'); +jest.mock('../../../../resolver/view/use_resolver_query_params_cleaner'); const mockDispatch = jest.fn(); jest.mock('react-redux', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/entities_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/components/entities_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/entities_details.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx similarity index 83% rename from x-pack/plugins/security_solution/public/flyout/left/components/host_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx index 71c54530e1563..b711e6d3d5f7e 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx @@ -7,21 +7,21 @@ import React from 'react'; import { render } from '@testing-library/react'; -import type { Anomalies } from '../../../common/components/ml/types'; -import { TestProviders } from '../../../common/mock'; +import type { Anomalies } from '../../../../common/components/ml/types'; +import { TestProviders } from '../../../../common/mock'; import { HostDetails } from './host_details'; -import { useMlCapabilities } from '../../../common/components/ml/hooks/use_ml_capabilities'; -import { useRiskScore } from '../../../explore/containers/risk_score'; -import { mockAnomalies } from '../../../common/components/ml/mock'; -import { useHostDetails } from '../../../explore/hosts/containers/hosts/details'; -import { useHostRelatedUsers } from '../../../common/containers/related_entities/related_users'; -import { RiskSeverity } from '../../../../common/search_strategy'; +import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; +import { mockAnomalies } from '../../../../common/components/ml/mock'; +import { useHostDetails } from '../../../../explore/hosts/containers/hosts/details'; +import { useHostRelatedUsers } from '../../../../common/containers/related_entities/related_users'; +import { RiskSeverity } from '../../../../../common/search_strategy'; import { HOST_DETAILS_TEST_ID, HOST_DETAILS_INFO_TEST_ID, HOST_DETAILS_RELATED_USERS_TABLE_TEST_ID, } from './test_ids'; -import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../shared/components/test_ids'; +import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); @@ -39,8 +39,8 @@ jest.mock('react-redux', () => { const from = '2022-07-28T08:20:18.966Z'; const to = '2022-07-28T08:20:18.966Z'; -jest.mock('../../../common/containers/use_global_time', () => { - const actual = jest.requireActual('../../../common/containers/use_global_time'); +jest.mock('../../../../common/containers/use_global_time', () => { + const actual = jest.requireActual('../../../../common/containers/use_global_time'); return { ...actual, useGlobalTime: jest @@ -53,19 +53,19 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('uuid'), })); -jest.mock('../../../common/components/ml/hooks/use_ml_capabilities'); +jest.mock('../../../../common/components/ml/hooks/use_ml_capabilities'); const mockUseMlUserPermissions = useMlCapabilities as jest.Mock; const mockUseHasSecurityCapability = jest.fn().mockReturnValue(false); -jest.mock('../../../helper_hooks', () => ({ +jest.mock('../../../../helper_hooks', () => ({ useHasSecurityCapability: () => mockUseHasSecurityCapability(), })); -jest.mock('../../../common/containers/sourcerer', () => ({ +jest.mock('../../../../common/containers/sourcerer', () => ({ useSourcererDataView: jest.fn().mockReturnValue({ selectedPatterns: ['index'] }), })); -jest.mock('../../../common/components/ml/anomaly/anomaly_table_provider', () => ({ +jest.mock('../../../../common/components/ml/anomaly/anomaly_table_provider', () => ({ AnomalyTableProvider: ({ children, }: { @@ -77,13 +77,13 @@ jest.mock('../../../common/components/ml/anomaly/anomaly_table_provider', () => }) => children({ anomaliesData: mockAnomalies, isLoadingAnomaliesData: false, jobNameById: {} }), })); -jest.mock('../../../explore/hosts/containers/hosts/details'); +jest.mock('../../../../explore/hosts/containers/hosts/details'); const mockUseHostDetails = useHostDetails as jest.Mock; -jest.mock('../../../common/containers/related_entities/related_users'); +jest.mock('../../../../common/containers/related_entities/related_users'); const mockUseHostsRelatedUsers = useHostRelatedUsers as jest.Mock; -jest.mock('../../../explore/containers/risk_score'); +jest.mock('../../../../explore/containers/risk_score'); const mockUseRiskScore = useRiskScore as jest.Mock; const timestamp = '2022-07-25T08:20:18.966Z'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx similarity index 83% rename from x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx index 48df07b8a3bc9..bdfb03639382c 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.tsx @@ -21,36 +21,36 @@ import { } from '@elastic/eui'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getSourcererScopeId } from '../../../helpers'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; -import type { RelatedUser } from '../../../../common/search_strategy/security_solution/related_entities/related_users'; -import type { RiskSeverity } from '../../../../common/search_strategy'; -import { HostOverview } from '../../../overview/components/host_overview'; -import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider'; -import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect'; -import { NetworkDetailsLink } from '../../../common/components/links'; -import { RiskScoreEntity } from '../../../../common/search_strategy'; -import { RiskScoreLevel } from '../../../explore/components/risk_score/severity/common'; -import { DefaultFieldRenderer } from '../../../timelines/components/field_renderers/field_renderers'; -import { InputsModelId } from '../../../common/store/inputs/constants'; +import { getSourcererScopeId } from '../../../../helpers'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; +import type { RelatedUser } from '../../../../../common/search_strategy/security_solution/related_entities/related_users'; +import type { RiskSeverity } from '../../../../../common/search_strategy'; +import { HostOverview } from '../../../../overview/components/host_overview'; +import { AnomalyTableProvider } from '../../../../common/components/ml/anomaly/anomaly_table_provider'; +import { InspectButton, InspectButtonContainer } from '../../../../common/components/inspect'; +import { NetworkDetailsLink } from '../../../../common/components/links'; +import { RiskScoreEntity } from '../../../../../common/search_strategy'; +import { RiskScoreLevel } from '../../../../explore/components/risk_score/severity/common'; +import { DefaultFieldRenderer } from '../../../../timelines/components/field_renderers/field_renderers'; +import { InputsModelId } from '../../../../common/store/inputs/constants'; import { SecurityCellActions, CellActionsMode, SecurityCellActionsTrigger, -} from '../../../common/components/cell_actions'; -import { useGlobalTime } from '../../../common/containers/use_global_time'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { manageQuery } from '../../../common/components/page/manage_query'; -import { scoreIntervalToDateTime } from '../../../common/components/ml/score/score_interval_to_datetime'; -import { setAbsoluteRangeDatePicker } from '../../../common/store/inputs/actions'; -import { hostToCriteria } from '../../../common/components/ml/criteria/host_to_criteria'; -import { useHostDetails } from '../../../explore/hosts/containers/hosts/details'; -import { useHostRelatedUsers } from '../../../common/containers/related_entities/related_users'; -import { useMlCapabilities } from '../../../common/components/ml/hooks/use_ml_capabilities'; -import { getEmptyTagValue } from '../../../common/components/empty_value'; +} from '../../../../common/components/cell_actions'; +import { useGlobalTime } from '../../../../common/containers/use_global_time'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { manageQuery } from '../../../../common/components/page/manage_query'; +import { scoreIntervalToDateTime } from '../../../../common/components/ml/score/score_interval_to_datetime'; +import { setAbsoluteRangeDatePicker } from '../../../../common/store/inputs/actions'; +import { hostToCriteria } from '../../../../common/components/ml/criteria/host_to_criteria'; +import { useHostDetails } from '../../../../explore/hosts/containers/hosts/details'; +import { useHostRelatedUsers } from '../../../../common/containers/related_entities/related_users'; +import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; +import { getEmptyTagValue } from '../../../../common/components/empty_value'; import { HOST_DETAILS_TEST_ID, HOST_DETAILS_RELATED_USERS_TABLE_TEST_ID } from './test_ids'; -import { ENTITY_RISK_LEVEL } from '../../../explore/components/risk_score/translations'; -import { useHasSecurityCapability } from '../../../helper_hooks'; +import { ENTITY_RISK_LEVEL } from '../../../../explore/components/risk_score/translations'; +import { useHasSecurityCapability } from '../../../../helper_hooks'; const HOST_DETAILS_ID = 'entities-hosts-details'; const RELATED_USERS_ID = 'entities-hosts-related-users'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.test.tsx index f628fac332c6d..95b4e0a600594 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { InvestigationGuide } from './investigation_guide'; import { LeftPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { INVESTIGATION_GUIDE_TEST_ID, INVESTIGATION_GUIDE_LOADING_TEST_ID } from './test_ids'; import { mockContextValue } from '../mocks/mock_context'; import { useInvestigationGuide } from '../../shared/hooks/use_investigation_guide'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx index 4c6452093f5e8..bffe966b944b2 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/investigation_guide.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/investigation_guide.tsx @@ -10,8 +10,8 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useInvestigationGuide } from '../../shared/hooks/use_investigation_guide'; import { useLeftPanelContext } from '../context'; import { INVESTIGATION_GUIDE_TEST_ID, INVESTIGATION_GUIDE_LOADING_TEST_ID } from './test_ids'; -import { InvestigationGuideView } from '../../../common/components/event_details/investigation_guide_view'; -import { FlyoutLoading } from '../../shared/components/flyout_loading'; +import { InvestigationGuideView } from '../../../../common/components/event_details/investigation_guide_view'; +import { FlyoutLoading } from '../../../shared/components/flyout_loading'; /** * Investigation guide displayed in the left panel. diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.test.tsx index a76fb83074451..3d881e80b0e47 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.test.tsx @@ -21,8 +21,8 @@ import { PREVALENCE_DETAILS_TABLE_UPSELL_CELL_TEST_ID, } from './test_ids'; import { usePrevalence } from '../../shared/hooks/use_prevalence'; -import { TestProviders } from '../../../common/mock'; -import { licenseService } from '../../../common/hooks/use_license'; +import { TestProviders } from '../../../../common/mock'; +import { licenseService } from '../../../../common/hooks/use_license'; jest.mock('../../shared/hooks/use_prevalence'); @@ -34,7 +34,7 @@ jest.mock('react-redux', () => { useDispatch: () => mockDispatch, }; }); -jest.mock('../../../common/hooks/use_license', () => { +jest.mock('../../../../common/hooks/use_license', () => { const licenseServiceInstance = { isPlatinumPlus: jest.fn(), }; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.tsx index bb92a793506b5..6498e4f0399d4 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/prevalence_details.tsx @@ -22,9 +22,9 @@ import { useEuiTheme, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { FormattedCount } from '../../../common/components/formatted_number'; -import { useLicense } from '../../../common/hooks/use_license'; -import { InvestigateInTimelineButton } from '../../../common/components/event_details/table/investigate_in_timeline_button'; +import { FormattedCount } from '../../../../common/components/formatted_number'; +import { useLicense } from '../../../../common/hooks/use_license'; +import { InvestigateInTimelineButton } from '../../../../common/components/event_details/table/investigate_in_timeline_button'; import type { PrevalenceData } from '../../shared/hooks/use_prevalence'; import { usePrevalence } from '../../shared/hooks/use_prevalence'; import { @@ -43,9 +43,9 @@ import { useLeftPanelContext } from '../context'; import { getDataProvider, getDataProviderAnd, -} from '../../../common/components/event_details/table/use_action_cell_data_provider'; -import { getEmptyTagValue } from '../../../common/components/empty_value'; -import { IS_OPERATOR } from '../../../../common/types'; +} from '../../../../common/components/event_details/table/use_action_cell_data_provider'; +import { getEmptyTagValue } from '../../../../common/components/empty_value'; +import { IS_OPERATOR } from '../../../../../common/types'; export const PREVALENCE_TAB_ID = 'prevalence-details'; const DEFAULT_FROM = 'now-30d'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_ancestry.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_ancestry.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx index 73e22f2267319..d7f4a35fd11c5 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_ancestry.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { CORRELATIONS_DETAILS_BY_ANCESTRY_SECTION_TABLE_TEST_ID, CORRELATIONS_DETAILS_BY_ANCESTRY_SECTION_TEST_ID, @@ -18,7 +18,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { usePaginatedAlerts } from '../hooks/use_paginated_alerts'; jest.mock('../../shared/hooks/use_fetch_related_alerts_by_ancestry'); diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_ancestry.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_ancestry.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_ancestry.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_same_source_event.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_same_source_event.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx index de46c22eb5199..66902bd9bda34 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_same_source_event.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { CORRELATIONS_DETAILS_BY_SOURCE_SECTION_TEST_ID, CORRELATIONS_DETAILS_BY_SOURCE_SECTION_TABLE_TEST_ID, @@ -18,7 +18,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { usePaginatedAlerts } from '../hooks/use_paginated_alerts'; jest.mock('../../shared/hooks/use_fetch_related_alerts_by_same_source_event'); diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_same_source_event.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_same_source_event.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_same_source_event.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_session.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_session.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx index 99ef4c7408555..ca5489b13c8c3 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_session.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { CORRELATIONS_DETAILS_BY_SESSION_SECTION_TABLE_TEST_ID, CORRELATIONS_DETAILS_BY_SESSION_SECTION_TEST_ID, @@ -19,7 +19,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; jest.mock('../../shared/hooks/use_fetch_related_alerts_by_session'); jest.mock('../hooks/use_paginated_alerts'); diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_session.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_alerts_by_session.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_alerts_by_session.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_cases.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx index 264794666234a..db9eb7bdfb3ae 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.test.tsx @@ -18,10 +18,10 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; jest.mock('../../shared/hooks/use_fetch_related_cases'); -jest.mock('../../../common/components/links', () => ({ +jest.mock('../../../../common/components/links', () => ({ CaseDetailsLink: jest .fn() .mockImplementation(({ title }) => <>{``}), diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx index 54c96effd60e8..a9ed2ac935b5d 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/related_cases.tsx @@ -11,13 +11,13 @@ import { EuiInMemoryTable } from '@elastic/eui'; import type { RelatedCase } from '@kbn/cases-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper'; -import { CaseDetailsLink } from '../../../common/components/links'; +import { CaseDetailsLink } from '../../../../common/components/links'; import { CORRELATIONS_DETAILS_CASES_SECTION_TABLE_TEST_ID, CORRELATIONS_DETAILS_CASES_SECTION_TEST_ID, } from './test_ids'; import { useFetchRelatedCases } from '../../shared/hooks/use_fetch_related_cases'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; const ICON = 'warning'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/response_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/left/components/response_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.test.tsx index 9f477ee45991c..46871d2f3ab61 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/response_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.test.tsx @@ -9,14 +9,14 @@ import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { LeftPanelContext } from '../context'; -import { rawEventData, TestProviders } from '../../../common/mock'; +import { rawEventData, TestProviders } from '../../../../common/mock'; import { RESPONSE_DETAILS_TEST_ID } from './test_ids'; import { ResponseDetails } from './response_details'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; -jest.mock('../../../common/hooks/use_experimental_features'); -jest.mock('../../../common/lib/kibana', () => { - const originalModule = jest.requireActual('../../../common/lib/kibana'); +jest.mock('../../../../common/hooks/use_experimental_features'); +jest.mock('../../../../common/lib/kibana', () => { + const originalModule = jest.requireActual('../../../../common/lib/kibana'); return { ...originalModule, useKibana: jest.fn().mockReturnValue({ diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/response_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/left/components/response_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.tsx index 82ce4ac3ffdb0..9e2ab547e9af6 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/response_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/response_details.tsx @@ -11,9 +11,9 @@ import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n-react'; import { RESPONSE_DETAILS_TEST_ID } from './test_ids'; import { useLeftPanelContext } from '../context'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; -import { useOsqueryTab } from '../../../common/components/event_details/osquery_tab'; -import { useResponseActionsView } from '../../../common/components/event_details/response_actions_view'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { useOsqueryTab } from '../../../../common/components/event_details/osquery_tab'; +import { useResponseActionsView } from '../../../../common/components/event_details/response_actions_view'; const ExtendedFlyoutWrapper = styled.div` figure { diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/session_view.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/left/components/session_view.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.test.tsx index 8ca9ac2f480fa..559aeb5427bea 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/session_view.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { LeftPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { SESSION_VIEW_TEST_ID } from './test_ids'; import { SessionView } from './session_view'; import { @@ -32,8 +32,8 @@ const mockFieldsData = (prop: string) => { return mockData[prop]; }; -jest.mock('../../../common/lib/kibana', () => { - const originalModule = jest.requireActual('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana', () => { + const originalModule = jest.requireActual('../../../../common/lib/kibana'); return { ...originalModule, useKibana: jest.fn().mockReturnValue({ diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/session_view.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/components/session_view.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.tsx index e35efacfb3195..60bafd1765179 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/session_view.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/session_view.tsx @@ -14,7 +14,7 @@ import { } from '../../shared/constants/field_names'; import { getField } from '../../shared/utils'; import { SESSION_VIEW_TEST_ID } from './test_ids'; -import { useKibana } from '../../../common/lib/kibana'; +import { useKibana } from '../../../../common/lib/kibana'; import { useLeftPanelContext } from '../context'; export const SESSION_VIEW_ID = 'session-view'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx index 4bc1a8f5fb0d0..a94f3c5ba33fd 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { CORRELATIONS_DETAILS_SUPPRESSED_ALERTS_SECTION_TEST_ID, SUPPRESSED_ALERTS_SECTION_TECHNICAL_PREVIEW_TEST_ID, @@ -17,7 +17,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { LeftPanelContext } from '../context'; import { mockContextValue } from '../mocks/mock_context'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx index c2123ced63feb..554b567ca35ae 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/suppressed_alerts.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/suppressed_alerts.tsx @@ -9,13 +9,13 @@ import React from 'react'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { EuiBetaBadge, EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { CORRELATIONS_DETAILS_SUPPRESSED_ALERTS_SECTION_TEST_ID, SUPPRESSED_ALERTS_SECTION_TECHNICAL_PREVIEW_TEST_ID, } from './test_ids'; -import { SUPPRESSED_ALERTS_COUNT_TECHNICAL_PREVIEW } from '../../../common/components/event_details/insights/translations'; -import { InvestigateInTimelineAction } from '../../../detections/components/alerts_table/timeline_actions/investigate_in_timeline_action'; +import { SUPPRESSED_ALERTS_COUNT_TECHNICAL_PREVIEW } from '../../../../common/components/event_details/insights/translations'; +import { InvestigateInTimelineAction } from '../../../../detections/components/alerts_table/timeline_actions/investigate_in_timeline_action'; export interface SuppressedAlertsProps { /** diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts index b3ab7dc341c7d..b36f674892f58 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../../shared/test_ids'; +import { PREFIX } from '../../../shared/test_ids'; /* Visualization tab */ diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx index 3f666415d562d..110a6f186d584 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom'; import { LeftPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { THREAT_INTELLIGENCE_DETAILS_ENRICHMENTS_TEST_ID, THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID, @@ -17,8 +17,8 @@ import { import { ThreatIntelligenceDetails } from './threat_intelligence_details'; import { useThreatIntelligenceDetails } from '../hooks/use_threat_intelligence_details'; -jest.mock('../../../common/lib/kibana', () => { - const originalModule = jest.requireActual('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana', () => { + const originalModule = jest.requireActual('../../../../common/lib/kibana'); return { ...originalModule, useKibana: jest.fn().mockReturnValue({ diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx similarity index 82% rename from x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx index 351740cd86094..0c9182c8885a6 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/threat_intelligence_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/threat_intelligence_details.tsx @@ -8,11 +8,11 @@ import React from 'react'; import { EuiSpacer } from '@elastic/eui'; import isEmpty from 'lodash/isEmpty'; -import { EnrichmentRangePicker } from '../../../common/components/event_details/cti_details/enrichment_range_picker'; -import { ThreatDetailsView } from '../../../common/components/event_details/cti_details/threat_details_view'; +import { EnrichmentRangePicker } from '../../../../common/components/event_details/cti_details/enrichment_range_picker'; +import { ThreatDetailsView } from '../../../../common/components/event_details/cti_details/threat_details_view'; import { useThreatIntelligenceDetails } from '../hooks/use_threat_intelligence_details'; import { THREAT_INTELLIGENCE_DETAILS_LOADING_TEST_ID } from './test_ids'; -import { FlyoutLoading } from '../../shared/components/flyout_loading'; +import { FlyoutLoading } from '../../../shared/components/flyout_loading'; export const THREAT_INTELLIGENCE_TAB_ID = 'threat-intelligence-details'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx similarity index 81% rename from x-pack/plugins/security_solution/public/flyout/left/components/user_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx index 6667d7eacd97e..1f2d5b464d4e9 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx @@ -7,21 +7,21 @@ import React from 'react'; import { render } from '@testing-library/react'; -import type { Anomalies } from '../../../common/components/ml/types'; -import { TestProviders } from '../../../common/mock'; +import type { Anomalies } from '../../../../common/components/ml/types'; +import { TestProviders } from '../../../../common/mock'; import { UserDetails } from './user_details'; -import { useMlCapabilities } from '../../../common/components/ml/hooks/use_ml_capabilities'; -import { useRiskScore } from '../../../explore/containers/risk_score'; -import { mockAnomalies } from '../../../common/components/ml/mock'; -import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details'; -import { useUserRelatedHosts } from '../../../common/containers/related_entities/related_hosts'; -import { RiskSeverity } from '../../../../common/search_strategy'; +import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; +import { mockAnomalies } from '../../../../common/components/ml/mock'; +import { useObservedUserDetails } from '../../../../explore/users/containers/users/observed_details'; +import { useUserRelatedHosts } from '../../../../common/containers/related_entities/related_hosts'; +import { RiskSeverity } from '../../../../../common/search_strategy'; import { USER_DETAILS_TEST_ID, USER_DETAILS_INFO_TEST_ID, USER_DETAILS_RELATED_HOSTS_TABLE_TEST_ID, } from './test_ids'; -import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../shared/components/test_ids'; +import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '../../../shared/components/test_ids'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); @@ -39,8 +39,8 @@ jest.mock('react-redux', () => { const from = '2022-07-20T08:20:18.966Z'; const to = '2022-07-28T08:20:18.966Z'; -jest.mock('../../../common/containers/use_global_time', () => { - const actual = jest.requireActual('../../../common/containers/use_global_time'); +jest.mock('../../../../common/containers/use_global_time', () => { + const actual = jest.requireActual('../../../../common/containers/use_global_time'); return { ...actual, useGlobalTime: jest @@ -53,14 +53,14 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('uuid'), })); -jest.mock('../../../common/components/ml/hooks/use_ml_capabilities'); +jest.mock('../../../../common/components/ml/hooks/use_ml_capabilities'); const mockUseMlUserPermissions = useMlCapabilities as jest.Mock; -jest.mock('../../../common/containers/sourcerer', () => ({ +jest.mock('../../../../common/containers/sourcerer', () => ({ useSourcererDataView: jest.fn().mockReturnValue({ selectedPatterns: ['index'] }), })); -jest.mock('../../../common/components/ml/anomaly/anomaly_table_provider', () => ({ +jest.mock('../../../../common/components/ml/anomaly/anomaly_table_provider', () => ({ AnomalyTableProvider: ({ children, }: { @@ -72,15 +72,15 @@ jest.mock('../../../common/components/ml/anomaly/anomaly_table_provider', () => }) => children({ anomaliesData: mockAnomalies, isLoadingAnomaliesData: false, jobNameById: {} }), })); -jest.mock('../../../helper_hooks', () => ({ useHasSecurityCapability: () => true })); +jest.mock('../../../../helper_hooks', () => ({ useHasSecurityCapability: () => true })); -jest.mock('../../../explore/users/containers/users/observed_details'); +jest.mock('../../../../explore/users/containers/users/observed_details'); const mockUseObservedUserDetails = useObservedUserDetails as jest.Mock; -jest.mock('../../../common/containers/related_entities/related_hosts'); +jest.mock('../../../../common/containers/related_entities/related_hosts'); const mockUseUsersRelatedHosts = useUserRelatedHosts as jest.Mock; -jest.mock('../../../explore/containers/risk_score'); +jest.mock('../../../../explore/containers/risk_score'); const mockUseRiskScore = useRiskScore as jest.Mock; const timestamp = '2022-07-25T08:20:18.966Z'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx similarity index 83% rename from x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx index 25722a3fae370..daa58fc4d0379 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.tsx @@ -21,36 +21,36 @@ import { } from '@elastic/eui'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getSourcererScopeId } from '../../../helpers'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; -import type { RelatedHost } from '../../../../common/search_strategy/security_solution/related_entities/related_hosts'; -import type { RiskSeverity } from '../../../../common/search_strategy'; -import { UserOverview } from '../../../overview/components/user_overview'; -import { AnomalyTableProvider } from '../../../common/components/ml/anomaly/anomaly_table_provider'; -import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect'; -import { NetworkDetailsLink } from '../../../common/components/links'; -import { RiskScoreEntity } from '../../../../common/search_strategy'; -import { RiskScoreLevel } from '../../../explore/components/risk_score/severity/common'; -import { DefaultFieldRenderer } from '../../../timelines/components/field_renderers/field_renderers'; +import { getSourcererScopeId } from '../../../../helpers'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; +import type { RelatedHost } from '../../../../../common/search_strategy/security_solution/related_entities/related_hosts'; +import type { RiskSeverity } from '../../../../../common/search_strategy'; +import { UserOverview } from '../../../../overview/components/user_overview'; +import { AnomalyTableProvider } from '../../../../common/components/ml/anomaly/anomaly_table_provider'; +import { InspectButton, InspectButtonContainer } from '../../../../common/components/inspect'; +import { NetworkDetailsLink } from '../../../../common/components/links'; +import { RiskScoreEntity } from '../../../../../common/search_strategy'; +import { RiskScoreLevel } from '../../../../explore/components/risk_score/severity/common'; +import { DefaultFieldRenderer } from '../../../../timelines/components/field_renderers/field_renderers'; import { SecurityCellActions, CellActionsMode, SecurityCellActionsTrigger, -} from '../../../common/components/cell_actions'; -import { InputsModelId } from '../../../common/store/inputs/constants'; -import { useGlobalTime } from '../../../common/containers/use_global_time'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { scoreIntervalToDateTime } from '../../../common/components/ml/score/score_interval_to_datetime'; -import { setAbsoluteRangeDatePicker } from '../../../common/store/inputs/actions'; -import { hostToCriteria } from '../../../common/components/ml/criteria/host_to_criteria'; -import { manageQuery } from '../../../common/components/page/manage_query'; -import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details'; -import { useUserRelatedHosts } from '../../../common/containers/related_entities/related_hosts'; -import { useMlCapabilities } from '../../../common/components/ml/hooks/use_ml_capabilities'; -import { getEmptyTagValue } from '../../../common/components/empty_value'; +} from '../../../../common/components/cell_actions'; +import { InputsModelId } from '../../../../common/store/inputs/constants'; +import { useGlobalTime } from '../../../../common/containers/use_global_time'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { scoreIntervalToDateTime } from '../../../../common/components/ml/score/score_interval_to_datetime'; +import { setAbsoluteRangeDatePicker } from '../../../../common/store/inputs/actions'; +import { hostToCriteria } from '../../../../common/components/ml/criteria/host_to_criteria'; +import { manageQuery } from '../../../../common/components/page/manage_query'; +import { useObservedUserDetails } from '../../../../explore/users/containers/users/observed_details'; +import { useUserRelatedHosts } from '../../../../common/containers/related_entities/related_hosts'; +import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; +import { getEmptyTagValue } from '../../../../common/components/empty_value'; import { USER_DETAILS_RELATED_HOSTS_TABLE_TEST_ID, USER_DETAILS_TEST_ID } from './test_ids'; -import { ENTITY_RISK_LEVEL } from '../../../explore/components/risk_score/translations'; -import { useHasSecurityCapability } from '../../../helper_hooks'; +import { ENTITY_RISK_LEVEL } from '../../../../explore/components/risk_score/translations'; +import { useHasSecurityCapability } from '../../../../helper_hooks'; const USER_DETAILS_ID = 'entities-users-details'; const RELATED_HOSTS_ID = 'entities-users-related-hosts'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/content.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/content.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/context.tsx similarity index 87% rename from x-pack/plugins/security_solution/public/flyout/left/context.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/context.tsx index a791dcbf5fb5a..6dd0f65af4922 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/context.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/context.tsx @@ -9,13 +9,13 @@ import type { BrowserFields, TimelineEventsDetailsItem } from '@kbn/timelines-pl import React, { createContext, memo, useContext, useMemo } from 'react'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useEventDetails } from '../shared/hooks/use_event_details'; -import { FlyoutError } from '../shared/components/flyout_error'; -import { FlyoutLoading } from '../shared/components/flyout_loading'; -import type { SearchHit } from '../../../common/search_strategy'; +import { FlyoutError } from '../../shared/components/flyout_error'; +import { FlyoutLoading } from '../../shared/components/flyout_loading'; +import type { SearchHit } from '../../../../common/search_strategy'; import type { LeftPanelProps } from '.'; -import type { GetFieldsData } from '../../common/hooks/use_get_fields_data'; -import { useBasicDataFromDetailsData } from '../../timelines/components/side_panel/event_details/helpers'; -import { useRuleWithFallback } from '../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; export interface LeftPanelContext { /** diff --git a/x-pack/plugins/security_solution/public/flyout/left/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/header.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/header.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.test.tsx index cc28c004741bd..b0c2e1c3a2ef5 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.test.tsx @@ -8,11 +8,11 @@ import React from 'react'; import { renderHook } from '@testing-library/react-hooks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { useKibana } from '../../../common/lib/kibana'; +import { useKibana } from '../../../../common/lib/kibana'; import { createFindAlerts } from '../services/find_alerts'; import { useFetchAlerts, type UseAlertsQueryParams } from './use_fetch_alerts'; -jest.mock('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana'); jest.mock('../services/find_alerts'); describe('useFetchAlerts', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.ts similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.ts index 4e9b7541801c8..b425cc960f7ac 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_fetch_alerts.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_fetch_alerts.ts @@ -9,7 +9,7 @@ import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import type { AggregationsAggregate, SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { isNumber } from 'lodash'; -import { useKibana } from '../../../common/lib/kibana'; +import { useKibana } from '../../../../common/lib/kibana'; import { type AlertsQueryParams, createFindAlerts } from '../services/find_alerts'; export type UseAlertsQueryParams = AlertsQueryParams; diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_paginated_alerts.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_paginated_alerts.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_paginated_alerts.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_paginated_alerts.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_pagination_and_sorting.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_pagination_and_sorting.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_pagination_and_sorting.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_pagination_and_sorting.ts diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts similarity index 73% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts index 14319c8fa4404..33def43adb2dd 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.test.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.test.ts @@ -8,25 +8,25 @@ import { useThreatIntelligenceDetails } from './use_threat_intelligence_details'; import { renderHook } from '@testing-library/react-hooks'; -import { useTimelineEventsDetails } from '../../../timelines/containers/details'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useRouteSpy } from '../../../common/utils/route/use_route_spy'; +import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; import { useLeftPanelContext } from '../context'; -import { useInvestigationTimeEnrichment } from '../../../common/containers/cti/event_enrichment'; -import { SecurityPageName } from '../../../../common/constants'; -import type { RouteSpyState } from '../../../common/utils/route/types'; +import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +import { SecurityPageName } from '../../../../../common/constants'; +import type { RouteSpyState } from '../../../../common/utils/route/types'; import { type GetBasicDataFromDetailsData, useBasicDataFromDetailsData, -} from '../../../timelines/components/side_panel/event_details/helpers'; +} from '../../../../timelines/components/side_panel/event_details/helpers'; import { mockContextValue } from '../mocks/mock_context'; -jest.mock('../../../timelines/containers/details'); -jest.mock('../../../common/containers/sourcerer'); -jest.mock('../../../common/utils/route/use_route_spy'); +jest.mock('../../../../timelines/containers/details'); +jest.mock('../../../../common/containers/sourcerer'); +jest.mock('../../../../common/utils/route/use_route_spy'); jest.mock('../context'); -jest.mock('../../../common/containers/cti/event_enrichment'); -jest.mock('../../../timelines/components/side_panel/event_details/helpers'); +jest.mock('../../../../common/containers/cti/event_enrichment'); +jest.mock('../../../../timelines/components/side_panel/event_details/helpers'); describe('useThreatIntelligenceDetails', () => { beforeEach(() => { diff --git a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts similarity index 76% rename from x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts index c291e2a123c3d..2256f3756f920 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/hooks/use_threat_intelligence_details.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts @@ -6,22 +6,22 @@ */ import { useMemo } from 'react'; -import type { RunTimeMappings } from '../../../../common/api/search_strategy'; -import type { CtiEnrichment, EventFields } from '../../../../common/search_strategy'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import type { RunTimeMappings } from '../../../../../common/api/search_strategy'; +import type { CtiEnrichment, EventFields } from '../../../../../common/search_strategy'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { filterDuplicateEnrichments, getEnrichmentFields, parseExistingEnrichments, timelineDataToEnrichment, -} from '../../../common/components/event_details/cti_details/helpers'; -import { SecurityPageName } from '../../../../common/constants'; -import { SourcererScopeName } from '../../../common/store/sourcerer/model'; +} from '../../../../common/components/event_details/cti_details/helpers'; +import { SecurityPageName } from '../../../../../common/constants'; +import { SourcererScopeName } from '../../../../common/store/sourcerer/model'; -import { useInvestigationTimeEnrichment } from '../../../common/containers/cti/event_enrichment'; -import { useTimelineEventsDetails } from '../../../timelines/containers/details'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useRouteSpy } from '../../../common/utils/route/use_route_spy'; +import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; import { useLeftPanelContext } from '../context'; export interface ThreatIntelligenceDetailsValue { diff --git a/x-pack/plugins/security_solution/public/flyout/left/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/index.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/index.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/mocks/mock_context.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/mocks/mock_context.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/mocks/mock_context.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/mocks/mock_context.ts diff --git a/x-pack/plugins/security_solution/public/flyout/left/services/find_alerts.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/services/find_alerts.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/services/find_alerts.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/services/find_alerts.ts diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/tabs.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/insights_tab.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/insights_tab.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/investigation_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/investigation_tab.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/tabs/investigation_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/investigation_tab.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/response_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/response_tab.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/left/tabs/response_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/response_tab.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/left/tabs/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts index bb1dfa035f13a..eba61a013d048 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/tabs/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../../shared/test_ids'; +import { PREFIX } from '../../../shared/test_ids'; const VISUALIZE_TAB_TEST_ID = `${PREFIX}VisualizeTab` as const; export const VISUALIZE_TAB_BUTTON_GROUP_TEST_ID = `${VISUALIZE_TAB_TEST_ID}ButtonGroup` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/visualize_tab.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/visualize_tab.tsx index 632bcb856a257..b23d61f19e053 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/tabs/visualize_tab.tsx @@ -21,8 +21,8 @@ import { } from './test_ids'; import { ANALYZE_GRAPH_ID, AnalyzeGraph } from '../components/analyze_graph'; import { SESSION_VIEW_ID, SessionView } from '../components/session_view'; -import { ALERTS_ACTIONS } from '../../../common/lib/apm/user_actions'; -import { useStartTransaction } from '../../../common/lib/apm/use_start_transaction'; +import { ALERTS_ACTIONS } from '../../../../common/lib/apm/user_actions'; +import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; const visualizeButtons: EuiButtonGroupOptionProps[] = [ { diff --git a/x-pack/plugins/security_solution/public/flyout/left/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/left/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts index 4bcb3808dafe9..3c0ba8b2a1c0c 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../shared/test_ids'; +import { PREFIX } from '../../shared/test_ids'; export const VISUALIZE_TAB_TEST_ID = `${PREFIX}FlyoutVisualizeTab` as const; export const INSIGHTS_TAB_TEST_ID = `${PREFIX}FlyoutInsightsTab` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.test.tsx index 1408a5f658630..5e0194c7ec91a 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.test.tsx @@ -13,7 +13,7 @@ import { mockContextValue } from '../mocks/mock_context'; import { ALERT_REASON_PREVIEW_BODY_TEST_ID } from './test_ids'; import { AlertReasonPreview } from './alert_reason_preview'; import { ThemeProvider } from 'styled-components'; -import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock'; +import { getMockTheme } from '../../../../common/lib/kibana/kibana_react.mock'; const mockTheme = getMockTheme({ eui: { euiFontSizeXS: '' } }); diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.tsx similarity index 88% rename from x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.tsx index 3702160339b06..e9b6996db78cb 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/alert_reason_preview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/alert_reason_preview.tsx @@ -12,9 +12,9 @@ import { euiThemeVars } from '@kbn/ui-theme'; import { FormattedMessage } from '@kbn/i18n-react'; import { ALERT_REASON_PREVIEW_BODY_TEST_ID } from './test_ids'; import { usePreviewPanelContext } from '../context'; -import { getRowRenderer } from '../../../timelines/components/timeline/body/renderers/get_row_renderer'; -import { defaultRowRenderers } from '../../../timelines/components/timeline/body/renderers'; -import { FlyoutError } from '../../shared/components/flyout_error'; +import { getRowRenderer } from '../../../../timelines/components/timeline/body/renderers/get_row_renderer'; +import { defaultRowRenderers } from '../../../../timelines/components/timeline/body/renderers'; +import { FlyoutError } from '../../../shared/components/flyout_error'; const ReasonPreviewContainerWrapper = styled.div` overflow-x: auto; diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.test.tsx similarity index 86% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.test.tsx index 9a76a852b5a92..095973bb0d260 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.test.tsx @@ -13,16 +13,16 @@ import { mockContextValue } from '../mocks/mock_context'; import { mockFlyoutContextValue } from '../../shared/mocks/mock_flyout_context'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { ThemeProvider } from 'styled-components'; -import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock'; -import { TestProviders } from '../../../common/mock'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; -import { getStepsData } from '../../../detections/pages/detection_engine/rules/helpers'; +import { getMockTheme } from '../../../../common/lib/kibana/kibana_react.mock'; +import { TestProviders } from '../../../../common/mock'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { getStepsData } from '../../../../detections/pages/detection_engine/rules/helpers'; import { mockAboutStepRule, mockDefineStepRule, mockScheduleStepRule, -} from '../../../detection_engine/rule_management_ui/components/rules_table/__mocks__/mock'; -import { useGetSavedQuery } from '../../../detections/pages/detection_engine/rules/use_get_saved_query'; +} from '../../../../detection_engine/rule_management_ui/components/rules_table/__mocks__/mock'; +import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; import { RULE_PREVIEW_BODY_TEST_ID, RULE_PREVIEW_ABOUT_HEADER_TEST_ID, @@ -36,16 +36,16 @@ import { RULE_PREVIEW_LOADING_TEST_ID, } from './test_ids'; -jest.mock('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana'); const mockUseRuleWithFallback = useRuleWithFallback as jest.Mock; -jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback'); +jest.mock('../../../../detection_engine/rule_management/logic/use_rule_with_fallback'); const mockGetStepsData = getStepsData as jest.Mock; -jest.mock('../../../detections/pages/detection_engine/rules/helpers'); +jest.mock('../../../../detections/pages/detection_engine/rules/helpers'); const mockUseGetSavedQuery = useGetSavedQuery as jest.Mock; -jest.mock('../../../detections/pages/detection_engine/rules/use_get_saved_query'); +jest.mock('../../../../detections/pages/detection_engine/rules/use_get_saved_query'); const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } }); diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx index 84448aea0eb49..4587368488050 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview.tsx @@ -7,20 +7,20 @@ import React, { memo, useState, useEffect } from 'react'; import { EuiText, EuiHorizontalRule, EuiSpacer, EuiPanel } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useKibana } from '../../../common/lib/kibana'; -import { useGetSavedQuery } from '../../../detections/pages/detection_engine/rules/use_get_saved_query'; -import type { Rule } from '../../../detection_engine/rule_management/logic'; +import { useKibana } from '../../../../common/lib/kibana'; +import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; +import type { Rule } from '../../../../detection_engine/rule_management/logic'; import { usePreviewPanelContext } from '../context'; import { ExpandableSection } from '../../right/components/expandable_section'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; -import { getStepsData } from '../../../detections/pages/detection_engine/rules/helpers'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { getStepsData } from '../../../../detections/pages/detection_engine/rules/helpers'; import { RulePreviewTitle } from './rule_preview_title'; -import { StepAboutRuleReadOnly } from '../../../detections/components/rules/step_about_rule'; -import { StepDefineRuleReadOnly } from '../../../detections/components/rules/step_define_rule'; -import { StepScheduleRuleReadOnly } from '../../../detections/components/rules/step_schedule_rule'; -import { StepRuleActionsReadOnly } from '../../../detections/components/rules/step_rule_actions'; -import { FlyoutLoading } from '../../shared/components/flyout_loading'; -import { FlyoutError } from '../../shared/components/flyout_error'; +import { StepAboutRuleReadOnly } from '../../../../detections/components/rules/step_about_rule'; +import { StepDefineRuleReadOnly } from '../../../../detections/components/rules/step_define_rule'; +import { StepScheduleRuleReadOnly } from '../../../../detections/components/rules/step_schedule_rule'; +import { StepRuleActionsReadOnly } from '../../../../detections/components/rules/step_rule_actions'; +import { FlyoutLoading } from '../../../shared/components/flyout_loading'; +import { FlyoutError } from '../../../shared/components/flyout_error'; import { RULE_PREVIEW_BODY_TEST_ID, RULE_PREVIEW_ABOUT_TEST_ID, diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.test.tsx index a6df858cc5d57..ffe0e83c7d5fd 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.test.tsx @@ -7,7 +7,7 @@ import { render } from '@testing-library/react'; import React from 'react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { mockContextValue } from '../mocks/mock_context'; import { PreviewPanelContext } from '../context'; import { RULE_PREVIEW_FOOTER_TEST_ID, RULE_PREVIEW_NAVIGATE_TO_RULE_TEST_ID } from './test_ids'; diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.tsx similarity index 86% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.tsx index e645a08f18197..84118102a8c6f 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_footer.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_footer.tsx @@ -9,8 +9,8 @@ import React, { memo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiFlyoutFooter } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { usePreviewPanelContext } from '../context'; -import { RenderRuleName } from '../../../timelines/components/timeline/body/renderers/formatted_field_helpers'; -import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; +import { RenderRuleName } from '../../../../timelines/components/timeline/body/renderers/formatted_field_helpers'; +import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../../timelines/components/timeline/body/renderers/constants'; import { RULE_PREVIEW_FOOTER_TEST_ID } from './test_ids'; /** diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.test.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.test.tsx index a66a64f9b0811..439db1fa98cc2 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.test.tsx @@ -11,8 +11,8 @@ import type { RulePreviewTitleProps } from './rule_preview_title'; import { RulePreviewTitle } from './rule_preview_title'; import { mockFlyoutContextValue } from '../../shared/mocks/mock_flyout_context'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; -import { TestProviders } from '../../../common/mock'; -import type { Rule } from '../../../detection_engine/rule_management/logic'; +import { TestProviders } from '../../../../common/mock'; +import type { Rule } from '../../../../detection_engine/rule_management/logic'; import { RULE_PREVIEW_TITLE_TEST_ID, RULE_PREVIEW_RULE_CREATED_BY_TEST_ID, diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.tsx similarity index 87% rename from x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.tsx index 9f3373fa80a3a..9ea1564b9bcd0 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/rule_preview_title.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/rule_preview_title.tsx @@ -7,9 +7,9 @@ import React from 'react'; import { EuiTitle, EuiText, EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiBadge } from '@elastic/eui'; -import { DELETED_RULE } from '../../../detection_engine/rule_details_ui/pages/rule_details/translations'; -import type { Rule } from '../../../detection_engine/rule_management/logic'; -import { CreatedBy, UpdatedBy } from '../../../detections/components/rules/rule_info'; +import { DELETED_RULE } from '../../../../detection_engine/rule_details_ui/pages/rule_details/translations'; +import type { Rule } from '../../../../detection_engine/rule_management/logic'; +import { CreatedBy, UpdatedBy } from '../../../../detections/components/rules/rule_info'; import { RULE_PREVIEW_TITLE_TEST_ID, RULE_PREVIEW_RULE_CREATED_BY_TEST_ID, diff --git a/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/test_ids.ts similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/components/test_ids.ts index 61842f9670415..09989a662ddc6 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/components/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../../shared/test_ids'; +import { PREFIX } from '../../../shared/test_ids'; import { CONTENT_TEST_ID, HEADER_TEST_ID } from '../../right/components/expandable_section'; /* Rule preview */ diff --git a/x-pack/plugins/security_solution/public/flyout/preview/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/context.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/preview/context.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/context.tsx index c99fbbd0456b9..3a1044ce484a9 100644 --- a/x-pack/plugins/security_solution/public/flyout/preview/context.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/preview/context.tsx @@ -9,8 +9,8 @@ import React, { createContext, memo, useContext, useMemo } from 'react'; import type { DataViewBase } from '@kbn/es-query'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useEventDetails } from '../shared/hooks/use_event_details'; -import { FlyoutError } from '../shared/components/flyout_error'; -import { FlyoutLoading } from '../shared/components/flyout_loading'; +import { FlyoutError } from '../../shared/components/flyout_error'; +import { FlyoutLoading } from '../../shared/components/flyout_loading'; import type { PreviewPanelProps } from '.'; export interface PreviewPanelContext { diff --git a/x-pack/plugins/security_solution/public/flyout/preview/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/index.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/preview/index.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/index.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts b/x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/preview/mocks/mock_context.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/mocks/mock_context.ts diff --git a/x-pack/plugins/security_solution/public/flyout/preview/panels.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/preview/panels.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/preview/panels.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/preview/panels.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/about_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/about_section.test.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/right/components/about_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/about_section.test.tsx index 9b672f5008460..9559a696d1c83 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/about_section.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/about_section.test.tsx @@ -8,12 +8,12 @@ import React from 'react'; import { act, render } from '@testing-library/react'; import { ABOUT_SECTION_CONTENT_TEST_ID, ABOUT_SECTION_HEADER_TEST_ID } from './test_ids'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { AboutSection } from './about_section'; import { RightPanelContext } from '../context'; import { mockContextValue } from '../mocks/mock_context'; -jest.mock('../../../common/components/link_to'); +jest.mock('../../../../common/components/link_to'); const renderAboutSection = (expanded: boolean = false) => render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/about_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/about_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/about_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/about_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.test.tsx similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.test.tsx index 22afc55bbd6cf..e79da52a541b1 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.test.tsx @@ -7,8 +7,8 @@ import { render } from '@testing-library/react'; import React from 'react'; -import { TestProviders } from '../../../common/mock'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { TestProviders } from '../../../../common/mock'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; import { mockContextValue } from '../mocks/mock_context'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { RightPanelContext } from '../context'; @@ -16,7 +16,7 @@ import { AnalyzerPreview } from './analyzer_preview'; import { ANALYZER_PREVIEW_TEST_ID } from './test_ids'; import * as mock from '../mocks/mock_analyzer_data'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence_from_process_tree', () => ({ +jest.mock('../../../../common/containers/alerts/use_alert_prevalence_from_process_tree', () => ({ useAlertPrevalenceFromProcessTree: jest.fn(), })); const mockUseAlertPrevalenceFromProcessTree = useAlertPrevalenceFromProcessTree as jest.Mock; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.tsx similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.tsx index 5d4a21fca293b..e8f23bc4638bd 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview.tsx @@ -13,9 +13,9 @@ import { ANALYZER_PREVIEW_TEST_ID, ANALYZER_PREVIEW_LOADING_TEST_ID } from './te import { getTreeNodes } from '../utils/analyzer_helpers'; import { ANCESTOR_ID, RULE_INDICES } from '../../shared/constants/field_names'; import { useRightPanelContext } from '../context'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; -import type { StatsNode } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; -import { isActiveTimeline } from '../../../helpers'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import type { StatsNode } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { isActiveTimeline } from '../../../../helpers'; const CHILD_COUNT_LIMIT = 3; const ANCESTOR_LEVEL = 3; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx index 14b475f95c3c7..5b27fd70781db 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.test.tsx @@ -6,14 +6,14 @@ */ import { render, screen } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import React from 'react'; import { RightPanelContext } from '../context'; import { mockContextValue } from '../mocks/mock_context'; import { AnalyzerPreviewContainer } from './analyzer_preview_container'; -import { isInvestigateInResolverActionEnabled } from '../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; +import { isInvestigateInResolverActionEnabled } from '../../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; import { ANALYZER_PREVIEW_TEST_ID } from './test_ids'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; import * as mock from '../mocks/mock_analyzer_data'; import { EXPANDABLE_PANEL_CONTENT_TEST_ID, @@ -21,14 +21,16 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; -import { useInvestigateInTimeline } from '../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; +import { useInvestigateInTimeline } from '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; -jest.mock('../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'); -jest.mock('../../../common/containers/alerts/use_alert_prevalence_from_process_tree'); jest.mock( - '../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline' + '../../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver' +); +jest.mock('../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'); +jest.mock( + '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline' ); jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx index ed575481fabd9..ac8e21d3fde06 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/analyzer_preview_container.tsx @@ -10,16 +10,16 @@ import { useDispatch } from 'react-redux'; import { TimelineTabs } from '@kbn/securitysolution-data-table'; import { EuiLink, EuiMark } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useStartTransaction } from '../../../common/lib/apm/use_start_transaction'; -import { useInvestigateInTimeline } from '../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; -import { ALERTS_ACTIONS } from '../../../common/lib/apm/user_actions'; -import { getScopedActions } from '../../../helpers'; -import { setActiveTabTimeline } from '../../../timelines/store/timeline/actions'; +import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; +import { useInvestigateInTimeline } from '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; +import { ALERTS_ACTIONS } from '../../../../common/lib/apm/user_actions'; +import { getScopedActions } from '../../../../helpers'; +import { setActiveTabTimeline } from '../../../../timelines/store/timeline/actions'; import { useRightPanelContext } from '../context'; -import { isInvestigateInResolverActionEnabled } from '../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; +import { isInvestigateInResolverActionEnabled } from '../../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; import { AnalyzerPreview } from './analyzer_preview'; import { ANALYZER_PREVIEW_TEST_ID } from './test_ids'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; const timelineId = 'timeline-1'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx index 9d1a73e5bd616..38a80490ea22f 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { RightPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { CorrelationsOverview } from './correlations_overview'; import { CORRELATIONS_TAB_ID } from '../../left/components/correlations_details'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; @@ -36,7 +36,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; jest.mock('../../shared/hooks/use_show_related_alerts_by_ancestry'); jest.mock('../../shared/hooks/use_show_related_alerts_by_same_source_event'); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx index 84349b2b8e523..a273257ba0fc7 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/correlations_overview.tsx @@ -9,7 +9,7 @@ import React, { useCallback } from 'react'; import { EuiFlexGroup } from '@elastic/eui'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { useShowRelatedAlertsBySession } from '../../shared/hooks/use_show_related_alerts_by_session'; import { RelatedAlertsBySession } from './related_alerts_by_session'; import { useShowRelatedAlertsBySameSourceEvent } from '../../shared/hooks/use_show_related_alerts_by_same_source_event'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/description.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/description.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/description.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/description.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/description.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/description.tsx index d180d58db2a22..442af04712742 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/description.tsx @@ -13,7 +13,7 @@ import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { useRightPanelContext } from '../context'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { DESCRIPTION_DETAILS_TEST_ID, DESCRIPTION_TITLE_TEST_ID, diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx index 877d4053622bb..bfee7825748b6 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.test.tsx @@ -14,14 +14,14 @@ import { INSIGHTS_ENTITIES_TEST_ID, } from './test_ids'; import { EntitiesOverview } from './entities_overview'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { mockGetFieldsData } from '../../shared/mocks/mock_get_fields_data'; import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; const TOGGLE_ICON_TEST_ID = EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID(INSIGHTS_ENTITIES_TEST_ID); const TITLE_LINK_TEST_ID = EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID(INSIGHTS_ENTITIES_TEST_ID); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx index 38d9a25437e81..f1904d8b7324d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/entities_overview.tsx @@ -10,7 +10,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; import { INSIGHTS_ENTITIES_TEST_ID } from './test_ids'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { useRightPanelContext } from '../context'; import { getField } from '../../shared/utils'; import { HostEntityOverview } from './host_entity_overview'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.stories.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.stories.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.stories.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.stories.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expand_detail_button.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expand_detail_button.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.stories.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.stories.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.stories.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.stories.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/expandable_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/header_title.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.test.tsx similarity index 72% rename from x-pack/plugins/security_solution/public/flyout/right/components/header_title.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.test.tsx index 104d838e9499c..ca30009c7cbf7 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/header_title.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.test.tsx @@ -6,8 +6,9 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; +import { copyToClipboard } from '@elastic/eui'; import { RightPanelContext } from '../context'; import { CHAT_BUTTON_TEST_ID, @@ -18,22 +19,30 @@ import { } from './test_ids'; import { HeaderTitle } from './header_title'; import moment from 'moment-timezone'; -import { useDateFormat, useTimeZone } from '../../../common/lib/kibana'; +import { useDateFormat, useTimeZone } from '../../../../common/lib/kibana'; import { mockGetFieldsData } from '../../shared/mocks/mock_get_fields_data'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { useAssistant } from '../hooks/use_assistant'; -import { TestProvidersComponent } from '../../../common/mock'; -import { useGetAlertDetailsFlyoutLink } from '../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link'; +import { TestProvidersComponent } from '../../../../common/mock'; +import { useGetAlertDetailsFlyoutLink } from '../../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link'; +import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; -jest.mock('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana'); jest.mock('../hooks/use_assistant'); jest.mock( - '../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link' + '../../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link' ); moment.suppressDeprecationWarnings = true; moment.tz.setDefault('UTC'); +jest.mock('@elastic/eui', () => ({ + ...jest.requireActual('@elastic/eui'), + copyToClipboard: jest.fn(), + EuiCopy: jest.fn(({ children: functionAsChild }) => functionAsChild(jest.fn())), +})); + +const alertUrl = 'https://example.com/alert'; const dateFormat = 'MMM D, YYYY @ HH:mm:ss.SSS'; const flyoutContextValue = {} as unknown as ExpandableFlyoutContext; const mockContextValue = { @@ -57,7 +66,7 @@ describe('', () => { jest.mocked(useDateFormat).mockImplementation(() => dateFormat); jest.mocked(useTimeZone).mockImplementation(() => 'UTC'); jest.mocked(useAssistant).mockReturnValue({ showAssistant: true, promptContextId: '' }); - jest.mocked(useGetAlertDetailsFlyoutLink).mockReturnValue('url'); + jest.mocked(useGetAlertDetailsFlyoutLink).mockReturnValue(alertUrl); }); it('should render component', () => { @@ -74,10 +83,26 @@ describe('', () => { expect(getByTestId(FLYOUT_HEADER_TITLE_TEST_ID)).toHaveTextContent('rule-name'); }); - it('should render share button in the title', () => { + it('should render share button in the title and copy the the value to clipboard', () => { + const syncedFlyoutState = 'flyoutState'; + const query = `?${FLYOUT_URL_PARAM}=${syncedFlyoutState}`; + + Object.defineProperty(window, 'location', { + value: { + search: query, + }, + }); + const { getByTestId } = renderHeader(mockContextValue); - expect(getByTestId(SHARE_BUTTON_TEST_ID)).toBeInTheDocument(); + const shareButton = getByTestId(SHARE_BUTTON_TEST_ID); + expect(shareButton).toBeInTheDocument(); + + fireEvent.click(shareButton); + + expect(copyToClipboard).toHaveBeenCalledWith( + `${alertUrl}&${FLYOUT_URL_PARAM}=${syncedFlyoutState}` + ); }); it('should not render share button in the title if alert is missing url info', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/header_title.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.tsx similarity index 69% rename from x-pack/plugins/security_solution/public/flyout/right/components/header_title.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.tsx index cd0190e63267f..9f8373c2b3991 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/header_title.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/header_title.tsx @@ -12,20 +12,22 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; import { isEmpty } from 'lodash'; import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useGetAlertDetailsFlyoutLink } from '../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link'; +import { i18n } from '@kbn/i18n'; +import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; +import { CopyToClipboard } from '../../../shared/components/copy_to_clipboard'; +import { useGetAlertDetailsFlyoutLink } from '../../../../timelines/components/side_panel/event_details/use_get_alert_details_flyout_link'; import { DocumentStatus } from './status'; import { useAssistant } from '../hooks/use_assistant'; import { ALERT_SUMMARY_CONVERSATION_ID, EVENT_SUMMARY_CONVERSATION_ID, -} from '../../../common/components/event_details/translations'; +} from '../../../../common/components/event_details/translations'; import { DocumentSeverity } from './severity'; import { RiskScore } from './risk_score'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { useRightPanelContext } from '../context'; -import { PreferenceFormattedDate } from '../../../common/components/formatted_date'; -import { FLYOUT_HEADER_TITLE_TEST_ID } from './test_ids'; -import { ShareButton } from './share_button'; +import { PreferenceFormattedDate } from '../../../../common/components/formatted_date'; +import { FLYOUT_HEADER_TITLE_TEST_ID, SHARE_BUTTON_TEST_ID } from './test_ids'; export interface HeaderTitleProps { /** @@ -79,7 +81,27 @@ export const HeaderTitle: VFC = memo(({ flyoutIsExpandable }) )} {showShareAlertButton && ( - + { + const query = new URLSearchParams(window.location.search); + return `${value}&${FLYOUT_URL_PARAM}=${query.get(FLYOUT_URL_PARAM)}`; + }} + text={ + + } + iconType={'share'} + ariaLabel={i18n.translate( + 'xpack.securitySolution.flyout.right.header.shareButtonAriaLabel', + { + defaultMessage: 'Share Alert', + } + )} + data-test-subj={SHARE_BUTTON_TEST_ID} + /> )} diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.test.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.test.tsx index 47754818704dd..cf5db0460b88a 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.test.tsx @@ -12,11 +12,11 @@ import { HIGHLIGHTED_FIELDS_DETAILS_TEST_ID, HIGHLIGHTED_FIELDS_TITLE_TEST_ID } import { HighlightedFields } from './highlighted_fields'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { useHighlightedFields } from '../../shared/hooks/use_highlighted_fields'; -import { TestProviders } from '../../../common/mock'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { TestProviders } from '../../../../common/mock'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; jest.mock('../../shared/hooks/use_highlighted_fields'); -jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback'); +jest.mock('../../../../detection_engine/rule_management/logic/use_rule_with_fallback'); const renderHighlightedFields = (contextValue: RightPanelContext) => render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.tsx index 5119412824bf3..41f1afbceaa7e 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields.tsx @@ -10,16 +10,16 @@ import React, { useMemo } from 'react'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { EuiFlexGroup, EuiFlexItem, EuiInMemoryTable, EuiPanel, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getSourcererScopeId } from '../../../helpers'; +import { getSourcererScopeId } from '../../../../helpers'; import { convertHighlightedFieldsToTableRow } from '../../shared/utils/highlighted_fields_helpers'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { HighlightedFieldsCell } from './highlighted_fields_cell'; import { CellActionsMode, SecurityCellActions, SecurityCellActionsTrigger, -} from '../../../common/components/cell_actions'; +} from '../../../../common/components/cell_actions'; import { HIGHLIGHTED_FIELDS_DETAILS_TEST_ID, HIGHLIGHTED_FIELDS_TITLE_TEST_ID } from './test_ids'; import { useRightPanelContext } from '../context'; import { useHighlightedFields } from '../../shared/hooks/use_highlighted_fields'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx index 2ed33df412a64..6f4711651ffc2 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx @@ -16,11 +16,11 @@ import { HighlightedFieldsCell } from './highlighted_fields_cell'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { RightPanelContext } from '../context'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { ENTITIES_TAB_ID } from '../../left/components/entities_details'; -import { useGetEndpointDetails } from '../../../management/hooks'; +import { useGetEndpointDetails } from '../../../../management/hooks'; -jest.mock('../../../management/hooks'); +jest.mock('../../../../management/hooks'); const flyoutContextValue = { openLeftPanel: jest.fn(), diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.tsx index a603d0528c119..60c561116c38a 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields_cell.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.tsx @@ -9,13 +9,13 @@ import type { VFC } from 'react'; import React, { useCallback } from 'react'; import { EuiFlexItem, EuiLink } from '@elastic/eui'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; -import { EndpointAgentStatusById } from '../../../common/components/endpoint/endpoint_agent_status'; +import { EndpointAgentStatusById } from '../../../../common/components/endpoint/endpoint_agent_status'; import { useRightPanelContext } from '../context'; import { AGENT_STATUS_FIELD_NAME, HOST_NAME_FIELD_NAME, USER_NAME_FIELD_NAME, -} from '../../../timelines/components/timeline/body/renderers/constants'; +} from '../../../../timelines/components/timeline/body/renderers/constants'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; import { ENTITIES_TAB_ID } from '../../left/components/entities_details'; import { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.test.tsx similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.test.tsx index c690e8a700119..25c25b87aa38d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.test.tsx @@ -6,11 +6,11 @@ */ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { HostEntityOverview } from './host_entity_overview'; -import { useRiskScore } from '../../../explore/containers/risk_score'; -import { useHostDetails } from '../../../explore/hosts/containers/hosts/details'; -import { useFirstLastSeen } from '../../../common/containers/use_first_last_seen'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; +import { useHostDetails } from '../../../../explore/hosts/containers/hosts/details'; +import { useFirstLastSeen } from '../../../../common/containers/use_first_last_seen'; import { ENTITIES_HOST_OVERVIEW_OS_FAMILY_TEST_ID, ENTITIES_HOST_OVERVIEW_LAST_SEEN_TEST_ID, @@ -45,27 +45,27 @@ const flyoutContextValue = { } as unknown as ExpandableFlyoutContext; const mockUseGlobalTime = jest.fn().mockReturnValue({ from, to }); -jest.mock('../../../common/containers/use_global_time', () => { +jest.mock('../../../../common/containers/use_global_time', () => { return { useGlobalTime: (...props: unknown[]) => mockUseGlobalTime(...props), }; }); const mockUseSourcererDataView = jest.fn().mockReturnValue({ selectedPatterns }); -jest.mock('../../../common/containers/sourcerer', () => { +jest.mock('../../../../common/containers/sourcerer', () => { return { useSourcererDataView: (...props: unknown[]) => mockUseSourcererDataView(...props), }; }); const mockUseHostDetails = useHostDetails as jest.Mock; -jest.mock('../../../explore/hosts/containers/hosts/details'); +jest.mock('../../../../explore/hosts/containers/hosts/details'); const mockUseRiskScore = useRiskScore as jest.Mock; -jest.mock('../../../explore/containers/risk_score'); +jest.mock('../../../../explore/containers/risk_score'); const mockUseFirstLastSeen = useFirstLastSeen as jest.Mock; -jest.mock('../../../common/containers/use_first_last_seen'); +jest.mock('../../../../common/containers/use_first_last_seen'); const renderHostEntityContent = () => render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.tsx index 30ccab532234e..fdc3edf96e9b8 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/host_entity_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/host_entity_overview.tsx @@ -20,26 +20,26 @@ import { getOr } from 'lodash/fp'; import { i18n } from '@kbn/i18n'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { useRightPanelContext } from '../context'; -import type { DescriptionList } from '../../../../common/utility_types'; +import type { DescriptionList } from '../../../../../common/utility_types'; import { FirstLastSeen, FirstLastSeenType, -} from '../../../common/components/first_last_seen/first_last_seen'; -import { buildHostNamesFilter, RiskScoreEntity } from '../../../../common/search_strategy'; -import { getEmptyTagValue } from '../../../common/components/empty_value'; -import { DefaultFieldRenderer } from '../../../timelines/components/field_renderers/field_renderers'; -import { DescriptionListStyled } from '../../../common/components/page'; -import { OverviewDescriptionList } from '../../../common/components/overview_description_list'; -import { RiskScoreLevel } from '../../../explore/components/risk_score/severity/common'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useGlobalTime } from '../../../common/containers/use_global_time'; -import { useRiskScore } from '../../../explore/containers/risk_score'; -import { useHostDetails } from '../../../explore/hosts/containers/hosts/details'; +} from '../../../../common/components/first_last_seen/first_last_seen'; +import { buildHostNamesFilter, RiskScoreEntity } from '../../../../../common/search_strategy'; +import { getEmptyTagValue } from '../../../../common/components/empty_value'; +import { DefaultFieldRenderer } from '../../../../timelines/components/field_renderers/field_renderers'; +import { DescriptionListStyled } from '../../../../common/components/page'; +import { OverviewDescriptionList } from '../../../../common/components/overview_description_list'; +import { RiskScoreLevel } from '../../../../explore/components/risk_score/severity/common'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useGlobalTime } from '../../../../common/containers/use_global_time'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; +import { useHostDetails } from '../../../../explore/hosts/containers/hosts/details'; import { FAMILY, LAST_SEEN, HOST_RISK_LEVEL, -} from '../../../overview/components/host_overview/translations'; +} from '../../../../overview/components/host_overview/translations'; import { ENTITIES_TAB_ID } from '../../left/components/entities_details'; import { ENTITIES_HOST_OVERVIEW_TEST_ID, @@ -50,7 +50,7 @@ import { ENTITIES_HOST_OVERVIEW_LOADING_TEST_ID, } from './test_ids'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; -import { RiskScoreDocTooltip } from '../../../overview/components/common'; +import { RiskScoreDocTooltip } from '../../../../overview/components/common'; const HOST_ICON = 'storage'; const CONTEXT_ID = `flyout-host-entity-overview`; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_section.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/right/components/insights_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_section.test.tsx index 95bf7598a8197..a7edc0927fb12 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_section.test.tsx @@ -9,13 +9,13 @@ import React from 'react'; import { render } from '@testing-library/react'; import { RightPanelContext } from '../context'; import { INSIGHTS_HEADER_TEST_ID } from './test_ids'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { mockGetFieldsData } from '../../shared/mocks/mock_get_fields_data'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { InsightsSection } from './insights_section'; -import { useAlertPrevalence } from '../../../common/containers/alerts/use_alert_prevalence'; +import { useAlertPrevalence } from '../../../../common/containers/alerts/use_alert_prevalence'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence'); +jest.mock('../../../../common/containers/alerts/use_alert_prevalence'); const mockDispatch = jest.fn(); jest.mock('react-redux', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/insights_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.stories.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.stories.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.stories.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.stories.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.tsx index 5aacae978c721..ed6d858ed3064 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/insights_summary_row.tsx @@ -17,7 +17,7 @@ import { EuiSkeletonText, useEuiTheme, } from '@elastic/eui'; -import { FormattedCount } from '../../../common/components/formatted_number'; +import { FormattedCount } from '../../../../common/components/formatted_number'; export interface InsightsSummaryRowProps { /** diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_guide.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_guide.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/investigation_guide.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_guide.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_guide.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_guide.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/investigation_guide.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_guide.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_section.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_section.test.tsx index 3a0b0ad4a3b3c..0d53dcd97a120 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_section.test.tsx @@ -15,10 +15,10 @@ import { import { RightPanelContext } from '../context'; import { InvestigationSection } from './investigation_section'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; -jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback'); +jest.mock('../../../../detection_engine/rule_management/logic/use_rule_with_fallback'); const flyoutContextValue = {} as unknown as ExpandableFlyoutContext; const panelContextValue = { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/investigation_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/investigation_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/mitre_attack.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/mitre_attack.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/mitre_attack.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/mitre_attack.tsx index 7eaf175cc0e5c..2e56e2013d444 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/mitre_attack.tsx @@ -9,7 +9,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; import type { FC } from 'react'; import React, { useMemo } from 'react'; import { MITRE_ATTACK_DETAILS_TEST_ID, MITRE_ATTACK_TITLE_TEST_ID } from './test_ids'; -import { getMitreComponentParts } from '../../../detections/mitre/get_mitre_threat_component'; +import { getMitreComponentParts } from '../../../../detections/mitre/get_mitre_threat_component'; import { useRightPanelContext } from '../context'; export const MitreAttack: FC = () => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx index c9d3943ee936f..79fcf89977291 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.test.tsx @@ -7,7 +7,7 @@ import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { RightPanelContext } from '../context'; import { PREVALENCE_TEST_ID } from './test_ids'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; @@ -20,7 +20,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_LOADING_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { usePrevalence } from '../../shared/hooks/use_prevalence'; import { mockContextValue } from '../mocks/mock_context'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx index 5aad186b24c0c..674b9d662f460 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/prevalence_overview.tsx @@ -10,7 +10,7 @@ import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup } from '@elastic/eui'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { usePrevalence } from '../../shared/hooks/use_prevalence'; import { PREVALENCE_TEST_ID } from './test_ids'; import { useRightPanelContext } from '../context'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/reason.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/reason.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/reason.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/reason.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/reason.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/reason.tsx index 0d022f3a0735e..ca0de7118a065 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/reason.tsx @@ -19,7 +19,7 @@ import { REASON_DETAILS_TEST_ID, REASON_TITLE_TEST_ID, } from './test_ids'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { useRightPanelContext } from '../context'; /** diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_ancestry.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_ancestry.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_ancestry.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_ancestry.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_ancestry.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_ancestry.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_ancestry.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_ancestry.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_same_source_event.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_same_source_event.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_same_source_event.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_same_source_event.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_same_source_event.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_same_source_event.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_same_source_event.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_same_source_event.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_session.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_session.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_session.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_session.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_session.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_session.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_alerts_by_session.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_alerts_by_session.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_cases.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_cases.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_cases.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_cases.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/related_cases.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_cases.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/related_cases.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/related_cases.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/response_button.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_button.test.tsx similarity index 96% rename from x-pack/plugins/security_solution/public/flyout/right/components/response_button.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_button.test.tsx index e18d815e93cf0..afab956e4d33c 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/response_button.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_button.test.tsx @@ -14,7 +14,7 @@ import { mockContextValue } from '../mocks/mock_context'; import { mockFlyoutContextValue } from '../../shared/mocks/mock_flyout_context'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { ResponseButton } from './response_button'; -import type { SearchHit } from '../../../../common/search_strategy'; +import type { SearchHit } from '../../../../../common/search_strategy'; const mockValidSearchHit = { fields: { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/response_button.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_button.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/response_button.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_button.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/response_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_section.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/response_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_section.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/response_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/response_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/response_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/risk_score.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/risk_score.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/risk_score.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/risk_score.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/risk_score.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/risk_score.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/risk_score.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/risk_score.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/session_preview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.test.tsx index 3f93b24e4b018..775e195e764fd 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.test.tsx @@ -8,7 +8,7 @@ import { render, screen } from '@testing-library/react'; import { useProcessData } from '../hooks/use_process_data'; import { SessionPreview } from './session_preview'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import React from 'react'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { RightPanelContext } from '../context'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.tsx index 889d0c2f62c04..63f07cb7ab1f3 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview.tsx @@ -12,10 +12,10 @@ import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; import { SESSION_PREVIEW_TEST_ID } from './test_ids'; import { useRightPanelContext } from '../context'; -import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; -import { PreferenceFormattedDate } from '../../../common/components/formatted_date'; +import { SIGNAL_RULE_NAME_FIELD_NAME } from '../../../../timelines/components/timeline/body/renderers/constants'; +import { PreferenceFormattedDate } from '../../../../common/components/formatted_date'; import { useProcessData } from '../hooks/use_process_data'; -import { RenderRuleName } from '../../../timelines/components/timeline/body/renderers/formatted_field_helpers'; +import { RenderRuleName } from '../../../../timelines/components/timeline/body/renderers/formatted_field_helpers'; /** * One-off helper to make sure that inline values are rendered consistently diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx index e47673721e5b7..cfd5bcc525700 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.test.tsx @@ -6,12 +6,12 @@ */ import { render, screen } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import React from 'react'; import { RightPanelContext } from '../context'; import { SessionPreviewContainer } from './session_preview_container'; import { useSessionPreview } from '../hooks/use_session_preview'; -import { useLicense } from '../../../common/hooks/use_license'; +import { useLicense } from '../../../../common/hooks/use_license'; import { SESSION_PREVIEW_TEST_ID } from './test_ids'; import { EXPANDABLE_PANEL_CONTENT_TEST_ID, @@ -19,11 +19,11 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID, EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; import { mockGetFieldsData } from '../../shared/mocks/mock_get_fields_data'; jest.mock('../hooks/use_session_preview'); -jest.mock('../../../common/hooks/use_license'); +jest.mock('../../../../common/hooks/use_license'); const NO_DATA_MESSAGE = 'You can only view Linux session details if you’ve enabled the Include session data setting in your Elastic Defend integration policy. Refer to Enable Session View dataExternal link(opens in a new tab or window) for more information.'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx index f88d9d3f31a2c..101c067ad661d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/session_preview_container.tsx @@ -11,17 +11,17 @@ import { useDispatch } from 'react-redux'; import { EuiLink, useEuiTheme } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/css/dist/emotion-css.cjs'; -import { useLicense } from '../../../common/hooks/use_license'; +import { useLicense } from '../../../../common/hooks/use_license'; import { SessionPreview } from './session_preview'; import { useSessionPreview } from '../hooks/use_session_preview'; -import { useInvestigateInTimeline } from '../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; +import { useInvestigateInTimeline } from '../../../../detections/components/alerts_table/timeline_actions/use_investigate_in_timeline'; import { useRightPanelContext } from '../context'; -import { ALERTS_ACTIONS } from '../../../common/lib/apm/user_actions'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ALERTS_ACTIONS } from '../../../../common/lib/apm/user_actions'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { SESSION_PREVIEW_TEST_ID } from './test_ids'; -import { useStartTransaction } from '../../../common/lib/apm/use_start_transaction'; -import { setActiveTabTimeline } from '../../../timelines/store/timeline/actions'; -import { getScopedActions } from '../../../helpers'; +import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; +import { setActiveTabTimeline } from '../../../../timelines/store/timeline/actions'; +import { getScopedActions } from '../../../../helpers'; const timelineId = 'timeline-1'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/severity.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/severity.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.test.tsx index 685bcc8cc4e0e..968dbfa39a0eb 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/severity.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.test.tsx @@ -11,7 +11,7 @@ import { RightPanelContext } from '../context'; import { SEVERITY_TITLE_TEST_ID, SEVERITY_VALUE_TEST_ID } from './test_ids'; import { DocumentSeverity } from './severity'; import { mockGetFieldsData } from '../../shared/mocks/mock_get_fields_data'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; const renderDocumentSeverity = (contextValue: RightPanelContext) => render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.tsx similarity index 88% rename from x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.tsx index 7ba94ab3d6a80..e7ebca5622725 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/severity.tsx @@ -12,11 +12,11 @@ import { ALERT_SEVERITY } from '@kbn/rule-data-utils'; import type { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; import { CellActionsMode } from '@kbn/cell-actions'; import { FormattedMessage } from '@kbn/i18n-react'; -import { getSourcererScopeId } from '../../../helpers'; -import { SecurityCellActions } from '../../../common/components/cell_actions'; -import { SecurityCellActionsTrigger } from '../../../actions/constants'; +import { getSourcererScopeId } from '../../../../helpers'; +import { SecurityCellActions } from '../../../../common/components/cell_actions'; +import { SecurityCellActionsTrigger } from '../../../../actions/constants'; import { useRightPanelContext } from '../context'; -import { SeverityBadge } from '../../../detections/components/rules/severity_badge'; +import { SeverityBadge } from '../../../../detections/components/rules/severity_badge'; import { SEVERITY_TITLE_TEST_ID } from './test_ids'; const isSeverity = (x: unknown): x is Severity => diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/status.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.test.tsx similarity index 89% rename from x-pack/plugins/security_solution/public/flyout/right/components/status.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.test.tsx index 9cb2f871015e6..0b52e0ef67665 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/status.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.test.tsx @@ -11,11 +11,11 @@ import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { RightPanelContext } from '../context'; import { DocumentStatus } from './status'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; -import { TestProviders } from '../../../common/mock'; -import { useAlertsActions } from '../../../detections/components/alerts_table/timeline_actions/use_alerts_actions'; +import { TestProviders } from '../../../../common/mock'; +import { useAlertsActions } from '../../../../detections/components/alerts_table/timeline_actions/use_alerts_actions'; import { STATUS_BUTTON_TEST_ID } from './test_ids'; -jest.mock('../../../detections/components/alerts_table/timeline_actions/use_alerts_actions'); +jest.mock('../../../../detections/components/alerts_table/timeline_actions/use_alerts_actions'); const flyoutContextValue = { closeFlyout: jest.fn(), diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/status.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.tsx similarity index 79% rename from x-pack/plugins/security_solution/public/flyout/right/components/status.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.tsx index 0c7ba8de0c4d7..325962d689228 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/status.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/status.tsx @@ -10,17 +10,17 @@ import React, { useMemo } from 'react'; import { find } from 'lodash/fp'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { CellActionsMode } from '@kbn/cell-actions'; -import { getSourcererScopeId } from '../../../helpers'; -import { SecurityCellActions } from '../../../common/components/cell_actions'; +import { getSourcererScopeId } from '../../../../helpers'; +import { SecurityCellActions } from '../../../../common/components/cell_actions'; import type { EnrichedFieldInfo, EnrichedFieldInfoWithValues, -} from '../../../common/components/event_details/types'; -import { SIGNAL_STATUS_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; -import { StatusPopoverButton } from '../../../common/components/event_details/overview/status_popover_button'; +} from '../../../../common/components/event_details/types'; +import { SIGNAL_STATUS_FIELD_NAME } from '../../../../timelines/components/timeline/body/renderers/constants'; +import { StatusPopoverButton } from '../../../../common/components/event_details/overview/status_popover_button'; import { useRightPanelContext } from '../context'; -import { getEnrichedFieldInfo } from '../../../common/components/event_details/helpers'; -import { SecurityCellActionsTrigger } from '../../../actions/constants'; +import { getEnrichedFieldInfo } from '../../../../common/components/event_details/helpers'; +import { SecurityCellActionsTrigger } from '../../../../actions/constants'; /** * Checks if the field info has data to convert EnrichedFieldInfo into EnrichedFieldInfoWithValues diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/suppressed_alerts.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/suppressed_alerts.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/suppressed_alerts.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/suppressed_alerts.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/suppressed_alerts.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/suppressed_alerts.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/components/suppressed_alerts.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/suppressed_alerts.tsx index 11c67e60d0fab..ce466a66a499d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/suppressed_alerts.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/suppressed_alerts.tsx @@ -13,7 +13,7 @@ import { CORRELATIONS_SUPPRESSED_ALERTS_TECHNICAL_PREVIEW_TEST_ID, } from './test_ids'; import { InsightsSummaryRow } from './insights_summary_row'; -import { SUPPRESSED_ALERTS_COUNT_TECHNICAL_PREVIEW } from '../../../common/components/event_details/insights/translations'; +import { SUPPRESSED_ALERTS_COUNT_TECHNICAL_PREVIEW } from '../../../../common/components/event_details/insights/translations'; export interface SuppressedAlertsProps { /** diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts similarity index 99% rename from x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts index acff67542b0f4..21f92d76c96cb 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../../shared/test_ids'; +import { PREFIX } from '../../../shared/test_ids'; import { CONTENT_TEST_ID, HEADER_TEST_ID } from './expandable_section'; /* Header */ diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx index 4b0b5816f3014..1b8a646f1d356 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; import { RightPanelContext } from '../context'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { ThreatIntelligenceOverview } from './threat_intelligence_overview'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; import { useFetchThreatIntelligence } from '../hooks/use_fetch_threat_intelligence'; @@ -22,7 +22,7 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID, EXPANDABLE_PANEL_LOADING_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, -} from '../../shared/components/test_ids'; +} from '../../../shared/components/test_ids'; jest.mock('../hooks/use_fetch_threat_intelligence'); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx similarity index 98% rename from x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx index 9b5ad192ec371..ebaea597219ac 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/threat_intelligence_overview.tsx @@ -10,7 +10,7 @@ import React, { useCallback } from 'react'; import { EuiFlexGroup } from '@elastic/eui'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ExpandablePanel } from '../../shared/components/expandable_panel'; +import { ExpandablePanel } from '../../../shared/components/expandable_panel'; import { useFetchThreatIntelligence } from '../hooks/use_fetch_threat_intelligence'; import { InsightsSummaryRow } from './insights_summary_row'; import { useRightPanelContext } from '../context'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.test.tsx similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.test.tsx index 798e7136253bb..37b4666611efe 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.test.tsx @@ -6,10 +6,10 @@ */ import React from 'react'; import { render } from '@testing-library/react'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { UserEntityOverview } from './user_entity_overview'; -import { useRiskScore } from '../../../explore/containers/risk_score'; -import { useFirstLastSeen } from '../../../common/containers/use_first_last_seen'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; +import { useFirstLastSeen } from '../../../../common/containers/use_first_last_seen'; import { ENTITIES_USER_OVERVIEW_DOMAIN_TEST_ID, ENTITIES_USER_OVERVIEW_LAST_SEEN_TEST_ID, @@ -17,7 +17,7 @@ import { ENTITIES_USER_OVERVIEW_RISK_LEVEL_TEST_ID, ENTITIES_USER_OVERVIEW_LOADING_TEST_ID, } from './test_ids'; -import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details'; +import { useObservedUserDetails } from '../../../../explore/users/containers/users/observed_details'; import { mockContextValue } from '../mocks/mock_context'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; @@ -45,27 +45,27 @@ const flyoutContextValue = { } as unknown as ExpandableFlyoutContext; const mockUseGlobalTime = jest.fn().mockReturnValue({ from, to }); -jest.mock('../../../common/containers/use_global_time', () => { +jest.mock('../../../../common/containers/use_global_time', () => { return { useGlobalTime: (...props: unknown[]) => mockUseGlobalTime(...props), }; }); const mockUseSourcererDataView = jest.fn().mockReturnValue({ selectedPatterns }); -jest.mock('../../../common/containers/sourcerer', () => { +jest.mock('../../../../common/containers/sourcerer', () => { return { useSourcererDataView: (...props: unknown[]) => mockUseSourcererDataView(...props), }; }); const mockUseUserDetails = useObservedUserDetails as jest.Mock; -jest.mock('../../../explore/users/containers/users/observed_details'); +jest.mock('../../../../explore/users/containers/users/observed_details'); const mockUseRiskScore = useRiskScore as jest.Mock; -jest.mock('../../../explore/containers/risk_score'); +jest.mock('../../../../explore/containers/risk_score'); const mockUseFirstLastSeen = useFirstLastSeen as jest.Mock; -jest.mock('../../../common/containers/use_first_last_seen'); +jest.mock('../../../../common/containers/use_first_last_seen'); const renderUserEntityOverview = () => render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.tsx similarity index 84% rename from x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.tsx index 9f28753a5c1cc..cd1a057b6fbc0 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/user_entity_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/user_entity_overview.tsx @@ -22,25 +22,25 @@ import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { LeftPanelInsightsTab, LeftPanelKey } from '../../left'; import { ENTITIES_TAB_ID } from '../../left/components/entities_details'; import { useRightPanelContext } from '../context'; -import type { DescriptionList } from '../../../../common/utility_types'; +import type { DescriptionList } from '../../../../../common/utility_types'; import { FirstLastSeen, FirstLastSeenType, -} from '../../../common/components/first_last_seen/first_last_seen'; -import { buildUserNamesFilter, RiskScoreEntity } from '../../../../common/search_strategy'; -import { getEmptyTagValue } from '../../../common/components/empty_value'; -import { DefaultFieldRenderer } from '../../../timelines/components/field_renderers/field_renderers'; -import { DescriptionListStyled } from '../../../common/components/page'; -import { OverviewDescriptionList } from '../../../common/components/overview_description_list'; -import { RiskScoreLevel } from '../../../explore/components/risk_score/severity/common'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useGlobalTime } from '../../../common/containers/use_global_time'; -import { useRiskScore } from '../../../explore/containers/risk_score'; +} from '../../../../common/components/first_last_seen/first_last_seen'; +import { buildUserNamesFilter, RiskScoreEntity } from '../../../../../common/search_strategy'; +import { getEmptyTagValue } from '../../../../common/components/empty_value'; +import { DefaultFieldRenderer } from '../../../../timelines/components/field_renderers/field_renderers'; +import { DescriptionListStyled } from '../../../../common/components/page'; +import { OverviewDescriptionList } from '../../../../common/components/overview_description_list'; +import { RiskScoreLevel } from '../../../../explore/components/risk_score/severity/common'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useGlobalTime } from '../../../../common/containers/use_global_time'; +import { useRiskScore } from '../../../../explore/containers/risk_score'; import { USER_DOMAIN, LAST_SEEN, USER_RISK_LEVEL, -} from '../../../overview/components/user_overview/translations'; +} from '../../../../overview/components/user_overview/translations'; import { ENTITIES_USER_OVERVIEW_TEST_ID, ENTITIES_USER_OVERVIEW_DOMAIN_TEST_ID, @@ -49,8 +49,8 @@ import { ENTITIES_USER_OVERVIEW_LINK_TEST_ID, ENTITIES_USER_OVERVIEW_LOADING_TEST_ID, } from './test_ids'; -import { useObservedUserDetails } from '../../../explore/users/containers/users/observed_details'; -import { RiskScoreDocTooltip } from '../../../overview/components/common'; +import { useObservedUserDetails } from '../../../../explore/users/containers/users/observed_details'; +import { RiskScoreDocTooltip } from '../../../../overview/components/common'; const USER_ICON = 'user'; const CONTEXT_ID = `flyout-user-entity-overview`; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/visualizations_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/visualizations_section.test.tsx similarity index 90% rename from x-pack/plugins/security_solution/public/flyout/right/components/visualizations_section.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/visualizations_section.test.tsx index 3d34a7e02aff3..14a0136c73ed9 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/visualizations_section.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/visualizations_section.test.tsx @@ -9,15 +9,15 @@ import React from 'react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { render } from '@testing-library/react'; import { VISUALIZATIONS_SECTION_HEADER_TEST_ID } from './test_ids'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; import { VisualizationsSection } from './visualizations_section'; import { mockContextValue } from '../mocks/mock_context'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { RightPanelContext } from '../context'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence_from_process_tree', () => ({ +jest.mock('../../../../common/containers/alerts/use_alert_prevalence_from_process_tree', () => ({ useAlertPrevalenceFromProcessTree: jest.fn(), })); const mockUseAlertPrevalenceFromProcessTree = useAlertPrevalenceFromProcessTree as jest.Mock; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/visualizations_section.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/visualizations_section.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/components/visualizations_section.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/components/visualizations_section.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/content.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/content.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/content.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/context.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/context.tsx similarity index 87% rename from x-pack/plugins/security_solution/public/flyout/right/context.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/context.tsx index 66a5ed3096f03..b46645aaf883c 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/context.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/context.tsx @@ -10,13 +10,13 @@ import React, { createContext, memo, useContext, useMemo } from 'react'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useEventDetails } from '../shared/hooks/use_event_details'; -import { FlyoutError } from '../shared/components/flyout_error'; -import { FlyoutLoading } from '../shared/components/flyout_loading'; -import type { SearchHit } from '../../../common/search_strategy'; -import { useBasicDataFromDetailsData } from '../../timelines/components/side_panel/event_details/helpers'; +import { FlyoutError } from '../../shared/components/flyout_error'; +import { FlyoutLoading } from '../../shared/components/flyout_loading'; +import type { SearchHit } from '../../../../common/search_strategy'; +import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; import type { RightPanelProps } from '.'; -import type { GetFieldsData } from '../../common/hooks/use_get_fields_data'; -import { useRuleWithFallback } from '../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; export interface RightPanelContext { /** diff --git a/x-pack/plugins/security_solution/public/flyout/right/footer.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/footer.tsx similarity index 88% rename from x-pack/plugins/security_solution/public/flyout/right/footer.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/footer.tsx index b11f1ad1f0013..029c1fea91dae 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/footer.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/footer.tsx @@ -8,9 +8,9 @@ import type { FC } from 'react'; import React, { useCallback } from 'react'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; -import { FlyoutFooter } from '../../timelines/components/side_panel/event_details/flyout'; +import { FlyoutFooter } from '../../../timelines/components/side_panel/event_details/flyout'; import { useRightPanelContext } from './context'; -import { useHostIsolationTools } from '../../timelines/components/side_panel/event_details/use_host_isolation_tools'; +import { useHostIsolationTools } from '../../../timelines/components/side_panel/event_details/use_host_isolation_tools'; /** * diff --git a/x-pack/plugins/security_solution/public/flyout/right/header.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/header.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/header.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/header.test.tsx index b226ddc8289b9..96a4d2c524ec0 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/header.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/header.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ExpandableFlyoutContext } from '@kbn/expandable-flyout/src/context'; -import { TestProviders } from '../../common/mock'; +import { TestProviders } from '../../../common/mock'; import { RightPanelContext } from './context'; import { mockContextValue } from './mocks/mock_context'; import { PanelHeader } from './header'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/header.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/header.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/header.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_accordion_state.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_accordion_state.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_accordion_state.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_accordion_state.ts diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.test.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.test.tsx index 68b07b45b30ff..4cfba25576515 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.test.tsx @@ -11,9 +11,9 @@ import type { UseAssistantParams, UseAssistantResult } from './use_assistant'; import { useAssistant } from './use_assistant'; import { mockDataFormattedForFieldBrowser } from '../../shared/mocks/mock_data_formatted_for_field_browser'; import { useAssistantOverlay } from '@kbn/elastic-assistant'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; +import { useAssistantAvailability } from '../../../../assistant/use_assistant_availability'; -jest.mock('../../../assistant/use_assistant_availability'); +jest.mock('../../../../assistant/use_assistant_availability'); jest.mock('@kbn/elastic-assistant'); const dataFormattedForFieldBrowser = mockDataFormattedForFieldBrowser; diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.ts similarity index 90% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.ts index a53d2e97015ab..185591ff43a2d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_assistant.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_assistant.ts @@ -8,8 +8,8 @@ import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; import { useAssistantOverlay } from '@kbn/elastic-assistant'; import { useCallback } from 'react'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; -import { getRawData } from '../../../assistant/helpers'; +import { useAssistantAvailability } from '../../../../assistant/use_assistant_availability'; +import { getRawData } from '../../../../assistant/helpers'; import { ALERT_SUMMARY_CONTEXT_DESCRIPTION, ALERT_SUMMARY_CONVERSATION_ID, @@ -18,12 +18,12 @@ import { EVENT_SUMMARY_CONVERSATION_ID, EVENT_SUMMARY_VIEW_CONTEXT_TOOLTIP, SUMMARY_VIEW, -} from '../../../common/components/event_details/translations'; +} from '../../../../common/components/event_details/translations'; import { PROMPT_CONTEXT_ALERT_CATEGORY, PROMPT_CONTEXT_EVENT_CATEGORY, PROMPT_CONTEXTS, -} from '../../../assistant/content/prompt_contexts'; +} from '../../../../assistant/content/prompt_contexts'; const useAssistantNoop = () => ({ promptContextId: undefined }); diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx index 075935ad37fd4..8c7dac4829d1a 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.test.tsx @@ -12,9 +12,9 @@ import type { UseThreatIntelligenceResult, } from './use_fetch_threat_intelligence'; import { useFetchThreatIntelligence } from './use_fetch_threat_intelligence'; -import { useInvestigationTimeEnrichment } from '../../../common/containers/cti/event_enrichment'; +import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; -jest.mock('../../../common/containers/cti/event_enrichment'); +jest.mock('../../../../common/containers/cti/event_enrichment'); const dataFormattedForFieldBrowser = [ { diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts similarity index 88% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts index 3b495ad52bc60..133fd43392c8a 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_fetch_threat_intelligence.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_fetch_threat_intelligence.ts @@ -8,16 +8,16 @@ import { useMemo } from 'react'; import { groupBy } from 'lodash'; import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; -import type { CtiEnrichment } from '../../../../common/search_strategy'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import type { CtiEnrichment } from '../../../../../common/search_strategy'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; import { filterDuplicateEnrichments, getEnrichmentFields, parseExistingEnrichments, timelineDataToEnrichment, -} from '../../../common/components/event_details/cti_details/helpers'; -import { useInvestigationTimeEnrichment } from '../../../common/containers/cti/event_enrichment'; -import { ENRICHMENT_TYPES } from '../../../../common/cti/constants'; +} from '../../../../common/components/event_details/cti_details/helpers'; +import { useInvestigationTimeEnrichment } from '../../../../common/containers/cti/event_enrichment'; +import { ENRICHMENT_TYPES } from '../../../../../common/cti/constants'; export interface UseThreatIntelligenceParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_process_data.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_process_data.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_process_data.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_process_data.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_process_data.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_process_data.ts similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_process_data.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_process_data.ts index ac98ddd1df2b2..8d3edf833e0db 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_process_data.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_process_data.ts @@ -7,7 +7,7 @@ import { useMemo } from 'react'; import { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; import { getField } from '../../shared/utils'; import { useRightPanelContext } from '../context'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.test.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.test.tsx index 17b3e7a6a0616..4f2e5b8769eab 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.test.tsx @@ -10,7 +10,7 @@ import { renderHook } from '@testing-library/react-hooks'; import type { UseSessionPreviewParams } from './use_session_preview'; import { useSessionPreview } from './use_session_preview'; import type { SessionViewConfig } from '@kbn/securitysolution-data-table/common/types'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; describe('useSessionPreview', () => { let hookResult: RenderHookResult; diff --git a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.ts similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.ts index f0a3c75dbb8cf..a64b417ad39c1 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/hooks/use_session_preview.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/hooks/use_session_preview.ts @@ -6,7 +6,7 @@ */ import type { SessionViewConfig } from '@kbn/securitysolution-data-table/common/types'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; import { getField } from '../../shared/utils'; export interface UseSessionPreviewParams { diff --git a/x-pack/plugins/security_solution/public/flyout/right/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/index.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/index.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_analyzer_data.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/mocks/mock_analyzer_data.ts similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/mocks/mock_analyzer_data.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/mocks/mock_analyzer_data.ts index 142496a332a6a..fbd7dea83f79d 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_analyzer_data.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/mocks/mock_analyzer_data.ts @@ -7,7 +7,7 @@ import React from 'react'; import { EuiToken } from '@elastic/eui'; import type { Node } from '@elastic/eui/src/components/tree_view/tree_view'; -import type { StatsNode } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import type { StatsNode } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; export const mockStatsNode: StatsNode = { id: '70e19mhyda', diff --git a/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/mocks/mock_context.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/mocks/mock_context.ts diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/tabs.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/tabs.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.test.tsx new file mode 100644 index 0000000000000..81eefcf2b3a3a --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.test.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; 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 { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { copyToClipboard } from '@elastic/eui'; +import { RightPanelContext } from '../context'; +import { JsonTab } from './json_tab'; +import { JSON_TAB_CONTENT_TEST_ID, JSON_TAB_COPY_TO_CLIPBOARD_BUTTON_TEST_ID } from './test_ids'; + +jest.mock('@elastic/eui', () => ({ + ...jest.requireActual('@elastic/eui'), + copyToClipboard: jest.fn(), + EuiCopy: jest.fn(({ children: functionAsChild }) => functionAsChild(jest.fn())), +})); + +const searchHit = { + some_field: 'some_value', +}; +const contextValue = { + searchHit, +} as unknown as RightPanelContext; + +const renderJsonTab = () => + render( + + + + + + ); + +describe('', () => { + it('should render json code editor component', () => { + const { getByTestId } = renderJsonTab(); + + expect(getByTestId(JSON_TAB_CONTENT_TEST_ID)).toBeInTheDocument(); + }); + + it('should copy to clipboard', () => { + const { getByTestId } = renderJsonTab(); + + const copyToClipboardButton = getByTestId(JSON_TAB_COPY_TO_CLIPBOARD_BUTTON_TEST_ID); + expect(copyToClipboardButton).toBeInTheDocument(); + + fireEvent.click(copyToClipboardButton); + + expect(copyToClipboard).toHaveBeenCalledWith(JSON.stringify(searchHit, null, 2)); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.tsx new file mode 100644 index 0000000000000..f29a1486819cb --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/json_tab.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FC } from 'react'; +import React, { memo, useEffect, useRef, useState } from 'react'; +import { JsonCodeEditor } from '@kbn/unified-doc-viewer-plugin/public'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { CopyToClipboard } from '../../../shared/components/copy_to_clipboard'; +import { JSON_TAB_CONTENT_TEST_ID, JSON_TAB_COPY_TO_CLIPBOARD_BUTTON_TEST_ID } from './test_ids'; +import { useRightPanelContext } from '../context'; + +const FLYOUT_BODY_PADDING = 24; +const COPY_TO_CLIPBOARD_BUTTON_HEIGHT = 24; +const FLYOUT_FOOTER_HEIGHT = 72; + +/** + * Json view displayed in the document details expandable flyout right section + */ +export const JsonTab: FC = memo(() => { + const { searchHit } = useRightPanelContext(); + const jsonValue = JSON.stringify(searchHit, null, 2); + + const flexGroupElement = useRef(null); + const [editorHeight, setEditorHeight] = useState(); + + useEffect(() => { + const topPosition = flexGroupElement?.current?.getBoundingClientRect().top || 0; + const height = + window.innerHeight - + topPosition - + COPY_TO_CLIPBOARD_BUTTON_HEIGHT - + FLYOUT_BODY_PADDING - + FLYOUT_FOOTER_HEIGHT; + + if (height === 0) { + return; + } + + setEditorHeight(height); + }, [setEditorHeight]); + + return ( + + + + + + } + iconType={'copyClipboard'} + size={'xs'} + ariaLabel={i18n.translate( + 'xpack.securitySolution.flyout.right.jsonTab.copyToClipboardButtonAriaLabel', + { + defaultMessage: 'Copy to clipboard', + } + )} + data-test-subj={JSON_TAB_COPY_TO_CLIPBOARD_BUTTON_TEST_ID} + /> + + + + + } + height={editorHeight} + hasLineNumbers={true} + /> + + + ); +}); + +JsonTab.displayName = 'JsonTab'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/overview_tab.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/overview_tab.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.test.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.test.tsx index d93cf67abc620..08a63c2cd9cc0 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.test.tsx @@ -10,7 +10,7 @@ import { render } from '@testing-library/react'; import { RightPanelContext } from '../context'; import { TABLE_TAB_CONTENT_TEST_ID } from './test_ids'; import { TableTab } from './table_tab'; -import { TestProviders } from '../../../common/mock'; +import { TestProviders } from '../../../../common/mock'; const mockDispatch = jest.fn(); jest.mock('react-redux', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx index 013b928ac09ff..8351d70216be7 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/table_tab.tsx @@ -10,21 +10,21 @@ import React, { memo } from 'react'; import { EuiText } from '@elastic/eui'; import { get } from 'lodash'; import memoizeOne from 'memoize-one'; -import type { EventFieldsData } from '../../../common/components/event_details/types'; -import { FieldValueCell } from '../../../common/components/event_details/table/field_value_cell'; -import type { BrowserField, BrowserFields } from '../../../../common/search_strategy'; -import { FieldNameCell } from '../../../common/components/event_details/table/field_name_cell'; +import type { EventFieldsData } from '../../../../common/components/event_details/types'; +import { FieldValueCell } from '../../../../common/components/event_details/table/field_value_cell'; +import type { BrowserField, BrowserFields } from '../../../../../common/search_strategy'; +import { FieldNameCell } from '../../../../common/components/event_details/table/field_name_cell'; import { CellActionsMode, SecurityCellActions, SecurityCellActionsTrigger, -} from '../../../common/components/cell_actions'; -import { getSourcererScopeId } from '../../../helpers'; -import * as i18n from '../../../common/components/event_details/translations'; +} from '../../../../common/components/cell_actions'; +import { getSourcererScopeId } from '../../../../helpers'; +import * as i18n from '../../../../common/components/event_details/translations'; import { useRightPanelContext } from '../context'; -import type { ColumnsProvider } from '../../../common/components/event_details/event_fields_browser'; -import { EventFieldsBrowser } from '../../../common/components/event_details/event_fields_browser'; -import { TimelineTabs } from '../../../../common/types'; +import type { ColumnsProvider } from '../../../../common/components/event_details/event_fields_browser'; +import { EventFieldsBrowser } from '../../../../common/components/event_details/event_fields_browser'; +import { TimelineTabs } from '../../../../../common/types'; export const getFieldFromBrowserField = memoizeOne( (keys: string[], browserFields: BrowserFields): BrowserField | undefined => diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/test_ids.ts similarity index 71% rename from x-pack/plugins/security_solution/public/flyout/right/tabs/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/test_ids.ts index 6930c18a28bdd..6fa34f66265a9 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/tabs/test_ids.ts @@ -5,5 +5,8 @@ * 2.0. */ +import { PREFIX } from '../../../shared/test_ids'; + export const TABLE_TAB_CONTENT_TEST_ID = 'event-fields-browser' as const; export const JSON_TAB_CONTENT_TEST_ID = 'jsonView' as const; +export const JSON_TAB_COPY_TO_CLIPBOARD_BUTTON_TEST_ID = `${PREFIX}JsonTabCopyToClipboard` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/right/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/right/test_ids.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts index ed5d57cf1796a..82af702c61568 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/test_ids.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PREFIX } from '../shared/test_ids'; +import { PREFIX } from '../../shared/test_ids'; export const FLYOUT_BODY_TEST_ID = `${PREFIX}Body` as const; export const OVERVIEW_TAB_TEST_ID = `${PREFIX}OverviewTab` as const; diff --git a/x-pack/plugins/security_solution/public/flyout/right/utils/analyzer_helpers.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/utils/analyzer_helpers.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/right/utils/analyzer_helpers.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/right/utils/analyzer_helpers.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/right/utils/analyzer_helpers.ts b/x-pack/plugins/security_solution/public/flyout/document_details/right/utils/analyzer_helpers.ts similarity index 97% rename from x-pack/plugins/security_solution/public/flyout/right/utils/analyzer_helpers.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/right/utils/analyzer_helpers.ts index 92003f2761e85..15492f7e41377 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/utils/analyzer_helpers.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/utils/analyzer_helpers.ts @@ -7,7 +7,7 @@ import React from 'react'; import type { Node } from '@elastic/eui/src/components/tree_view/tree_view'; import { EuiToken } from '@elastic/eui'; -import type { StatsNode } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import type { StatsNode } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; /** * Helper function to recursively create ancestor tree nodes diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/cell_tooltip_wrapper.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/components/cell_tooltip_wrapper.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/components/cell_tooltip_wrapper.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/components/cell_tooltip_wrapper.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/constants/event_kinds.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/event_kinds.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/constants/event_kinds.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/event_kinds.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/constants/field_names.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/field_names.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/constants/field_names.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/constants/field_names.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/context/url_sync.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/context/url_sync.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/context/url_sync.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/context/url_sync.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/expandable_flyout_state_from_event_meta.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/expandable_flyout_state_from_event_meta.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/url/expandable_flyout_state_from_event_meta.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/expandable_flyout_state_from_event_meta.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url.tsx index c78aecf44d84e..97e2500f3f948 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/url/use_sync_flyout_state_with_url.tsx @@ -9,7 +9,7 @@ import { useCallback, useRef } from 'react'; import type { ExpandableFlyoutApi, ExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { useSyncToUrl } from '@kbn/url-state'; import last from 'lodash/last'; -import { URL_PARAM_KEY } from '../../../../common/hooks/use_url_state'; +import { URL_PARAM_KEY } from '../../../../../common/hooks/use_url_state'; export const FLYOUT_URL_PARAM = URL_PARAM_KEY.eventFlyout; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.test.tsx similarity index 73% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.test.tsx index 0a092271e1ddd..159f0ee6a3a0b 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.test.tsx @@ -9,17 +9,17 @@ import type { RenderHookResult } from '@testing-library/react-hooks'; import { renderHook } from '@testing-library/react-hooks'; import type { UseEventDetailsParams, UseEventDetailsResult } from './use_event_details'; import { useEventDetails } from './use_event_details'; -import { useSpaceId } from '../../../common/hooks/use_space_id'; -import { useRouteSpy } from '../../../common/utils/route/use_route_spy'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useTimelineEventsDetails } from '../../../timelines/containers/details'; -import { useGetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import { useSpaceId } from '../../../../common/hooks/use_space_id'; +import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; +import { useGetFieldsData } from '../../../../common/hooks/use_get_fields_data'; -jest.mock('../../../common/hooks/use_space_id'); -jest.mock('../../../common/utils/route/use_route_spy'); -jest.mock('../../../common/containers/sourcerer'); -jest.mock('../../../timelines/containers/details'); -jest.mock('../../../common/hooks/use_get_fields_data'); +jest.mock('../../../../common/hooks/use_space_id'); +jest.mock('../../../../common/utils/route/use_route_spy'); +jest.mock('../../../../common/containers/sourcerer'); +jest.mock('../../../../timelines/containers/details'); +jest.mock('../../../../common/hooks/use_get_fields_data'); const eventId = 'eventId'; const indexName = 'indexName'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts similarity index 77% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts index 0f43743bcab28..8739308d2c3e5 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_event_details.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts @@ -9,16 +9,16 @@ import type { BrowserFields, TimelineEventsDetailsItem } from '@kbn/timelines-pl import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { SecurityPageName } from '@kbn/security-solution-navigation'; import type { DataViewBase } from '@kbn/es-query'; -import type { RunTimeMappings } from '../../../../common/api/search_strategy'; -import { useSpaceId } from '../../../common/hooks/use_space_id'; -import { getAlertIndexAlias } from '../../../timelines/components/side_panel/event_details/helpers'; -import { useRouteSpy } from '../../../common/utils/route/use_route_spy'; -import { SourcererScopeName } from '../../../common/store/sourcerer/model'; -import { useSourcererDataView } from '../../../common/containers/sourcerer'; -import { useTimelineEventsDetails } from '../../../timelines/containers/details'; -import { useGetFieldsData } from '../../../common/hooks/use_get_fields_data'; -import type { SearchHit } from '../../../../common/search_strategy'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { RunTimeMappings } from '../../../../../common/api/search_strategy'; +import { useSpaceId } from '../../../../common/hooks/use_space_id'; +import { getAlertIndexAlias } from '../../../../timelines/components/side_panel/event_details/helpers'; +import { useRouteSpy } from '../../../../common/utils/route/use_route_spy'; +import { SourcererScopeName } from '../../../../common/store/sourcerer/model'; +import { useSourcererDataView } from '../../../../common/containers/sourcerer'; +import { useTimelineEventsDetails } from '../../../../timelines/containers/details'; +import { useGetFieldsData } from '../../../../common/hooks/use_get_fields_data'; +import type { SearchHit } from '../../../../../common/search_strategy'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; export interface UseEventDetailsParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_prevalence.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_prevalence.ts similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_prevalence.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_prevalence.ts index 3a0f5f824f4b2..206defb990233 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_prevalence.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_prevalence.ts @@ -10,10 +10,10 @@ import type { IEsSearchRequest } from '@kbn/data-plugin/public'; import { useQuery } from '@tanstack/react-query'; import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { createFetchData } from '../utils/fetch_data'; -import { useKibana } from '../../../common/lib/kibana'; -import { useTimelineDataFilters } from '../../../timelines/containers/use_timeline_data_filters'; -import { isActiveTimeline } from '../../../helpers'; -import { SourcererScopeName } from '../../../common/store/sourcerer/model'; +import { useKibana } from '../../../../common/lib/kibana'; +import { useTimelineDataFilters } from '../../../../timelines/containers/use_timeline_data_filters'; +import { isActiveTimeline } from '../../../../helpers'; +import { SourcererScopeName } from '../../../../common/store/sourcerer/model'; const QUERY_KEY = 'useFetchFieldValuePairWithAggregation'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx index 27d0e83b34b1a..9291b5e9a0c1a 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.test.tsx @@ -12,9 +12,9 @@ import type { UseFetchRelatedAlertsByAncestryResult, } from './use_fetch_related_alerts_by_ancestry'; import { useFetchRelatedAlertsByAncestry } from './use_fetch_related_alerts_by_ancestry'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence_from_process_tree'); +jest.mock('../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'); const documentId = 'documentId'; const indices = ['index1']; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.ts similarity index 90% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.ts index 5dd4a2da67e70..73415c880a3c1 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_ancestry.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_ancestry.ts @@ -6,8 +6,8 @@ */ import { useMemo } from 'react'; -import { useAlertPrevalenceFromProcessTree } from '../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; -import { isActiveTimeline } from '../../../helpers'; +import { useAlertPrevalenceFromProcessTree } from '../../../../common/containers/alerts/use_alert_prevalence_from_process_tree'; +import { isActiveTimeline } from '../../../../helpers'; export interface UseFetchRelatedAlertsByAncestryParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx index f4f6bb894eba0..4aaab73af1296 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.test.tsx @@ -12,9 +12,9 @@ import type { UseFetchRelatedAlertsBySameSourceEventResult, } from './use_fetch_related_alerts_by_same_source_event'; import { useFetchRelatedAlertsBySameSourceEvent } from './use_fetch_related_alerts_by_same_source_event'; -import { useAlertPrevalence } from '../../../common/containers/alerts/use_alert_prevalence'; +import { useAlertPrevalence } from '../../../../common/containers/alerts/use_alert_prevalence'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence'); +jest.mock('../../../../common/containers/alerts/use_alert_prevalence'); const originalEventId = 'originalEventId'; const scopeId = 'scopeId'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts index 990c25fed9f26..1946cef3e7de4 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_same_source_event.ts @@ -7,8 +7,8 @@ import { useMemo } from 'react'; import { ANCESTOR_ID } from '../constants/field_names'; -import { useAlertPrevalence } from '../../../common/containers/alerts/use_alert_prevalence'; -import { isActiveTimeline } from '../../../helpers'; +import { useAlertPrevalence } from '../../../../common/containers/alerts/use_alert_prevalence'; +import { isActiveTimeline } from '../../../../helpers'; export interface UseFetchRelatedAlertsBySameSourceEventParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.test.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.test.tsx index dfbe47a258277..6f6f2ea73158f 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.test.tsx @@ -13,9 +13,9 @@ import type { UseFetchRelatedAlertsBySessionResult, } from './use_fetch_related_alerts_by_session'; import { useFetchRelatedAlertsBySession } from './use_fetch_related_alerts_by_session'; -import { useAlertPrevalence } from '../../../common/containers/alerts/use_alert_prevalence'; +import { useAlertPrevalence } from '../../../../common/containers/alerts/use_alert_prevalence'; -jest.mock('../../../common/containers/alerts/use_alert_prevalence'); +jest.mock('../../../../common/containers/alerts/use_alert_prevalence'); const entityId = 'entityId'; const scopeId = 'scopeId'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.ts similarity index 91% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.ts index 1eca3d8d51368..2c70714d07d5b 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_alerts_by_session.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_alerts_by_session.ts @@ -6,8 +6,8 @@ */ import { useMemo } from 'react'; -import { useAlertPrevalence } from '../../../common/containers/alerts/use_alert_prevalence'; -import { isActiveTimeline } from '../../../helpers'; +import { useAlertPrevalence } from '../../../../common/containers/alerts/use_alert_prevalence'; +import { isActiveTimeline } from '../../../../helpers'; import { ENTRY_LEADER_ENTITY_ID } from '../constants/field_names'; export interface UseFetchRelatedAlertsBySessionParams { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_cases.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_cases.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_cases.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_cases.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_cases.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_cases.ts similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_cases.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_cases.ts index 7100f20cf2218..3753152da52ca 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_fetch_related_cases.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_fetch_related_cases.ts @@ -8,8 +8,8 @@ import { useQuery } from '@tanstack/react-query'; import type { GetRelatedCasesByAlertResponse } from '@kbn/cases-plugin/common'; import { useMemo } from 'react'; -import { useKibana } from '../../../common/lib/kibana'; -import { APP_ID } from '../../../../common/constants'; +import { useKibana } from '../../../../common/lib/kibana'; +import { APP_ID } from '../../../../../common/constants'; const QUERY_KEY = 'useFetchRelatedCases'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_highlighted_fields.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_highlighted_fields.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_highlighted_fields.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.ts similarity index 94% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_highlighted_fields.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.ts index f9fa147c8395a..72526c904bbb2 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_highlighted_fields.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.ts @@ -8,11 +8,11 @@ import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; import { find, isEmpty } from 'lodash/fp'; import { ALERT_RULE_TYPE } from '@kbn/rule-data-utils'; -import { isAlertFromEndpointEvent } from '../../../common/utils/endpoint_alert_check'; +import { isAlertFromEndpointEvent } from '../../../../common/utils/endpoint_alert_check'; import { getEventCategoriesFromData, getEventFieldsToDisplay, -} from '../../../common/components/event_details/get_alert_summary_rows'; +} from '../../../../common/components/event_details/get_alert_summary_rows'; export interface UseHighlightedFieldsParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.test.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.test.ts similarity index 85% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.test.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.test.ts index 198129192cdb4..aef75b40f1990 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.test.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.test.ts @@ -11,13 +11,13 @@ import type { UseInvestigationGuideParams, UseInvestigationGuideResult, } from './use_investigation_guide'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; import { mockDataFormattedForFieldBrowser } from '../mocks/mock_data_formatted_for_field_browser'; import { useInvestigationGuide } from './use_investigation_guide'; -jest.mock('../../../timelines/components/side_panel/event_details/helpers'); -jest.mock('../../../detection_engine/rule_management/logic/use_rule_with_fallback'); +jest.mock('../../../../timelines/components/side_panel/event_details/helpers'); +jest.mock('../../../../detection_engine/rule_management/logic/use_rule_with_fallback'); const dataFormattedForFieldBrowser = mockDataFormattedForFieldBrowser; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.ts similarity index 79% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.ts index cc546a43241d2..306cdbbb5d63d 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_investigation_guide.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_investigation_guide.ts @@ -6,9 +6,9 @@ */ import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; -import type { GetBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; -import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; -import { useRuleWithFallback } from '../../../detection_engine/rule_management/logic/use_rule_with_fallback'; +import type { GetBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; +import { useBasicDataFromDetailsData } from '../../../../timelines/components/side_panel/event_details/helpers'; +import { useRuleWithFallback } from '../../../../detection_engine/rule_management/logic/use_rule_with_fallback'; export interface UseInvestigationGuideParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_prevalence.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_prevalence.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_prevalence.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_prevalence.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_prevalence.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_prevalence.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_prevalence.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_prevalence.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx index 32c2cdaf72675..a452e0e3a1686 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.test.tsx @@ -12,13 +12,13 @@ import type { UseShowRelatedAlertsByAncestryResult, } from './use_show_related_alerts_by_ancestry'; import { useShowRelatedAlertsByAncestry } from './use_show_related_alerts_by_ancestry'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; -import { licenseService } from '../../../common/hooks/use_license'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { licenseService } from '../../../../common/hooks/use_license'; import { mockDataFormattedForFieldBrowser } from '../mocks/mock_data_formatted_for_field_browser'; import { mockDataAsNestedObject } from '../mocks/mock_data_as_nested_object'; -jest.mock('../../../common/hooks/use_experimental_features'); -jest.mock('../../../common/hooks/use_license', () => { +jest.mock('../../../../common/hooks/use_experimental_features'); +jest.mock('../../../../common/hooks/use_license', () => { const licenseServiceInstance = { isPlatinumPlus: jest.fn(), }; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.ts similarity index 87% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.ts index c87c93c833f14..9d4434d943e12 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_ancestry.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_ancestry.ts @@ -9,10 +9,10 @@ import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useMemo } from 'react'; import { find } from 'lodash/fp'; import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; -import { isInvestigateInResolverActionEnabled } from '../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; -import { useLicense } from '../../../common/hooks/use_license'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; +import { isInvestigateInResolverActionEnabled } from '../../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { useLicense } from '../../../../common/hooks/use_license'; import { getField } from '../utils'; import { ANCESTOR_ID, RULE_PARAMETERS_INDEX } from '../constants/field_names'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_same_source_event.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_same_source_event.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_same_source_event.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_same_source_event.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_same_source_event.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_same_source_event.ts similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_same_source_event.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_same_source_event.ts index 7d24fd483482f..0d510400d5efe 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_same_source_event.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_same_source_event.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; import { ANCESTOR_ID } from '../constants/field_names'; import { getField } from '../utils'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_session.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_session.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_session.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_session.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_session.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_session.ts similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_session.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_session.ts index 04831584a64a7..81ce4bdb0475c 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_alerts_by_session.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_alerts_by_session.ts @@ -6,7 +6,7 @@ */ import { ENTRY_LEADER_ENTITY_ID } from '../constants/field_names'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; import { getField } from '../utils'; export interface UseShowRelatedAlertsBySessionParams { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.test.tsx similarity index 90% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.test.tsx index 4d31777bdd45f..00a25ed1885aa 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.test.tsx @@ -7,9 +7,9 @@ import { renderHook } from '@testing-library/react-hooks'; -import { useGetUserCasesPermissions } from '../../../common/lib/kibana'; +import { useGetUserCasesPermissions } from '../../../../common/lib/kibana'; import { useShowRelatedCases } from './use_show_related_cases'; -jest.mock('../../../common/lib/kibana'); +jest.mock('../../../../common/lib/kibana'); describe('useShowRelatedCases', () => { it(`should return false if user doesn't have cases read privilege`, () => { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.ts similarity index 86% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.ts index 5e7f5dca29c8e..e469cc2ef155c 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_related_cases.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_related_cases.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useGetUserCasesPermissions } from '../../../common/lib/kibana'; +import { useGetUserCasesPermissions } from '../../../../common/lib/kibana'; /** * Returns true if the user has read privileges for cases, false otherwise diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_suppressed_alerts.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_suppressed_alerts.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_suppressed_alerts.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_suppressed_alerts.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_suppressed_alerts.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_suppressed_alerts.ts similarity index 93% rename from x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_suppressed_alerts.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_suppressed_alerts.ts index 22ed0a0af84a7..f459d83e5f3d4 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/use_show_suppressed_alerts.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_show_suppressed_alerts.ts @@ -6,7 +6,7 @@ */ import { ALERT_SUPPRESSION_DOCS_COUNT } from '@kbn/rule-data-utils'; -import type { GetFieldsData } from '../../../common/hooks/use_get_fields_data'; +import type { GetFieldsData } from '../../../../common/hooks/use_get_fields_data'; export interface ShowSuppressedAlertsParams { /** diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_browser_fields.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_browser_fields.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_browser_fields.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_browser_fields.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_data_as_nested_object.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_data_as_nested_object.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_data_as_nested_object.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_data_as_nested_object.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_data_formatted_for_field_browser.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_data_formatted_for_field_browser.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_data_formatted_for_field_browser.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_data_formatted_for_field_browser.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_flyout_context.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_flyout_context.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_flyout_context.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_flyout_context.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_get_fields_data.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_get_fields_data.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_get_fields_data.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_get_fields_data.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_search_hit.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_search_hit.ts similarity index 92% rename from x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_search_hit.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_search_hit.ts index f140629dabc80..78f6891304b16 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/mocks/mock_search_hit.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/mocks/mock_search_hit.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SearchHit } from '../../../../common/search_strategy'; +import type { SearchHit } from '../../../../../common/search_strategy'; /** * Mock the document result of the search for an alert diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils.test.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils.tsx rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils/build_requests.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/build_requests.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils/build_requests.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/build_requests.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils/fetch_data.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/fetch_data.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils/fetch_data.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/fetch_data.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils/highlighted_fields_helpers.test.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/highlighted_fields_helpers.test.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils/highlighted_fields_helpers.test.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/highlighted_fields_helpers.test.ts diff --git a/x-pack/plugins/security_solution/public/flyout/shared/utils/highlighted_fields_helpers.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/highlighted_fields_helpers.ts similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/shared/utils/highlighted_fields_helpers.ts rename to x-pack/plugins/security_solution/public/flyout/document_details/shared/utils/highlighted_fields_helpers.ts diff --git a/x-pack/plugins/security_solution/public/flyout/index.tsx b/x-pack/plugins/security_solution/public/flyout/index.tsx index c5da39105d929..01034488be659 100644 --- a/x-pack/plugins/security_solution/public/flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/index.tsx @@ -11,22 +11,22 @@ import { type ExpandableFlyoutProps, ExpandableFlyoutProvider, } from '@kbn/expandable-flyout'; -import type { IsolateHostPanelProps } from './isolate_host'; -import { IsolateHostPanel, IsolateHostPanelKey } from './isolate_host'; -import { IsolateHostPanelProvider } from './isolate_host/context'; -import type { RightPanelProps } from './right'; -import { RightPanel, RightPanelKey } from './right'; -import { RightPanelProvider } from './right/context'; -import type { LeftPanelProps } from './left'; -import { LeftPanel, LeftPanelKey } from './left'; -import { LeftPanelProvider } from './left/context'; +import type { IsolateHostPanelProps } from './document_details/isolate_host'; +import { IsolateHostPanel, IsolateHostPanelKey } from './document_details/isolate_host'; +import { IsolateHostPanelProvider } from './document_details/isolate_host/context'; +import type { RightPanelProps } from './document_details/right'; +import { RightPanel, RightPanelKey } from './document_details/right'; +import { RightPanelProvider } from './document_details/right/context'; +import type { LeftPanelProps } from './document_details/left'; +import { LeftPanel, LeftPanelKey } from './document_details/left'; +import { LeftPanelProvider } from './document_details/left/context'; import { SecuritySolutionFlyoutUrlSyncProvider, useSecurityFlyoutUrlSync, -} from './shared/context/url_sync'; -import type { PreviewPanelProps } from './preview'; -import { PreviewPanel, PreviewPanelKey } from './preview'; -import { PreviewPanelProvider } from './preview/context'; +} from './document_details/shared/context/url_sync'; +import type { PreviewPanelProps } from './document_details/preview'; +import { PreviewPanel, PreviewPanelKey } from './document_details/preview'; +import { PreviewPanelProvider } from './document_details/preview/context'; /** * List of all panels that will be used within the document details expandable flyout. diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx deleted file mode 100644 index dccea9feb0d84..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx +++ /dev/null @@ -1,60 +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 { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; -import { render, screen, fireEvent } from '@testing-library/react'; -import { copyToClipboard } from '@elastic/eui'; -import { ShareButton } from './share_button'; -import React from 'react'; -import { SHARE_BUTTON_TEST_ID } from './test_ids'; -import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; - -jest.mock('@elastic/eui', () => ({ - ...jest.requireActual('@elastic/eui'), - copyToClipboard: jest.fn(), - EuiCopy: jest.fn(({ children: functionAsChild }) => functionAsChild(jest.fn())), -})); - -const alertUrl = 'https://example.com/alert'; - -const renderShareButton = () => - render( - - - - ); - -describe('ShareButton', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('renders the share button', () => { - renderShareButton(); - - expect(screen.getByTestId(SHARE_BUTTON_TEST_ID)).toBeInTheDocument(); - }); - - it('copies the alert URL to clipboard', () => { - const syncedFlyoutState = 'flyoutState'; - const query = `?${FLYOUT_URL_PARAM}=${syncedFlyoutState}`; - - Object.defineProperty(window, 'location', { - value: { - search: query, - }, - }); - - renderShareButton(); - - fireEvent.click(screen.getByTestId(SHARE_BUTTON_TEST_ID)); - - expect(copyToClipboard).toHaveBeenCalledWith( - `${alertUrl}&${FLYOUT_URL_PARAM}=${syncedFlyoutState}` - ); - }); -}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx deleted file mode 100644 index 4c5e5a4507c38..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx +++ /dev/null @@ -1,61 +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 { copyToClipboard, EuiButtonEmpty, EuiCopy } from '@elastic/eui'; -import type { FC } from 'react'; -import React from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { i18n } from '@kbn/i18n'; -import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; -import { SHARE_BUTTON_TEST_ID } from './test_ids'; - -interface ShareButtonProps { - /** - * Url retrieved from the kibana.alert.url field of the document - */ - alertUrl: string; -} - -/** - * Puts alertUrl to user's clipboard. If current query string contains synced flyout state, - * it will be appended to the base alertUrl - */ -export const ShareButton: FC = ({ alertUrl }) => { - return ( - - {(copy) => ( - { - // NOTE: currently, it is not possible to have textToCopy computed dynamically. - // so, we are calling copy() here to trigger the ui tooltip, and then override the link manually - copy(); - const query = new URLSearchParams(window.location.search); - const alertDetailsLink = `${alertUrl}&${FLYOUT_URL_PARAM}=${query.get( - FLYOUT_URL_PARAM - )}`; - copyToClipboard(alertDetailsLink); - }} - iconType="share" - data-test-subj={SHARE_BUTTON_TEST_ID} - aria-label={i18n.translate( - 'xpack.securitySolution.flyout.right.header.shareButtonAriaLabel', - { - defaultMessage: 'Share Alert', - } - )} - > - - - )} - - ); -}; - -ShareButton.displayName = 'ShareButton'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.test.tsx deleted file mode 100644 index dac048913c49b..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.test.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import { RightPanelContext } from '../context'; -import { JsonTab } from './json_tab'; -import { JSON_TAB_CONTENT_TEST_ID } from './test_ids'; - -describe('', () => { - it('should render code block component', () => { - const contextValue = { - searchHit: { - some_field: 'some_value', - }, - } as unknown as RightPanelContext; - - const { getByTestId } = render( - - - - ); - - expect(getByTestId(JSON_TAB_CONTENT_TEST_ID)).toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx deleted file mode 100644 index b49bbca6f5705..0000000000000 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { FC } from 'react'; -import React, { memo } from 'react'; -import { JsonView } from '../../../common/components/event_details/json_view'; -import { useRightPanelContext } from '../context'; - -/** - * Json view displayed in the document details expandable flyout right section - */ -export const JsonTab: FC = memo(() => { - const { searchHit } = useRightPanelContext(); - - return ; -}); - -JsonTab.displayName = 'JsonTab'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.stories.tsx new file mode 100644 index 0000000000000..cb6eef6651acc --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.stories.tsx @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { CopyToClipboard } from './copy_to_clipboard'; + +export default { + component: CopyToClipboard, + title: 'Flyout/CopyToClipboard', +}; + +const json = JSON.stringify({ + foo: 'bar', +}); + +export const Default: Story = () => { + return ( + {'Copy'}

} + iconType={'copyClipboard'} + ariaLabel={'Copy'} + /> + ); +}; + +export const WithModifier: Story = () => { + return ( + { + window.alert('modifier'); + return value; + }} + text={

{'Copy'}

} + iconType={'copyClipboard'} + ariaLabel={'Copy'} + /> + ); +}; + +export const MultipleSizes: Story = () => { + return ( + + + {'xs size'}

} + iconType={'copyClipboard'} + size={'xs'} + ariaLabel={'Copy'} + /> +
+ + {'s size'}

} + iconType={'copyClipboard'} + size={'s'} + ariaLabel={'Copy'} + /> +
+ + {'m size'}

} + iconType={'copyClipboard'} + size={'m'} + ariaLabel={'Copy'} + /> +
+
+ ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.test.tsx new file mode 100644 index 0000000000000..1f9c5976f18a9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.test.tsx @@ -0,0 +1,72 @@ +/* + * Copyright 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 { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { render } from '@testing-library/react'; +import React from 'react'; +import type { CopyToClipboardProps } from './copy_to_clipboard'; +import { CopyToClipboard } from './copy_to_clipboard'; + +jest.mock('@elastic/eui', () => ({ + ...jest.requireActual('@elastic/eui'), + copyToClipboard: jest.fn(), + EuiCopy: jest.fn(({ children: functionAsChild }) => functionAsChild(jest.fn())), +})); + +const renderShareButton = (props: CopyToClipboardProps) => + render( + + + + ); + +describe('ShareButton', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render the copy to clipboard button', () => { + const text = 'text'; + + const props = { + rawValue: 'rawValue', + text: {text}, + iconType: 'iconType', + ariaLabel: 'ariaLabel', + 'data-test-subj': 'data-test-subj', + }; + const { getByTestId, getByText } = renderShareButton(props); + + const button = getByTestId('data-test-subj'); + + expect(button).toBeInTheDocument(); + expect(button).toHaveAttribute('aria-label', props.ariaLabel); + expect(button).toHaveAttribute('type', 'button'); + + expect(getByText(text)).toBeInTheDocument(); + }); + + it('should use modifier if provided', () => { + const modifiedFc = jest.fn(); + + const props = { + rawValue: 'rawValue', + modifier: modifiedFc, + text: {'text'}, + iconType: 'iconType', + ariaLabel: 'ariaLabel', + 'data-test-subj': 'data-test-subj', + }; + const { getByTestId } = renderShareButton(props); + + const button = getByTestId('data-test-subj'); + + button.click(); + + expect(modifiedFc).toHaveBeenCalledWith(props.rawValue); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.tsx new file mode 100644 index 0000000000000..550930009c750 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/copy_to_clipboard.tsx @@ -0,0 +1,81 @@ +/* + * Copyright 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 { copyToClipboard, EuiButtonEmpty, EuiCopy } from '@elastic/eui'; +import type { FC, ReactElement } from 'react'; +import React from 'react'; + +export interface CopyToClipboardProps { + /** + * Value to save to the clipboard + */ + rawValue: string; + /** + * Function to modify the raw value before saving to the clipboard + */ + modifier?: (rawValue: string) => string; + /** + * Button main text (next to icon) + */ + text: ReactElement; + /** + * Icon name (value coming from EUI) + */ + iconType: string; + /** + * Button size (values coming from EUI) + */ + size?: 's' | 'm' | 'xs'; + /** + * Aria label value for the button + */ + ariaLabel: string; + /** + Data test subject string for testing + */ + ['data-test-subj']?: string; +} + +/** + * Copy to clipboard component + */ +export const CopyToClipboard: FC = ({ + rawValue, + modifier, + text, + iconType, + size = 'm', + ariaLabel, + 'data-test-subj': dataTestSubj, +}) => { + return ( + + {(copy) => ( + { + copy(); + + if (modifier) { + const modifiedCopyValue = modifier(rawValue); + copyToClipboard(modifiedCopyValue); + } else { + copyToClipboard(rawValue); + } + }} + iconType={iconType} + size={size} + aria-label={ariaLabel} + data-test-subj={dataTestSubj} + > + {text} + + )} + + ); +}; + +CopyToClipboard.displayName = 'CopyToClipboard'; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.stories.tsx new file mode 100644 index 0000000000000..abb5388d6ff97 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.stories.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { FlyoutError } from './flyout_error'; + +export default { + component: FlyoutError, + title: 'Flyout/FlyoutError', +}; + +export const Default: Story = () => { + return ; +}; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx index f0565fe1df43f..e58d586a063b5 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { render } from '@testing-library/react'; import { FlyoutError } from './flyout_error'; -import { FLYOUT_ERROR_TEST_ID } from '../test_ids'; +import { FLYOUT_ERROR_TEST_ID } from './test_ids'; describe('', () => { it('should render error title and body', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx index bda4e581e164b..9ebef345540fe 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_error.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { EuiEmptyPrompt, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { FLYOUT_ERROR_TEST_ID } from '../test_ids'; +import { FLYOUT_ERROR_TEST_ID } from './test_ids'; /** * Use this when you need to show an error state in the flyout diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.stories.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.stories.tsx new file mode 100644 index 0000000000000..1328fcfa92dd1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.stories.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { FlyoutLoading } from './flyout_loading'; + +export default { + component: FlyoutLoading, + title: 'Flyout/FlyoutLoading', +}; + +export const Default: Story = () => { + return ; +}; diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx index d55e85b3e978b..a164db8a6ce01 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { FLYOUT_LOADING_TEST_ID } from '../test_ids'; +import { FLYOUT_LOADING_TEST_ID } from './test_ids'; import { FlyoutLoading } from './flyout_loading'; describe('', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx index 03ecb298c3d18..0c98957dd929b 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/flyout_loading.tsx @@ -8,9 +8,9 @@ import React from 'react'; import { EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; import { css } from '@emotion/react'; -import { FLYOUT_LOADING_TEST_ID } from '../test_ids'; +import { FLYOUT_LOADING_TEST_ID } from './test_ids'; -interface FlyoutLoadingProps { +export interface FlyoutLoadingProps { /** Data test subject string for testing */ diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts index 1e5ed99958b04..3a8ba1cc1759a 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/test_ids.ts @@ -5,8 +5,10 @@ * 2.0. */ -/* Insights section*/ +import { PREFIX } from '../test_ids'; +export const FLYOUT_ERROR_TEST_ID = `${PREFIX}Error` as const; +export const FLYOUT_LOADING_TEST_ID = `${PREFIX}Loading` as const; export const EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID = (dataTestSubj: string) => `${dataTestSubj}ToggleIcon`; export const EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID = (dataTestSubj: string) => diff --git a/x-pack/plugins/security_solution/public/flyout/shared/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/shared/test_ids.ts index 4c0d747afd588..f6e455cff070f 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/shared/test_ids.ts @@ -6,6 +6,3 @@ */ export const PREFIX = 'securitySolutionFlyout' as const; - -export const FLYOUT_ERROR_TEST_ID = `${PREFIX}Error` as const; -export const FLYOUT_LOADING_TEST_ID = `${PREFIX}Loading` as const; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts index a671b1c855f84..6f337adfc35fa 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/automated_response_actions/automated_response_actions.cy.ts @@ -20,7 +20,8 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe( +// FLAKY: https://github.com/elastic/kibana/issues/168340 +describe.skip( 'Automated Response Actions', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { @@ -66,7 +67,8 @@ describe( disableExpandableFlyoutAdvancedSettings(); }); - describe('From alerts', () => { + // FLAKY: https://github.com/elastic/kibana/issues/168427 + describe.skip('From alerts', () => { let ruleId: string; let ruleName: string; @@ -83,7 +85,7 @@ describe( } }); - it.skip('should have generated endpoint and rule', () => { + it('should have generated endpoint and rule', () => { loadPage(APP_ENDPOINTS_PATH); cy.contains(createdHost.hostname).should('exist'); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts index 0c6c64afad492..8e8c989612cbe 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts @@ -32,7 +32,8 @@ import { createEndpointHost } from '../../tasks/create_endpoint_host'; import { deleteAllLoadedEndpointData } from '../../tasks/delete_all_endpoint_data'; import { enableAllPolicyProtections } from '../../tasks/endpoint_policy'; -describe('Endpoints page', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +// FLAKY: https://github.com/elastic/kibana/issues/168284 +describe.skip('Endpoints page', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { let indexedPolicy: IndexedFleetEndpointPolicyResponse; let policy: PolicyData; let createdHost: CreateAndEnrollEndpointHostResponse; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts index d0f9da6280c8d..6a3e7d16040c4 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_role_rbac.cy.ts @@ -47,7 +47,7 @@ describe('When defining a kibana role for Endpoint security access', { tags: '@e 'Host Isolation Perform the "isolate" and "release" response actions.Host Isolation sub-feature privilegeAllNone', 'Process Operations Perform process-related response actions in the response console.Process Operations sub-feature privilegeAllNone', 'File Operations Perform file-related response actions in the response console.File Operations sub-feature privilegeAllNone', - 'Execute Operations Perform script execution on the endpoint.Execute Operations sub-feature privilegeAllNone', + 'Execute Operations Perform script execution response actions in the response console.Execute Operations sub-feature privilegeAllNone', ]); }); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx index af2932e305576..cf7012f901974 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx @@ -191,6 +191,16 @@ export const ProtectionUpdatesLayout = React.memo( [automaticUpdatesEnabled, selectedDate, today] ); + const updateDatepickerSelectedDate = useCallback( + (date: Moment | null) => { + if (date?.isAfter(cutoffDate) && date?.isSameOrBefore(today)) { + setSelectedDate(date || today); + setManifestVersion(date?.format(internalDateFormat) || 'latest'); + } + }, + [cutoffDate, today] + ); + const renderVersionToDeployPicker = () => { return ( <> @@ -216,10 +226,7 @@ export const ProtectionUpdatesLayout = React.memo( selected={selectedDate} maxDate={today} minDate={cutoffDate} - onChange={(date) => { - setSelectedDate(date || today); - setManifestVersion(date?.format(internalDateFormat) || 'latest'); - }} + onChange={updateDatepickerSelectedDate} />
) : ( diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/note_previews/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/note_previews/index.tsx index 2444d3b35addf..db6f02b37cd5f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/note_previews/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/note_previews/index.tsx @@ -112,6 +112,7 @@ function useDeleteNote(noteId: string | null | undefined) { return http.fetch('/api/note', { method: 'DELETE', body: JSON.stringify({ noteId: id }), + version: '2023-10-31', }); }, onSuccess: () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/__mocks__/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/__mocks__/index.tsx similarity index 65% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/__mocks__/index.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/__mocks__/index.tsx index 728f24b11015e..b3820c62d92b9 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/__mocks__/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/__mocks__/index.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { MockDiscoverTabContent } from '../mocks/discover_tab_content'; +import { MockEsqlTabContent } from '../mocks/esql_tab_content'; -export const DiscoverTabContent = MockDiscoverTabContent; +export const EsqlTabContent = MockEsqlTabContent; // eslint-disable-next-line import/no-default-export -export default DiscoverTabContent; +export default EsqlTabContent; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/mock.data.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/mock.data.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/mock.data.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/mock.data.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_histogram_customizations.test.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_histogram_customizations.test.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_histogram_customizations.test.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_histogram_customizations.test.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_histogram_customizations.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_histogram_customizations.tsx similarity index 94% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_histogram_customizations.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_histogram_customizations.tsx index 9ff69adbf4655..65a7f1a977696 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_histogram_customizations.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_histogram_customizations.tsx @@ -14,7 +14,7 @@ import type { CustomizationCallback } from '@kbn/discover-plugin/public'; import type { UnifiedHistogramContainerProps } from '@kbn/unified-histogram-plugin/public'; import { ACTION_GLOBAL_APPLY_FILTER } from '@kbn/unified-search-plugin/public'; import { useCallback } from 'react'; -import { DiscoverInTimelineTrigger } from '../../../../../actions/constants'; +import { EsqlInTimelineTrigger } from '../../../../../actions/constants'; import { useKibana } from '../../../../../common/lib/kibana'; export type WithPreventableEvent = T & { @@ -67,9 +67,7 @@ export const useHistogramCustomization = () => { } if (filters && filters.length > 0) { - const applyFilterTrigger = uiActions.getTrigger( - DiscoverInTimelineTrigger.HISTOGRAM_TRIGGER - ); + const applyFilterTrigger = uiActions.getTrigger(EsqlInTimelineTrigger.HISTOGRAM_TRIGGER); await applyFilterTrigger.exec({ filters, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_search_bar_customizations.tsx similarity index 75% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_search_bar_customizations.tsx index c748357bb24b8..0e74125e5ada4 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_search_bar_customizations.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_search_bar_customizations.tsx @@ -6,18 +6,16 @@ */ import type { CustomizationCallback } from '@kbn/discover-plugin/public'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { useGetStatefulQueryBar } from '../use_get_stateful_query_bar'; export const useSearchBarCustomizations = () => { const { CustomStatefulTopNavKqlQueryBar } = useGetStatefulQueryBar(); - const isDiscoverInTimelineEnabled = useIsExperimentalFeatureEnabled('discoverInTimeline'); const setSearchBarCustomizations: CustomizationCallback = ({ customizations }) => { customizations.set({ id: 'search_bar', CustomSearchBar: CustomStatefulTopNavKqlQueryBar, - hideDataViewPicker: isDiscoverInTimelineEnabled, + hideDataViewPicker: true, }); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_set_discover_customizations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/customizations/use_set_discover_customizations.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/customizations/use_set_discover_customizations.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/index.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.test.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/index.test.tsx diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/index.tsx similarity index 97% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/index.tsx index 97737a8ebfc3b..b3697421906ef 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/index.tsx @@ -181,6 +181,10 @@ export const DiscoverTabContent: FC = ({ timelineId }) if (!savedObjectId) return; if (!status || status === 'draft') return; const latestState = getCombinedDiscoverSavedSearchState(); + const index = latestState?.searchSource.getField('index'); + /* when a new timeline is loaded, a new discover instance is loaded which first emits + * discover's initial state which is then updated in the saved search. We want to avoid that.*/ + if (!index) return; if (!latestState || combinedDiscoverSavedSearchStateRef.current === latestState) return; if (isEqualWith(latestState, savedSearchById, savedSearchComparator)) return; debouncedUpdateSavedSearch(latestState, timelineId); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/discover_tab_content.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/esql_tab_content.tsx similarity index 85% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/discover_tab_content.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/esql_tab_content.tsx index d49c197250bc3..aaa1104233a3a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/discover_tab_content.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/esql_tab_content.tsx @@ -8,10 +8,10 @@ import React from 'react'; import { EmbeddedDiscoverContainer } from '../styles'; -export function MockDiscoverTabContent() { +export function MockEsqlTabContent() { return ( - {'Mock Discover Tab Content'} + {'Mock ESQL Tab Content'} ); } diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/index.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/index.ts similarity index 75% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/index.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/index.ts index b77dbfd0d1e79..91fced5a4b2b0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/mocks/index.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/mocks/index.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { DiscoverInTimelineTrigger } from '../../../../../actions/constants'; -export { MockDiscoverTabContent } from './discover_tab_content'; +import { EsqlInTimelineTrigger } from '../../../../../actions/constants'; +export { MockEsqlTabContent } from './esql_tab_content'; export const mockApplyFilterTrigger = { exec: jest.fn().mockResolvedValue(undefined), @@ -16,7 +16,7 @@ export const mockPreventDefault = jest.fn(); export const mockUIActionsGetTrigger = jest.fn().mockImplementation((triggerName: string) => { switch (triggerName) { - case DiscoverInTimelineTrigger.HISTOGRAM_TRIGGER: + case EsqlInTimelineTrigger.HISTOGRAM_TRIGGER: return mockApplyFilterTrigger; default: return undefined; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/styles.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/styles.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/styles.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/styles.tsx diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/translations.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/translations.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_discover_state.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_discover_state.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_discover_state.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_discover_state.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_get_stateful_query_bar.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_get_stateful_query_bar.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_get_stateful_query_bar.test.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_get_stateful_query_bar.test.tsx diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_get_stateful_query_bar.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_get_stateful_query_bar.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/use_get_stateful_query_bar.tsx rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/use_get_stateful_query_bar.tsx diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/index.test.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/index.test.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/index.test.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/index.test.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/index.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/index.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/index.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/index.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/test_utils.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/test_utils.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/timeline/discover_tab_content/utils/test_utils.ts rename to x-pack/plugins/security_solution/public/timelines/components/timeline/esql_tab_content/utils/test_utils.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx index 71c41b5dd5c9f..2109420b5d6aa 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs_content/index.tsx @@ -15,8 +15,8 @@ import { useDispatch } from 'react-redux'; import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n-react'; +import { useKibana } from '../../../../common/lib/kibana'; import { useAssistantTelemetry } from '../../../../assistant/use_assistant_telemetry'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useConversationStore } from '../../../../assistant/use_conversation_store'; import { useAssistantAvailability } from '../../../../assistant/use_assistant_availability'; import type { SessionViewConfig } from '../../../../../common/types'; @@ -88,6 +88,7 @@ const GraphTab = tabWithSuspense(lazy(() => import('../graph_tab_content'))); const NotesTab = tabWithSuspense(lazy(() => import('../notes_tab_content'))); const PinnedTab = tabWithSuspense(lazy(() => import('../pinned_tab_content'))); const SessionTab = tabWithSuspense(lazy(() => import('../session_tab_content'))); +const EsqlTab = tabWithSuspense(lazy(() => import('../esql_tab_content'))); interface BasicTimelineTab { renderCellValue: (props: CellValueElementProps) => React.ReactNode; rowRenderers: RowRenderer[]; @@ -132,6 +133,7 @@ const ActiveTimelineTab = memo( setConversationId, showTimeline, }) => { + const isEsqlSettingEnabled = useKibana().services.configSettings.ESQLEnabled; const { hasAssistantPrivilege } = useAssistantAvailability(); const getTab = useCallback( (tab: TimelineTabs) => { @@ -179,6 +181,14 @@ const ActiveTimelineTab = memo( timelineId={timelineId} /> + {isEsqlSettingEnabled && ( + + + + )} = ({ sessionViewConfig, timelineDescription, }) => { - const isDiscoverInTimelineEnabled = useIsExperimentalFeatureEnabled('discoverInTimeline'); + const isEsqlSettingEnabled = useKibana().services.configSettings.ESQLEnabled; const { hasAssistantPrivilege } = useAssistantAvailability(); const dispatch = useDispatch(); const getActiveTab = useMemo(() => getActiveTabSelector(), []); @@ -360,13 +370,13 @@ const TabsContentComponent: React.FC = ({ } }, [activeTab, conversationId, reportAssistantInvoked, setActiveTab]); - const setDiscoverAsActiveTab = useCallback(() => { + const setEsqlAsActiveTab = useCallback(() => { dispatch( initializeTimelineSettings({ id: timelineId, }) ); - setActiveTab(TimelineTabs.discover); + setActiveTab(TimelineTabs.esql); }, [setActiveTab, dispatch, timelineId]); useEffect(() => { @@ -389,13 +399,13 @@ const TabsContentComponent: React.FC = ({ {i18n.QUERY_TAB} {showTimeline && } - {isDiscoverInTimelineEnabled && ( + {isEsqlSettingEnabled && ( {i18n.DISCOVER_ESQL_IN_TIMELINE_TAB} esClient.updateByQuery({ index: `${DEFAULT_ALERTS_INDEX}-${spaceId}`, - refresh: false, + refresh: true, body: { script: getUpdateSignalStatusScript(status), query: { @@ -158,7 +158,7 @@ const updateSignalsStatusByQuery = async ( esClient.updateByQuery({ index: `${DEFAULT_ALERTS_INDEX}-${spaceId}`, conflicts: options.conflicts, - refresh: false, + refresh: true, body: { script: getUpdateSignalStatusScript(status), query: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/set_alert_tags_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/set_alert_tags_route.ts index 36d3e57169cce..8b7e81f9bf812 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/set_alert_tags_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/set_alert_tags_route.ts @@ -100,7 +100,7 @@ export const setAlertTagsRoute = (router: SecuritySolutionPluginRouter) => { try { const body = await esClient.updateByQuery({ index: `${DEFAULT_ALERTS_INDEX}-${spaceId}`, - refresh: false, + refresh: true, body: { script: painlessScript, query: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.test.ts index deb182e6860dd..8ab76fe55bdf9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { IndicesGetFieldMappingResponse } from '@elastic/elasticsearch/lib/api/types'; +import type { FieldCapsResponse } from '@elastic/elasticsearch/lib/api/types'; import type { RuleExecutorServicesMock } from '@kbn/alerting-plugin/server/mocks'; import { alertsMock } from '@kbn/alerting-plugin/server/mocks'; import { ruleExecutionLogMock } from '../../../rule_monitoring/mocks'; @@ -14,52 +14,40 @@ import { getAllowedFieldsForTermQuery, } from './get_allowed_fields_for_terms_query'; -const indexMapping = { - 'source-index': { - mappings: { - 'host.name': { - full_name: 'host.name', - mapping: { - name: { - type: 'keyword', - }, - }, - }, - 'url.full': { - full_name: 'url.full', - mapping: { - full: { - type: 'keyword', - }, - }, +const fieldsCapsResponse: FieldCapsResponse = { + indices: ['source-index', 'other-source-index'], + fields: { + 'url.full': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, }, - 'source.range': { - full_name: 'source.range', - mapping: { - range: { - type: 'ip_range', - }, - }, + }, + 'host.name': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, }, }, - }, - 'other-source-index': { - mappings: { - 'host.name': { - full_name: 'host.name', - mapping: { - name: { - type: 'keyword', - }, - }, + 'host.ip': { + ip: { + type: 'ip', + metadata_field: false, + searchable: true, + aggregatable: true, }, - 'host.ip': { - full_name: 'host.ip', - mapping: { - name: { - type: 'ip', - }, - }, + }, + 'source.range': { + ip_range: { + type: 'ip_range', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['source-index'], }, }, }, @@ -68,9 +56,12 @@ const indexMapping = { describe('get_allowed_fields_for_terms_query copy', () => { describe('getAllowedFieldForTermQueryFromMapping', () => { it('should return map of fields allowed for term query', () => { - const result = getAllowedFieldForTermQueryFromMapping( - indexMapping as IndicesGetFieldMappingResponse - ); + const result = getAllowedFieldForTermQueryFromMapping(fieldsCapsResponse, [ + 'host.ip', + 'url.full', + 'host.name', + 'source.range', + ]); expect(result).toEqual({ 'host.ip': true, 'url.full': true, @@ -78,21 +69,25 @@ describe('get_allowed_fields_for_terms_query copy', () => { }); }); it('should disable fields if in one index type not supported', () => { - const result = getAllowedFieldForTermQueryFromMapping({ - 'new-source-index': { - mappings: { + const result = getAllowedFieldForTermQueryFromMapping( + { + ...fieldsCapsResponse, + fields: { + ...fieldsCapsResponse.fields, 'host.name': { - full_name: 'host.name', - mapping: { - name: { - type: 'text', - }, + ...fieldsCapsResponse.fields['host.name'], + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['new-source-index'], }, }, }, }, - ...indexMapping, - } as IndicesGetFieldMappingResponse); + ['host.ip', 'url.full', 'host.name', 'source.range'] + ); expect(result).toEqual({ 'host.ip': true, 'url.full': true, @@ -106,16 +101,16 @@ describe('get_allowed_fields_for_terms_query copy', () => { beforeEach(() => { alertServices = alertsMock.createRuleExecutorServices(); - alertServices.scopedClusterClient.asCurrentUser.indices.getFieldMapping.mockResolvedValue( - indexMapping as IndicesGetFieldMappingResponse + alertServices.scopedClusterClient.asCurrentUser.fieldCaps.mockResolvedValue( + fieldsCapsResponse ); ruleExecutionLogger = ruleExecutionLogMock.forExecutors.create(); }); it('should return map of fields allowed for term query for source and threat indices', async () => { const threatMatchedFields = { - source: ['host.name', 'url.full'], - threat: ['host.name', 'url.full'], + source: ['host.name', 'url.full', 'host.ip'], + threat: ['host.name', 'url.full', 'host.ip'], }; const threatIndex = ['threat-index']; const inputIndex = ['source-index']; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.ts index bde234e2bdc20..4e1c50c72745c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/get_allowed_fields_for_terms_query.ts @@ -5,39 +5,34 @@ * 2.0. */ -import type { IndicesGetFieldMappingResponse } from '@elastic/elasticsearch/lib/api/types'; +import type { FieldCapsResponse } from '@elastic/elasticsearch/lib/api/types'; import type { AllowedFieldsForTermsQuery, GetAllowedFieldsForTermQuery } from './types'; -const allowedFieldTypes = ['keyword', 'constant_keyword', 'wildcard', 'ip']; +const allowedFieldTypesSet = new Set(['keyword', 'constant_keyword', 'wildcard', 'ip']); /* * Return map of fields allowed for term query */ export const getAllowedFieldForTermQueryFromMapping = ( - indexMapping: IndicesGetFieldMappingResponse + fieldsCapsResponse: FieldCapsResponse, + fields: string[] ): Record => { - const result: Record = {}; - const notAllowedFields: string[] = []; + const fieldsCaps = fieldsCapsResponse.fields; - const indices = Object.values(indexMapping); - indices.forEach((index) => { - Object.entries(index.mappings).forEach(([field, fieldValue]) => { - Object.values(fieldValue.mapping).forEach((mapping) => { - const fieldType = mapping?.type; - if (!fieldType) return; + const availableFields = fields.filter((field) => { + const fieldCaps = fieldsCaps[field]; - if (allowedFieldTypes.includes(fieldType) && !notAllowedFields.includes(field)) { - result[field] = true; - } else { - notAllowedFields.push(field); - // if we the field allowed in one index, but not allowed in another, we should delete it from result - delete result[field]; - } - }); + const isAllVariationsAllowed = Object.values(fieldCaps).every((fieldCapByType) => { + return allowedFieldTypesSet.has(fieldCapByType.type); }); + + return isAllVariationsAllowed; }); - return result; + return availableFields.reduce>((acc, field) => { + acc[field] = true; + return acc; + }, {}); }; /** @@ -53,19 +48,25 @@ export const getAllowedFieldsForTermQuery = async ({ let allowedFieldsForTermsQuery = { source: {}, threat: {} }; try { const [sourceFieldsMapping, threatFieldsMapping] = await Promise.all([ - services.scopedClusterClient.asCurrentUser.indices.getFieldMapping({ + services.scopedClusterClient.asCurrentUser.fieldCaps({ index: inputIndex, fields: threatMatchedFields.source, }), - services.scopedClusterClient.asCurrentUser.indices.getFieldMapping({ + services.scopedClusterClient.asCurrentUser.fieldCaps({ index: threatIndex, fields: threatMatchedFields.threat, }), ]); allowedFieldsForTermsQuery = { - source: getAllowedFieldForTermQueryFromMapping(sourceFieldsMapping), - threat: getAllowedFieldForTermQueryFromMapping(threatFieldsMapping), + source: getAllowedFieldForTermQueryFromMapping( + sourceFieldsMapping, + threatMatchedFields.source + ), + threat: getAllowedFieldForTermQueryFromMapping( + threatFieldsMapping, + threatMatchedFields.threat + ), }; } catch (e) { ruleExecutionLogger.debug(`Can't get allowed fields for terms query: ${e}`); diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/routes/risk_score_calculation_route.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/routes/risk_score_calculation_route.ts index 75c88678fd070..1b02c4a10fd25 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/routes/risk_score_calculation_route.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/routes/risk_score_calculation_route.ts @@ -23,14 +23,14 @@ export const riskScoreCalculationRoute = (router: SecuritySolutionPluginRouter, router.versioned .post({ path: RISK_SCORE_CALCULATION_URL, - access: 'public', + access: 'internal', options: { tags: ['access:securitySolution', `access:${APP_ID}-entity-analytics`], }, }) .addVersion( { - version: '2023-10-31', + version: '1', validate: { request: { body: buildRouteValidation(riskScoreCalculationRequestSchema) } }, }, async (context, request, response) => { diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index de11312c2f60e..a31135f79356d 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -177,6 +177,7 @@ "@kbn/core-application-common", "@kbn/openapi-generator", "@kbn/es", - "@kbn/react-kibana-mount" + "@kbn/react-kibana-mount", + "@kbn/unified-doc-viewer-plugin" ] } diff --git a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts index 62acff6857a8e..3dcb800dc7a74 100644 --- a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts +++ b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts @@ -22,6 +22,7 @@ export const PLI_APP_FEATURES: PliAppFeatures = { AppFeatureKey.investigationGuide, AppFeatureKey.threatIntelligence, AppFeatureKey.casesConnectors, + AppFeatureKey.externalRuleActions, ], }, endpoint: { diff --git a/x-pack/plugins/security_solution_serverless/kibana.jsonc b/x-pack/plugins/security_solution_serverless/kibana.jsonc index 3756c1114c009..975aaebe45af8 100644 --- a/x-pack/plugins/security_solution_serverless/kibana.jsonc +++ b/x-pack/plugins/security_solution_serverless/kibana.jsonc @@ -19,7 +19,8 @@ "serverless", "taskManager", "cloud", - "fleet" + "fleet", + "actions" ], "optionalPlugins": [ "securitySolutionEss" diff --git a/x-pack/plugins/security_solution_serverless/server/plugin.ts b/x-pack/plugins/security_solution_serverless/server/plugin.ts index fc77d2829d9f4..99f9fbf4a1e7b 100644 --- a/x-pack/plugins/security_solution_serverless/server/plugin.ts +++ b/x-pack/plugins/security_solution_serverless/server/plugin.ts @@ -32,6 +32,7 @@ import { endpointMeteringService, setEndpointPackagePolicyServerlessFlag, } from './endpoint/services'; +import { enableRuleActions } from './rules/enable_rule_actions'; export class SecuritySolutionServerlessPlugin implements @@ -54,6 +55,7 @@ export class SecuritySolutionServerlessPlugin public setup(coreSetup: CoreSetup, pluginsSetup: SecuritySolutionServerlessPluginSetupDeps) { this.config = createConfig(this.initializerContext, pluginsSetup.securitySolution); + const enabledAppFeatures = getProductAppFeatures(this.config.productTypes); // securitySolutionEss plugin should always be disabled when securitySolutionServerless is enabled. // This check is an additional layer of security to prevent double registrations when @@ -63,12 +65,14 @@ export class SecuritySolutionServerlessPlugin const productTypesStr = JSON.stringify(this.config.productTypes, null, 2); this.logger.info(`Security Solution running with product types:\n${productTypesStr}`); const appFeaturesConfigurator = getProductAppFeaturesConfigurator( - getProductAppFeatures(this.config.productTypes), + enabledAppFeatures, this.config ); pluginsSetup.securitySolution.setAppFeaturesConfigurator(appFeaturesConfigurator); } + enableRuleActions({ actions: pluginsSetup.actions, appFeatureKeys: enabledAppFeatures }); + this.cloudSecurityUsageReportingTask = new SecurityUsageReportingTask({ core: coreSetup, logFactory: this.initializerContext.logger, diff --git a/x-pack/plugins/security_solution_serverless/server/rules/enable_rule_actions.ts b/x-pack/plugins/security_solution_serverless/server/rules/enable_rule_actions.ts new file mode 100644 index 0000000000000..45e851540b286 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/server/rules/enable_rule_actions.ts @@ -0,0 +1,40 @@ +/* + * Copyright 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 { AppFeatureSecurityKey } from '@kbn/security-solution-features/keys'; +import { + IndexConnectorTypeId, + SlackWebhookConnectorTypeId, + EmailConnectorTypeId, +} from '@kbn/stack-connectors-plugin/server/connector_types'; +import { EnabledActionTypes } from '@kbn/actions-plugin/server/config'; +import type { AppFeatureKeys } from '@kbn/security-solution-features/src/types'; + +import type { PluginSetupContract as ActionsPluginSetupContract } from '@kbn/actions-plugin/server'; + +const INTERNAL_RULE_ACTIONS = [ + IndexConnectorTypeId, + SlackWebhookConnectorTypeId, + EmailConnectorTypeId, +]; + +/** + * enable rule actions based on AppFeature Config + */ +export const enableRuleActions = ({ + actions, + appFeatureKeys, +}: { + actions: ActionsPluginSetupContract; + appFeatureKeys: AppFeatureKeys; +}) => { + if (appFeatureKeys.includes(AppFeatureSecurityKey.externalRuleActions)) { + // enables all rule actions + actions.setEnabledConnectorTypes([EnabledActionTypes.Any]); + } else { + actions.setEnabledConnectorTypes(INTERNAL_RULE_ACTIONS); + } +}; diff --git a/x-pack/plugins/security_solution_serverless/server/types.ts b/x-pack/plugins/security_solution_serverless/server/types.ts index 6f9c87dd92b18..44a86f534ebdf 100644 --- a/x-pack/plugins/security_solution_serverless/server/types.ts +++ b/x-pack/plugins/security_solution_serverless/server/types.ts @@ -18,6 +18,7 @@ import type { import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { SecuritySolutionEssPluginSetup } from '@kbn/security-solution-ess/server'; import type { FleetStartContract } from '@kbn/fleet-plugin/server'; +import type { PluginSetupContract as ActionsPluginSetupContract } from '@kbn/actions-plugin/server'; import type { ServerlessPluginSetup } from '@kbn/serverless/server'; import type { ProductTier } from '../common/product'; @@ -37,6 +38,7 @@ export interface SecuritySolutionServerlessPluginSetupDeps { features: PluginSetupContract; taskManager: TaskManagerSetupContract; cloud: CloudSetup; + actions: ActionsPluginSetupContract; } export interface SecuritySolutionServerlessPluginStartDeps { diff --git a/x-pack/plugins/security_solution_serverless/tsconfig.json b/x-pack/plugins/security_solution_serverless/tsconfig.json index 77481caa489fb..ef6c4009f345e 100644 --- a/x-pack/plugins/security_solution_serverless/tsconfig.json +++ b/x-pack/plugins/security_solution_serverless/tsconfig.json @@ -44,6 +44,8 @@ "@kbn/usage-collection-plugin", "@kbn/cloud-defend-plugin", "@kbn/core-logging-server-mocks", - "@kbn/shared-ux-chrome-navigation" + "@kbn/shared-ux-chrome-navigation", + "@kbn/stack-connectors-plugin", + "@kbn/actions-plugin" ] } diff --git a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx index d65011200b90d..47e459c9c8cea 100644 --- a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx +++ b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx @@ -45,9 +45,25 @@ const navigationTree: NavigationTreeDefinition = { return pathNameSerialized.startsWith(prepend('/app/dashboards')); }, }, + { + title: i18n.translate('xpack.serverlessObservability.nav.visualizations', { + defaultMessage: 'Visualizations', + }), + link: 'visualize', + getIsActive: ({ pathNameSerialized, prepend }) => { + return ( + pathNameSerialized.startsWith(prepend('/app/visualize')) || + pathNameSerialized.startsWith(prepend('/app/lens')) || + pathNameSerialized.startsWith(prepend('/app/maps')) + ); + }, + }, { link: 'observability-overview:alerts', }, + { + link: 'observability-overview:cases', + }, { link: 'observability-overview:slos', }, @@ -151,36 +167,19 @@ const navigationTree: NavigationTreeDefinition = { id: 'groups-spacer-2', isGroupTitle: true, }, - { - link: 'observability-overview:cases', - }, - { - title: i18n.translate('xpack.serverlessObservability.nav.visualizations', { - defaultMessage: 'Visualizations', - }), - link: 'visualize', - getIsActive: ({ pathNameSerialized, prepend }) => { - return ( - pathNameSerialized.startsWith(prepend('/app/visualize')) || - pathNameSerialized.startsWith(prepend('/app/lens')) || - pathNameSerialized.startsWith(prepend('/app/maps')) - ); - }, - }, - { - id: 'groups-spacer-3', - isGroupTitle: true, - }, - { - title: i18n.translate('xpack.serverlessObservability.nav.getStarted', { - defaultMessage: 'Add data', - }), - link: 'observabilityOnboarding', - }, ], }, ], footer: [ + { + type: 'navGroup', + title: i18n.translate('xpack.serverlessObservability.nav.getStarted', { + defaultMessage: 'Get Started', + }), + link: 'observabilityOnboarding', + isGroupTitle: true, + icon: 'launch', + }, { type: 'navGroup', id: 'devTools', diff --git a/x-pack/plugins/serverless_search/public/application/components/api_key/api_key.tsx b/x-pack/plugins/serverless_search/public/application/components/api_key/api_key.tsx index 164bdacd5f985..e3aecb517f947 100644 --- a/x-pack/plugins/serverless_search/public/application/components/api_key/api_key.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/api_key/api_key.tsx @@ -82,7 +82,7 @@ export const ApiKeyPanel = ({ setClientApiKey }: { setClientApiKey: (value: stri

{i18n.translate('xpack.serverlessSearch.apiKey.panel.title', { - defaultMessage: 'Prepare an API Key', + defaultMessage: 'Add an API Key', })}

@@ -90,7 +90,7 @@ export const ApiKeyPanel = ({ setClientApiKey }: { setClientApiKey: (value: stri {i18n.translate('xpack.serverlessSearch.apiKey.panel.description', { defaultMessage: - 'An API key is a private, unique identifier for authentication and authorization.', + 'Use an existing key, or create a new one and copy it somewhere safe.', })} diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/go.ts b/x-pack/plugins/serverless_search/public/application/components/languages/go.ts index 0ef4dc483ad53..d92195ad6d82e 100644 --- a/x-pack/plugins/serverless_search/public/application/components/languages/go.ts +++ b/x-pack/plugins/serverless_search/public/application/components/languages/go.ts @@ -23,7 +23,7 @@ fmt.Println(searchResp, err)`, "fmt" "log" "strings" -​ + "github.com/elastic/elasticsearch-serverless-go" ) @@ -69,10 +69,10 @@ fmt.Println(ingestResult, err)`, "fmt" "log" "strings" -​ + "github.com/elastic/elasticsearch-serverless-go" ) -​ + func main() { cfg := elasticsearch.Config{ Address: "${url}", @@ -88,7 +88,7 @@ func main() { { "index": { "_id": "1"}} {"name": "foo", "title": "bar"}\n\`)). Do(context.Background()) - ​ + fmt.Println(res, err) }`, installClient: 'go get -u github.com/elastic/elasticsearch-serverless-go@latest', diff --git a/x-pack/plugins/serverless_search/public/application/components/languages/python.ts b/x-pack/plugins/serverless_search/public/application/components/languages/python.ts index ac4ab3d7792b4..dbed5f124e617 100644 --- a/x-pack/plugins/serverless_search/public/application/components/languages/python.ts +++ b/x-pack/plugins/serverless_search/public/application/components/languages/python.ts @@ -14,7 +14,7 @@ export const pythonDefinition: LanguageDefinition = { apiReference: docLinks.pythonApiReference, basicConfig: docLinks.pythonBasicConfig, buildSearchQuery: `client.search(index="books", q="snow")`, - configureClient: ({ url, apiKey }) => `from elasticsearch import Elasticsearch + configureClient: ({ url, apiKey }) => `from elasticsearch_serverless import Elasticsearch client = Elasticsearch( "${url}", @@ -45,7 +45,11 @@ client = Elasticsearch( ] client.bulk(operations=documents)`, - ingestDataIndex: ({ apiKey, url, indexName }) => `from elasticsearch import Elasticsearch + ingestDataIndex: ({ + apiKey, + url, + indexName, + }) => `from elasticsearch_serverless import Elasticsearch client = Elasticsearch( "${url}", @@ -59,10 +63,10 @@ documents = [ client.bulk(operations=documents) `, - installClient: `python -m pip install elasticsearch + installClient: `python -m pip install elasticsearch-serverless # If your application uses async/await in Python you can install with the async extra -# python -m pip install elasticsearch[async] +# python -m pip install elasticsearch_serverless[async] `, name: i18n.translate('xpack.serverlessSearch.languages.python', { defaultMessage: 'Python', diff --git a/x-pack/plugins/serverless_search/public/application/components/overview.test.tsx b/x-pack/plugins/serverless_search/public/application/components/overview.test.tsx index 28748db40cedb..3c59d064d72cc 100644 --- a/x-pack/plugins/serverless_search/public/application/components/overview.test.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/overview.test.tsx @@ -51,7 +51,7 @@ describe('', () => { }); test('api key', () => { const { getByRole } = render(); - expect(getByRole('heading', { level: 2, name: 'Prepare an API Key' })).toBeDefined(); + expect(getByRole('heading', { level: 2, name: 'API Key' })).toBeDefined(); }); test('cloud id', () => { const { getByRole } = render(); diff --git a/x-pack/plugins/serverless_search/public/application/components/overview.tsx b/x-pack/plugins/serverless_search/public/application/components/overview.tsx index bff725c88034d..ed29ac4c14802 100644 --- a/x-pack/plugins/serverless_search/public/application/components/overview.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/overview.tsx @@ -116,12 +116,12 @@ export const ElasticsearchOverview = () => { } links={[]} title={i18n.translate('xpack.serverlessSearch.apiKey.title', { - defaultMessage: 'Prepare an API Key', + defaultMessage: 'API Key', })} /> diff --git a/x-pack/plugins/serverless_search/public/layout/nav.tsx b/x-pack/plugins/serverless_search/public/layout/nav.tsx index b6f1cdbaa56ff..7e050fe4fdc1e 100644 --- a/x-pack/plugins/serverless_search/public/layout/nav.tsx +++ b/x-pack/plugins/serverless_search/public/layout/nav.tsx @@ -30,22 +30,16 @@ const navigationTree: NavigationTreeDefinition = { }, breadcrumbStatus: 'hidden', children: [ - { - id: 'search_getting_started', - title: i18n.translate('xpack.serverlessSearch.nav.gettingStarted', { - defaultMessage: 'Getting started', - }), - link: 'serverlessElasticsearch', - }, { id: 'dev_tools', title: i18n.translate('xpack.serverlessSearch.nav.devTools', { defaultMessage: 'Dev Tools', }), - isGroupTitle: true, + link: 'dev_tools:console', + getIsActive: ({ pathNameSerialized, prepend }) => { + return pathNameSerialized.startsWith(prepend('/app/dev_tools')); + }, }, - { link: 'dev_tools:console' }, - { link: 'dev_tools:searchprofiler' }, { id: 'explore', title: i18n.translate('xpack.serverlessSearch.nav.explore', { @@ -64,6 +58,9 @@ const navigationTree: NavigationTreeDefinition = { }, { link: 'visualize', + title: i18n.translate('xpack.serverlessSearch.nav.visualize', { + defaultMessage: 'Visualizations', + }), getIsActive: ({ pathNameSerialized, prepend }) => { return ( pathNameSerialized.startsWith(prepend('/app/visualize')) || @@ -116,6 +113,15 @@ const navigationTree: NavigationTreeDefinition = { }, ], footer: [ + { + type: 'navGroup', + id: 'search_getting_started', + title: i18n.translate('xpack.serverlessSearch.nav.gettingStarted', { + defaultMessage: 'Getting started', + }), + icon: 'launch', + link: 'serverlessElasticsearch', + }, { type: 'navGroup', id: 'project_settings_project_nav', diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack/slack.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack/slack.tsx index 8fe351407ab92..95c35565e27b5 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack/slack.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack/slack.tsx @@ -39,7 +39,7 @@ export function getConnectorType(): ConnectorTypeModel { page.on('request', (evt) => { if ( evt.resourceType() === 'fetch' && - evt.url().includes(SYNTHETICS_API_URLS.SYNTHETICS_APIKEY) + evt.url().includes(SYNTHETICS_API_URLS.SYNTHETICS_PROJECT_APIKEY) ) { evt .response() diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx index cf4e5532519ed..5fe46b6c52697 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table.tsx @@ -182,7 +182,11 @@ export const TestRunsTable = ({
- +
); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table_header.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table_header.tsx index 3e43f23956180..c703c3b253c85 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table_header.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/test_runs_table_header.tsx @@ -61,6 +61,7 @@ export const TestRunsTableHeader = ({ dispatch(showOnlyFinalAttemptsAction(e.target.checked))} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx index 2a772283c3aff..e03ce1879199e 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx @@ -6,9 +6,10 @@ */ import React, { useEffect, useState } from 'react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { EuiText, EuiLink, EuiEmptyPrompt } from '@elastic/eui'; +import { EuiText, EuiLink, EuiEmptyPrompt, EuiSwitch, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { useFetcher } from '@kbn/observability-shared-plugin/public'; +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; import { HelpCommands } from './help_commands'; import { LoadingState } from '../../monitors_page/overview/overview/monitor_detail_flyout'; import { fetchProjectAPIKey } from '../../../state/monitor_management/api'; @@ -26,22 +27,41 @@ export const ProjectAPIKeys = () => { } = useEnablement(); const [apiKey, setApiKey] = useState(undefined); const [loadAPIKey, setLoadAPIKey] = useState(false); + const [accessToElasticManagedLocations, setAccessToElasticManagedLocations] = useState(true); const kServices = useKibana().services; const canSaveIntegrations: boolean = !!kServices?.fleet?.authz.integrations.writeIntegrationPolicies; - const { data, loading } = useFetcher(async () => { + const canUsePublicLocations = + useKibana().services?.application?.capabilities.uptime.elasticManagedLocationsEnabled ?? true; + + const { data, loading, error } = useFetcher(async () => { if (loadAPIKey) { - return fetchProjectAPIKey(); + return fetchProjectAPIKey(accessToElasticManagedLocations && Boolean(canUsePublicLocations)); } return null; - }, [loadAPIKey]); + }, [loadAPIKey, canUsePublicLocations]); useEffect(() => { - setApiKey(data?.apiKey.encoded); + if (data?.apiKey) { + setApiKey(data?.apiKey.encoded); + } + setLoadAPIKey(false); }, [data]); + useEffect(() => { + if (error) { + const requestError = error as IHttpFetchError; + kServices?.notifications?.toasts.addError(error, { + title: i18n.translate('xpack.synthetics.createApiKey.error', { + defaultMessage: 'Error', + }), + toastMessage: requestError?.body?.message, + }); + } + }, [error, kServices?.notifications?.toasts]); + const canSave: boolean = !!useKibana().services?.application?.capabilities.uptime.save; if (enablementLoading) { @@ -68,6 +88,17 @@ export const ProjectAPIKeys = () => { {LEARN_MORE_LABEL} + + { + setAccessToElasticManagedLocations(!accessToElasticManagedLocations); + }} + disabled={!canUsePublicLocations} + /> ) : ( <> diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_management/api.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_management/api.ts index e67e0b4905a00..251714d8b0642 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_management/api.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/monitor_management/api.ts @@ -6,6 +6,7 @@ */ import { PackagePolicy } from '@kbn/fleet-plugin/common'; +import type { ProjectAPIKeyResponse } from '../../../../../server/routes/monitor_cruds/get_api_key'; import { apiService } from '../../../../utils/api_service'; import { EncryptedSyntheticsMonitor, @@ -61,10 +62,12 @@ export const getDecryptedMonitorAPI = async ({ id }: { id: string }): Promise => { - return await apiService.get(SYNTHETICS_API_URLS.SYNTHETICS_APIKEY); +export const fetchProjectAPIKey = async ( + accessToElasticManagedLocations: boolean +): Promise => { + return await apiService.get(SYNTHETICS_API_URLS.SYNTHETICS_PROJECT_APIKEY, { + accessToElasticManagedLocations, + }); }; export const deletePackagePolicy = async ( diff --git a/x-pack/plugins/synthetics/server/constants/settings.ts b/x-pack/plugins/synthetics/server/constants/settings.ts index 3428cc4433a30..777d75b01a3eb 100644 --- a/x-pack/plugins/synthetics/server/constants/settings.ts +++ b/x-pack/plugins/synthetics/server/constants/settings.ts @@ -8,7 +8,7 @@ import { DynamicSettingsAttributes } from '../runtime_types/settings'; export const DYNAMIC_SETTINGS_DEFAULTS: DynamicSettingsAttributes = { - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', certAgeThreshold: 730, certExpirationThreshold: 30, defaultConnectors: [], diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts index d2c97acb4eba1..e8202e748bd03 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts @@ -213,7 +213,7 @@ describe('getNetworkEvents', () => { "size": 1000, "track_total_hits": true, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/plugins/synthetics/server/lib.test.ts b/x-pack/plugins/synthetics/server/lib.test.ts index 0ce1f79607846..4bc18d3dc5b18 100644 --- a/x-pack/plugins/synthetics/server/lib.test.ts +++ b/x-pack/plugins/synthetics/server/lib.test.ts @@ -42,7 +42,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', ...mockSearchParams, }, { meta: true } @@ -72,7 +72,7 @@ describe('UptimeEsClient', () => { await expect(uptimeEsClient.search(mockSearchParams)).rejects.toThrow(mockError); expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', ...mockSearchParams, }, { meta: true } @@ -90,7 +90,7 @@ describe('UptimeEsClient', () => { expect(esClient.count).toHaveBeenCalledWith(mockCountParams, { meta: true }); expect(result).toEqual({ - indices: 'heartbeat-8*,heartbeat-7*', + indices: 'heartbeat-*', result: { body: {}, headers: { diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts index 0fb8cba181933..e3ca890d1712e 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts @@ -7,7 +7,7 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; -import { SyntheticsRestApiRouteFactory } from '../types'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { ProjectMonitor } from '../../../common/runtime_types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; @@ -51,6 +51,12 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = ( id: DEFAULT_SPACE_ID, }; + const permissionError = await validatePermissions(routeContext, monitors); + + if (permissionError) { + return response.forbidden({ body: { message: permissionError } }); + } + const encryptedSavedObjectsClient = server.encryptedSavedObjects.getClient(); const pushMonitorFormatter = new ProjectMonitorFormatter({ @@ -84,3 +90,30 @@ export const REQUEST_TOO_LARGE = i18n.translate('xpack.synthetics.server.project defaultMessage: 'Delete request payload is too large. Please send a max of 250 monitors to delete per request', }); + +export const validatePermissions = async ( + { server, response, request }: RouteContext, + projectMonitors: ProjectMonitor[] +) => { + const hasPublicLocations = projectMonitors.some(({ locations }) => (locations ?? []).length > 0); + if (!hasPublicLocations) { + return; + } + + const elasticManagedLocationsEnabled = + Boolean( + (await server.coreStart?.capabilities.resolveCapabilities(request)).uptime + .elasticManagedLocationsEnabled + ) ?? true; + if (!elasticManagedLocationsEnabled) { + return ELASTIC_MANAGED_LOCATIONS_DISABLED; + } +}; + +export const ELASTIC_MANAGED_LOCATIONS_DISABLED = i18n.translate( + 'xpack.synthetics.noAccess.publicLocations', + { + defaultMessage: + "You don't have permission to use Elastic managed global locations. Please contact your Kibana administrator.", + } +); diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts index 69960d458c684..c6ff9852b6777 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -8,6 +8,7 @@ import { schema } from '@kbn/config-schema'; import { SavedObjectsUpdateResponse, SavedObject } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './add_monitor_project'; import { getDecryptedMonitor } from '../../saved_objects/synthetics_monitor'; import { getPrivateLocations } from '../../synthetics_service/get_private_locations'; import { mergeSourceMonitor } from './helper'; @@ -254,6 +255,6 @@ export const validatePermissions = async ( .elasticManagedLocationsEnabled ) ?? true; if (!elasticManagedLocationsEnabled) { - return "You don't have permission to use public locations"; + return ELASTIC_MANAGED_LOCATIONS_DISABLED; } }; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts index 481bf6b1b542c..0dab70565aeea 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts @@ -4,19 +4,51 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { schema } from '@kbn/config-schema'; +import { SecurityCreateApiKeyResponse } from '@elastic/elasticsearch/lib/api/types'; +import { IKibanaResponse } from '@kbn/core-http-server'; +import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './add_monitor_project'; import { SyntheticsRestApiRouteFactory } from '../types'; -import { generateAPIKey } from '../../synthetics_service/get_api_key'; +import { generateProjectAPIKey } from '../../synthetics_service/get_api_key'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +export interface ProjectAPIKeyResponse { + apiKey: SecurityCreateApiKeyResponse | null; +} + export const getAPIKeySyntheticsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', - path: SYNTHETICS_API_URLS.SYNTHETICS_APIKEY, - validate: {}, - handler: async ({ request, server }): Promise => { - const apiKey = await generateAPIKey({ + path: SYNTHETICS_API_URLS.SYNTHETICS_PROJECT_APIKEY, + validate: { + query: schema.object({ + accessToElasticManagedLocations: schema.maybe(schema.boolean()), + }), + }, + handler: async ({ + request, + server, + response, + }): Promise => { + const { accessToElasticManagedLocations } = request.query; + + if (accessToElasticManagedLocations) { + const elasticManagedLocationsEnabled = + Boolean( + (await server.coreStart?.capabilities.resolveCapabilities(request)).uptime + .elasticManagedLocationsEnabled + ) ?? true; + if (!elasticManagedLocationsEnabled) { + return response.customError({ + body: { message: ELASTIC_MANAGED_LOCATIONS_DISABLED }, + statusCode: 403, + }); + } + } + + const apiKey = await generateProjectAPIKey({ request, server, - projectAPIKey: true, + accessToElasticManagedLocations, }); return { apiKey }; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts index b4b424f018267..ec62eb2c80555 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts @@ -6,6 +6,7 @@ */ import type { SecurityClusterPrivilege, + SecurityCreateApiKeyResponse, SecurityIndexPrivilege, } from '@elastic/elasticsearch/lib/api/types'; import { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server'; @@ -79,11 +80,9 @@ export const getAPIKeyForSyntheticsService = async ({ export const generateAPIKey = async ({ server, request, - projectAPIKey = false, }: { server: SyntheticsServerSetup; request: KibanaRequest; - projectAPIKey?: boolean; }) => { const { security } = server; const isApiKeysEnabled = await security.authc.apiKeys?.areAPIKeysEnabled(); @@ -92,31 +91,6 @@ export const generateAPIKey = async ({ throw new Error('Please enable API keys in kibana to use synthetics service.'); } - if (projectAPIKey) { - /* Exposed to the user. Must create directly with the user */ - return security.authc.apiKeys?.create(request, { - name: 'synthetics-api-key (required for project monitors)', - kibana_role_descriptors: { - uptime_save: { - elasticsearch: {}, - kibana: [ - { - base: [], - spaces: [ALL_SPACES_ID], - feature: { - uptime: ['all'], - }, - }, - ], - }, - }, - metadata: { - description: - 'Created for the Synthetics Agent to be able to communicate with Kibana for generating monitors for projects', - }, - }); - } - const { canEnable } = await hasEnablePermissions(server); if (!canEnable) { throw new SyntheticsForbiddenError(); @@ -135,6 +109,46 @@ export const generateAPIKey = async ({ }); }; +export const generateProjectAPIKey = async ({ + server, + request, + accessToElasticManagedLocations = true, +}: { + server: SyntheticsServerSetup; + request: KibanaRequest; + accessToElasticManagedLocations?: boolean; +}): Promise => { + const { security } = server; + const isApiKeysEnabled = await security.authc.apiKeys?.areAPIKeysEnabled(); + + if (!isApiKeysEnabled) { + throw new Error('Please enable API keys in kibana to use synthetics service.'); + } + + /* Exposed to the user. Must create directly with the user */ + return security.authc.apiKeys?.create(request, { + name: 'synthetics-api-key (required for project monitors)', + kibana_role_descriptors: { + uptime_save: { + elasticsearch: {}, + kibana: [ + { + base: [], + spaces: [ALL_SPACES_ID], + feature: { + uptime: [accessToElasticManagedLocations ? 'all' : 'minimal_all'], + }, + }, + ], + }, + }, + metadata: { + description: + 'Created for the Synthetics Agent to be able to communicate with Kibana for generating monitors for projects', + }, + }); +}; + export const generateAndSaveServiceAPIKey = async ({ server, request, diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index 69002ce27c593..abc8827e31ef7 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -4230,10 +4230,16 @@ } } }, + "has_any_services_per_official_agent": { + "type": "boolean", + "_meta": { + "description": "Indicates whether any service is being monitored. This is determined by checking all officially supported agents within the last day" + } + }, "has_any_services": { "type": "boolean", "_meta": { - "description": "Indicates whether any service is being monitored. This is determined by checking all agents within the last day" + "description": "Indicates whether any service is being monitored within the last day." } }, "version": { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 4631c72af11b2..39c77b0824d27 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -18469,8 +18469,6 @@ "xpack.infra.metrics.alertFlyout.customEquationEditor.fieldLabel": "Champ {name}", "xpack.infra.metrics.alertFlyout.customEquationEditor.filterLabel": "Filtre KQL {name}", "xpack.infra.metrics.alertFlyout.ofExpression.helpTextDetail": "Vous ne trouvez pas un indicateur ? {documentationLink}.", - "xpack.infra.metrics.alerting.anomaly.summaryHigher": "{differential}x plus élevé", - "xpack.infra.metrics.alerting.anomaly.summaryLower": "{differential}x plus bas", "xpack.infra.metrics.alerting.threshold.errorAlertReason": "Elasticsearch a échoué lors de l'interrogation des données pour {metric}", "xpack.infra.metrics.alerting.threshold.firedAlertReason": "{metric} est {currentValue} dans les dernières {duration}{group}. Alerte lorsque {comparator} {threshold}.", "xpack.infra.metrics.alerting.threshold.noDataAlertReason": "{metric} n'a signalé aucune donnée dans les dernières {interval} {group}", @@ -19051,12 +19049,6 @@ "xpack.infra.metrics.alertFlyout.alertOnGroupDisappear": "Me prévenir si un groupe cesse de signaler les données", "xpack.infra.metrics.alertFlyout.alertOnNoData": "M'alerter s'il n'y a aucune donnée", "xpack.infra.metrics.alertFlyout.alertPerRedundantFilterError.docsLink": "les documents", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpText": "Limitez la portée de votre déclenchement d'alerte aux anomalies influencées par certains nœuds.", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpTextExample": "Par exemple : \"my-node-1\" ou \"my-node-*\"", - "xpack.infra.metrics.alertFlyout.anomalyInfluencerFilterPlaceholder": "Tout", - "xpack.infra.metrics.alertFlyout.anomalyJobs.memoryUsage": "Utilisation mémoire", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkIn": "Entrée réseau", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkOut": "Sortie réseau", "xpack.infra.metrics.alertFlyout.conditions": "Conditions", "xpack.infra.metrics.alertFlyout.createAlertPerHelpText": "Créer une alerte pour chaque valeur unique. Par exemple : \"host.id\" ou \"cloud.region\".", "xpack.infra.metrics.alertFlyout.createAlertPerText": "Regrouper les alertes par (facultatif)", @@ -19076,7 +19068,6 @@ "xpack.infra.metrics.alertFlyout.error.equation.invalidCharacters": "Le champ d'équation prend en charge uniquement les caractères suivants : A-Z, +, -, /, *, (, ), ?, !, &, :, |, >, <, =", "xpack.infra.metrics.alertFlyout.error.invalidFilterQuery": "La requête de filtre n'est pas valide.", "xpack.infra.metrics.alertFlyout.error.metricRequired": "L'indicateur est requis.", - "xpack.infra.metrics.alertFlyout.error.mlCapabilitiesRequired": "Impossible de créer une alerte d'anomalie lors que le Machine Learning est désactivé.", "xpack.infra.metrics.alertFlyout.error.thresholdRequired": "Le seuil est requis.", "xpack.infra.metrics.alertFlyout.error.thresholdTypeRequired": "Les seuils doivent contenir un nombre valide.", "xpack.infra.metrics.alertFlyout.error.timeRequred": "La taille de temps est requise.", @@ -19086,13 +19077,6 @@ "xpack.infra.metrics.alertFlyout.expression.metric.popoverTitle": "Indicateur", "xpack.infra.metrics.alertFlyout.expression.metric.selectFieldLabel": "Sélectionner un indicateur", "xpack.infra.metrics.alertFlyout.expression.metric.whenLabel": "Quand", - "xpack.infra.metrics.alertFlyout.expression.severityScore.criticalLabel": "Critique", - "xpack.infra.metrics.alertFlyout.expression.severityScore.descriptionLabel": "Le score de sévérité est supérieur à", - "xpack.infra.metrics.alertFlyout.expression.severityScore.majorLabel": "Majeur", - "xpack.infra.metrics.alertFlyout.expression.severityScore.minorLabel": "Mineur", - "xpack.infra.metrics.alertFlyout.expression.severityScore.popoverTitle": "Score de sévérité", - "xpack.infra.metrics.alertFlyout.expression.severityScore.warningLabel": "Avertissement", - "xpack.infra.metrics.alertFlyout.filterByNodeLabel": "Filtrer par nœud", "xpack.infra.metrics.alertFlyout.filterHelpText": "Utilisez une expression KQL pour limiter la portée de votre déclenchement d'alerte.", "xpack.infra.metrics.alertFlyout.filterLabel": "Filtre (facultatif)", "xpack.infra.metrics.alertFlyout.groupDisappearHelpText": "Activez cette option pour déclencher l’action si un groupe précédemment détecté cesse de signaler des résultats. Ce n’est pas recommandé pour les infrastructures à montée en charge dynamique qui peuvent rapidement lancer ou stopper des nœuds automatiquement.", @@ -19104,18 +19088,6 @@ "xpack.infra.metrics.alertFlyout.warningThreshold": "Avertissement", "xpack.infra.metrics.alerting.alertDetailUrlActionVariableDescription": "Lien vers l’affichage de résolution des problèmes d’alerte pour voir plus de contextes et de détails. La chaîne sera vide si server.publicBaseUrl n'est pas configuré.", "xpack.infra.metrics.alerting.alertStateActionVariableDescription": "État actuel de l'alerte", - "xpack.infra.metrics.alerting.anomaly.defaultActionMessage": "\\{\\{alertName\\}\\} est à l'état \\{\\{context.alertState\\}\\}\n\n\\{\\{context.metric\\}\\} était \\{\\{context.summary\\}\\} que la normale à \\{\\{context.timestamp\\}\\}\n\nValeur typique : \\{\\{context.typical\\}\\}\nValeur réelle : \\{\\{context.actual\\}\\}\n", - "xpack.infra.metrics.alerting.anomaly.fired": "Déclenché", - "xpack.infra.metrics.alerting.anomaly.memoryUsage": "Utilisation mémoire", - "xpack.infra.metrics.alerting.anomaly.networkIn": "Entrée réseau", - "xpack.infra.metrics.alerting.anomaly.networkOut": "Sortie réseau", - "xpack.infra.metrics.alerting.anomalyActualDescription": "Valeur réelle de l'indicateur monitoré au moment de l'anomalie.", - "xpack.infra.metrics.alerting.anomalyInfluencersDescription": "Liste des noms de nœuds ayant influencé l'anomalie.", - "xpack.infra.metrics.alerting.anomalyMetricDescription": "Nom de l'indicateur dans la condition spécifiée.", - "xpack.infra.metrics.alerting.anomalyScoreDescription": "Score de sévérité exact de l'anomalie détectée.", - "xpack.infra.metrics.alerting.anomalySummaryDescription": "Description de l'anomalie, par ex. \"2 x plus élevé.\"", - "xpack.infra.metrics.alerting.anomalyTimestampDescription": "Horodatage du moment où l'anomalie a été détectée.", - "xpack.infra.metrics.alerting.anomalyTypicalDescription": "Valeur typique de l'indicateur monitoré au moment de l'anomalie.", "xpack.infra.metrics.alerting.cloudActionVariableDescription": "Objet cloud défini par ECS s'il est disponible dans la source.", "xpack.infra.metrics.alerting.containerActionVariableDescription": "Objet conteneur défini par ECS s'il est disponible dans la source.", "xpack.infra.metrics.alerting.groupActionVariableDescription": "Nom des données de reporting des groupes. Pour accéder à chaque clé de groupe, utilisez context.groupByKeys.", @@ -19154,8 +19126,6 @@ "xpack.infra.metrics.alerting.valueActionVariableDescription": "Valeur de l'indicateur dans la condition spécifiée. Utilisation : (ctx.value.condition0, ctx.value.condition1, etc...).", "xpack.infra.metrics.alerting.viewInAppUrlActionVariableDescription": "Lien vers la source de l’alerte", "xpack.infra.metrics.alertName": "Seuil de l'indicateur", - "xpack.infra.metrics.anomaly.alertFlyout.alertDescription": "Alerte lorsque le score d'anomalie dépasse un seuil défini.", - "xpack.infra.metrics.anomaly.alertName": "Anomalie d'infrastructure", "xpack.infra.metrics.emptyViewDescription": "Essayez d'ajuster vos heures ou votre filtre.", "xpack.infra.metrics.emptyViewTitle": "Il n'y a aucune donnée à afficher.", "xpack.infra.metrics.expressionItems.components.closablePopoverTitle.closeLabel": "Fermer", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 6f3cb26d77d2b..fb1b151d6f650 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -18483,8 +18483,6 @@ "xpack.infra.metrics.alertFlyout.customEquationEditor.fieldLabel": "フィールド{name}", "xpack.infra.metrics.alertFlyout.customEquationEditor.filterLabel": "KQLフィルター{name}", "xpack.infra.metrics.alertFlyout.ofExpression.helpTextDetail": "メトリックが見つからない場合は、{documentationLink}。", - "xpack.infra.metrics.alerting.anomaly.summaryHigher": "{differential}x高い", - "xpack.infra.metrics.alerting.anomaly.summaryLower": "{differential}x低い", "xpack.infra.metrics.alerting.threshold.errorAlertReason": "{metric}のデータのクエリを試行しているときに、Elasticsearchが失敗しました", "xpack.infra.metrics.alerting.threshold.firedAlertReason": "{metric}は最後の{duration}{group}の{currentValue}です。{comparator} {threshold}のときにアラートを通知します。", "xpack.infra.metrics.alerting.threshold.noDataAlertReason": "{metric}は最後の{interval}{group}でデータがないことを報告しました", @@ -19065,12 +19063,6 @@ "xpack.infra.metrics.alertFlyout.alertOnGroupDisappear": "グループがデータのレポートを停止する場合にアラートで通知する", "xpack.infra.metrics.alertFlyout.alertOnNoData": "データがない場合に通知する", "xpack.infra.metrics.alertFlyout.alertPerRedundantFilterError.docsLink": "ドキュメント", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpText": "アラートトリガーの範囲を、特定のノードの影響を受ける異常に制限します。", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpTextExample": "例:「my-node-1」または「my-node-*」", - "xpack.infra.metrics.alertFlyout.anomalyInfluencerFilterPlaceholder": "すべて", - "xpack.infra.metrics.alertFlyout.anomalyJobs.memoryUsage": "メモリー使用状況", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkIn": "内向きのネットワーク", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkOut": "外向きのネットワーク", "xpack.infra.metrics.alertFlyout.conditions": "条件", "xpack.infra.metrics.alertFlyout.createAlertPerHelpText": "すべての一意の値についてアラートを作成します。例:「host.id」または「cloud.region」。", "xpack.infra.metrics.alertFlyout.createAlertPerText": "アラートのグループ化条件(オプション)", @@ -19090,7 +19082,6 @@ "xpack.infra.metrics.alertFlyout.error.equation.invalidCharacters": "等式フィールドでは次の文字のみを使用できます:A-Z、+、-、/、*、(、)、?、!、&、:、|、>、<、=", "xpack.infra.metrics.alertFlyout.error.invalidFilterQuery": "フィルタークエリは無効です。", "xpack.infra.metrics.alertFlyout.error.metricRequired": "メトリックが必要です。", - "xpack.infra.metrics.alertFlyout.error.mlCapabilitiesRequired": "機械学習が無効なときには、異常アラートを作成できません。", "xpack.infra.metrics.alertFlyout.error.thresholdRequired": "しきい値が必要です。", "xpack.infra.metrics.alertFlyout.error.thresholdTypeRequired": "しきい値には有効な数値を含める必要があります。", "xpack.infra.metrics.alertFlyout.error.timeRequred": "ページサイズが必要です。", @@ -19100,13 +19091,6 @@ "xpack.infra.metrics.alertFlyout.expression.metric.popoverTitle": "メトリック", "xpack.infra.metrics.alertFlyout.expression.metric.selectFieldLabel": "メトリックを選択", "xpack.infra.metrics.alertFlyout.expression.metric.whenLabel": "タイミング", - "xpack.infra.metrics.alertFlyout.expression.severityScore.criticalLabel": "重大", - "xpack.infra.metrics.alertFlyout.expression.severityScore.descriptionLabel": "重要度スコアが超えています", - "xpack.infra.metrics.alertFlyout.expression.severityScore.majorLabel": "高", - "xpack.infra.metrics.alertFlyout.expression.severityScore.minorLabel": "低", - "xpack.infra.metrics.alertFlyout.expression.severityScore.popoverTitle": "重要度スコア", - "xpack.infra.metrics.alertFlyout.expression.severityScore.warningLabel": "警告", - "xpack.infra.metrics.alertFlyout.filterByNodeLabel": "ノードでフィルタリング", "xpack.infra.metrics.alertFlyout.filterHelpText": "KQL式を使用して、アラートトリガーの範囲を制限します。", "xpack.infra.metrics.alertFlyout.filterLabel": "フィルター(任意)", "xpack.infra.metrics.alertFlyout.groupDisappearHelpText": "以前に検出されたグループが結果を報告しなくなった場合は、これを有効にすると、アクションがトリガーされます。自動的に急速にノードを開始および停止することがある動的に拡張するインフラストラクチャーでは、これは推奨されません。", @@ -19118,18 +19102,6 @@ "xpack.infra.metrics.alertFlyout.warningThreshold": "警告", "xpack.infra.metrics.alerting.alertDetailUrlActionVariableDescription": "アラートトラブルシューティングビューにリンクして、さらに詳しい状況や詳細を確認できます。server.publicBaseUrlが構成されていない場合は、空の文字列になります。", "xpack.infra.metrics.alerting.alertStateActionVariableDescription": "現在のアラートの状態", - "xpack.infra.metrics.alerting.anomaly.defaultActionMessage": "\\{\\{alertName\\}\\}は\\{\\{context.alertState\\}\\}の状態です\n\n\\{\\{context.metric\\}\\}は\\{\\{context.timestamp\\}\\}で標準を超える\\{\\{context.summary\\}\\}でした\n\n標準の値:\\{\\{context.typical\\}\\}\n実際の値:\\{\\{context.actual\\}\\}\n", - "xpack.infra.metrics.alerting.anomaly.fired": "実行", - "xpack.infra.metrics.alerting.anomaly.memoryUsage": "メモリー使用状況", - "xpack.infra.metrics.alerting.anomaly.networkIn": "内向きのネットワーク", - "xpack.infra.metrics.alerting.anomaly.networkOut": "外向きのネットワーク", - "xpack.infra.metrics.alerting.anomalyActualDescription": "異常時に監視されたメトリックの実際の値。", - "xpack.infra.metrics.alerting.anomalyInfluencersDescription": "異常に影響したノード名のリスト。", - "xpack.infra.metrics.alerting.anomalyMetricDescription": "指定された条件のメトリック名。", - "xpack.infra.metrics.alerting.anomalyScoreDescription": "検出された異常の正確な重要度スコア。", - "xpack.infra.metrics.alerting.anomalySummaryDescription": "異常の説明。例:「2x高い」", - "xpack.infra.metrics.alerting.anomalyTimestampDescription": "異常が検出された時点のタイムスタンプ。", - "xpack.infra.metrics.alerting.anomalyTypicalDescription": "異常時に監視されたメトリックの標準の値。", "xpack.infra.metrics.alerting.cloudActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたクラウドオブジェクト。", "xpack.infra.metrics.alerting.containerActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたコンテナーオブジェクト。", "xpack.infra.metrics.alerting.groupActionVariableDescription": "データを報告するグループの名前。各グループキーにアクセスするには、context.groupByKeysを使用します。", @@ -19168,8 +19140,6 @@ "xpack.infra.metrics.alerting.valueActionVariableDescription": "指定された条件のメトリックの値。使用方法:(ctx.value.condition0、ctx.value.condition1など)。", "xpack.infra.metrics.alerting.viewInAppUrlActionVariableDescription": "アラートソースにリンク", "xpack.infra.metrics.alertName": "メトリックしきい値", - "xpack.infra.metrics.anomaly.alertFlyout.alertDescription": "異常スコアが定義されたしきい値を超えたときにアラートを発行します。", - "xpack.infra.metrics.anomaly.alertName": "インフラストラクチャーの異常", "xpack.infra.metrics.emptyViewDescription": "期間またはフィルターを調整してみてください。", "xpack.infra.metrics.emptyViewTitle": "表示するデータがありません。", "xpack.infra.metrics.expressionItems.components.closablePopoverTitle.closeLabel": "閉じる", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index bf68bbed82b29..755b723f4dfc5 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -18483,8 +18483,6 @@ "xpack.infra.metrics.alertFlyout.customEquationEditor.fieldLabel": "字段 {name}", "xpack.infra.metrics.alertFlyout.customEquationEditor.filterLabel": "KQL 筛选 {name}", "xpack.infra.metrics.alertFlyout.ofExpression.helpTextDetail": "找不到指标?{documentationLink}。", - "xpack.infra.metrics.alerting.anomaly.summaryHigher": "高 {differential} 倍", - "xpack.infra.metrics.alerting.anomaly.summaryLower": "低 {differential} 倍", "xpack.infra.metrics.alerting.threshold.errorAlertReason": "Elasticsearch 尝试查询 {metric} 的数据时出现故障", "xpack.infra.metrics.alerting.threshold.firedAlertReason": "过去 {duration}{group},{metric} 为 {currentValue}。{comparator} {threshold} 时告警。", "xpack.infra.metrics.alerting.threshold.noDataAlertReason": "对于 {group},{metric} 在过去 {interval}中未报告数据", @@ -19065,12 +19063,6 @@ "xpack.infra.metrics.alertFlyout.alertOnGroupDisappear": "组停止报告数据时提醒我", "xpack.infra.metrics.alertFlyout.alertOnNoData": "没数据时提醒我", "xpack.infra.metrics.alertFlyout.alertPerRedundantFilterError.docsLink": "文档", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpText": "将告警触发的范围限定在特定节点影响的异常。", - "xpack.infra.metrics.alertFlyout.anomalyFilterHelpTextExample": "例如:“my-node-1”或“my-node-*”", - "xpack.infra.metrics.alertFlyout.anomalyInfluencerFilterPlaceholder": "所有内容", - "xpack.infra.metrics.alertFlyout.anomalyJobs.memoryUsage": "内存使用", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkIn": "网络传入", - "xpack.infra.metrics.alertFlyout.anomalyJobs.networkOut": "网络传出", "xpack.infra.metrics.alertFlyout.conditions": "条件", "xpack.infra.metrics.alertFlyout.createAlertPerHelpText": "为每个唯一值创建告警。例如:“host.id”或“cloud.region”。", "xpack.infra.metrics.alertFlyout.createAlertPerText": "告警分组依据(可选)", @@ -19090,7 +19082,6 @@ "xpack.infra.metrics.alertFlyout.error.equation.invalidCharacters": "方程字段仅支持以下字符:A-Z、+、-、/、*、(、)、?、!、&、:、|、>、<、=", "xpack.infra.metrics.alertFlyout.error.invalidFilterQuery": "筛选查询无效。", "xpack.infra.metrics.alertFlyout.error.metricRequired": "“指标”必填。", - "xpack.infra.metrics.alertFlyout.error.mlCapabilitiesRequired": "禁用 Machine Learning 时,无法创建异常告警。", "xpack.infra.metrics.alertFlyout.error.thresholdRequired": "“阈值”必填。", "xpack.infra.metrics.alertFlyout.error.thresholdTypeRequired": "阈值必须包含有效数字。", "xpack.infra.metrics.alertFlyout.error.timeRequred": "“时间大小”必填。", @@ -19100,13 +19091,6 @@ "xpack.infra.metrics.alertFlyout.expression.metric.popoverTitle": "指标", "xpack.infra.metrics.alertFlyout.expression.metric.selectFieldLabel": "选择指标", "xpack.infra.metrics.alertFlyout.expression.metric.whenLabel": "当", - "xpack.infra.metrics.alertFlyout.expression.severityScore.criticalLabel": "紧急", - "xpack.infra.metrics.alertFlyout.expression.severityScore.descriptionLabel": "严重性分数高于", - "xpack.infra.metrics.alertFlyout.expression.severityScore.majorLabel": "重大", - "xpack.infra.metrics.alertFlyout.expression.severityScore.minorLabel": "轻微", - "xpack.infra.metrics.alertFlyout.expression.severityScore.popoverTitle": "严重性分数", - "xpack.infra.metrics.alertFlyout.expression.severityScore.warningLabel": "警告", - "xpack.infra.metrics.alertFlyout.filterByNodeLabel": "按节点筛选", "xpack.infra.metrics.alertFlyout.filterHelpText": "使用 KQL 表达式限制告警触发的范围。", "xpack.infra.metrics.alertFlyout.filterLabel": "筛选(可选)", "xpack.infra.metrics.alertFlyout.groupDisappearHelpText": "启用此选项可在之前检测的组开始不报告任何数据时触发操作。不建议将此选项用于可能会快速自动启动和停止节点的动态扩展基础架构。", @@ -19118,18 +19102,6 @@ "xpack.infra.metrics.alertFlyout.warningThreshold": "警告", "xpack.infra.metrics.alerting.alertDetailUrlActionVariableDescription": "链接到告警故障排除视图获取进一步的上下文和详情。如果未配置 server.publicBaseUrl,这将为空字符串。", "xpack.infra.metrics.alerting.alertStateActionVariableDescription": "告警的当前状态", - "xpack.infra.metrics.alerting.anomaly.defaultActionMessage": "\\{\\{alertName\\}\\} 处于 \\{\\{context.alertState\\}\\} 状态\n\n\\{\\{context.metric\\}\\} 在 \\{\\{context.timestamp\\}\\}比正常\\{\\{context.summary\\}\\}\n\n典型值:\\{\\{context.typical\\}\\}\n实际值:\\{\\{context.actual\\}\\}\n", - "xpack.infra.metrics.alerting.anomaly.fired": "已触发", - "xpack.infra.metrics.alerting.anomaly.memoryUsage": "内存使用", - "xpack.infra.metrics.alerting.anomaly.networkIn": "网络传入", - "xpack.infra.metrics.alerting.anomaly.networkOut": "网络传出", - "xpack.infra.metrics.alerting.anomalyActualDescription": "在发生异常时受监测指标的实际值。", - "xpack.infra.metrics.alerting.anomalyInfluencersDescription": "影响异常的节点名称列表。", - "xpack.infra.metrics.alerting.anomalyMetricDescription": "指定条件中的指标名称。", - "xpack.infra.metrics.alerting.anomalyScoreDescription": "检测到的异常的确切严重性分数。", - "xpack.infra.metrics.alerting.anomalySummaryDescription": "异常的描述,例如“高 2 倍”。", - "xpack.infra.metrics.alerting.anomalyTimestampDescription": "检测到异常时的时间戳。", - "xpack.infra.metrics.alerting.anomalyTypicalDescription": "在发生异常时受监测指标的典型值。", "xpack.infra.metrics.alerting.cloudActionVariableDescription": "ECS 定义的云对象(如果在源中可用)。", "xpack.infra.metrics.alerting.containerActionVariableDescription": "ECS 定义的容器对象(如果在源中可用)。", "xpack.infra.metrics.alerting.groupActionVariableDescription": "报告数据的组名称。为了访问每个组密钥,请使用 context.groupByKeys。", @@ -19168,8 +19140,6 @@ "xpack.infra.metrics.alerting.valueActionVariableDescription": "指定条件中的指标值。用法:(ctx.value.condition0, ctx.value.condition1, 诸如此类)。", "xpack.infra.metrics.alerting.viewInAppUrlActionVariableDescription": "链接到告警源", "xpack.infra.metrics.alertName": "指标阈值", - "xpack.infra.metrics.anomaly.alertFlyout.alertDescription": "当异常分数超过定义的阈值时告警。", - "xpack.infra.metrics.anomaly.alertName": "基础架构异常", "xpack.infra.metrics.emptyViewDescription": "尝试调整您的时间或筛选。", "xpack.infra.metrics.emptyViewTitle": "没有可显示的数据。", "xpack.infra.metrics.expressionItems.components.closablePopoverTitle.closeLabel": "关闭", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/toast_with_circuit_breaker_content.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/toast_with_circuit_breaker_content.tsx new file mode 100644 index 0000000000000..76149e7eef70a --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/toast_with_circuit_breaker_content.tsx @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import React, { useState, useCallback } from 'react'; +import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; + +const seeFullErrorMessage = i18n.translate( + 'xpack.triggersActionsUI.components.toastWithCircuitBreaker.seeFullError', + { + defaultMessage: 'See full error', + } +); + +const hideFullErrorMessage = i18n.translate( + 'xpack.triggersActionsUI.components.toastWithCircuitBreaker.hideFullError', + { + defaultMessage: 'Hide full error', + } +); + +export const ToastWithCircuitBreakerContent: React.FC = ({ children }) => { + const [showDetails, setShowDetails] = useState(false); + + const onToggleShowDetails = useCallback(() => { + setShowDetails((prev) => !prev); + }, []); + + return ( + <> + {showDetails && ( + <> + {children} + + + )} + + + + {showDetails ? hideFullErrorMessage : seeFullErrorMessage} + + + + + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.tsx index 859167ba71cd2..736d8c44ea927 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.tsx @@ -94,12 +94,8 @@ const getValueOfSelectedConnector = ( actionTypeRegistered: ActionTypeModel, allowGroupConnector: string[] = [] ): Array> => { - let selectedConnector = connectors.find((connector) => connector.id === actionItemId); - if (allowGroupConnector.length > 0 && !selectedConnector) { - selectedConnector = connectors.find((connector) => - allowGroupConnector.includes(connector.actionTypeId) - ); - } + const selectedConnector = connectors.find((connector) => connector.id === actionItemId); + if (!selectedConnector) { return []; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.test.tsx index de3a9baf6da8c..889f1269a3d2b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.test.tsx @@ -51,7 +51,7 @@ jest.mock('../../../../common/lib/kibana', () => ({ })); const mockAPIs = { - bulkEnableRules: jest.fn(), + bulkEnableRules: jest.fn().mockResolvedValue({ errors: [] }), bulkDisableRules: jest.fn(), snoozeRule: jest.fn(), unsnoozeRule: jest.fn(), @@ -170,7 +170,6 @@ describe('rule status panel', () => { it('should enable the rule when picking enable in the dropdown', async () => { const rule = mockRule({ enabled: false }); - const bulkEnableRules = jest.fn(); const wrapper = mountWithIntl( { healthColor="primary" statusMessage="Ok" requestRefresh={requestRefresh} - bulkEnableRules={bulkEnableRules} /> ); const actionsElem = wrapper @@ -199,7 +197,7 @@ describe('rule status panel', () => { await nextTick(); }); - expect(bulkEnableRules).toHaveBeenCalledTimes(1); + expect(mockAPIs.bulkEnableRules).toHaveBeenCalledTimes(1); }); it('if rule is already enabled should do nothing when picking enable in the dropdown', async () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.tsx index 7167ad7f9b337..a7b87cc722530 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_status_panel.tsx @@ -126,12 +126,8 @@ export const RuleStatusPanel: React.FC = ({ { - await bulkDisableRules({ ids: [rule.id] }); - }} - enableRule={async () => { - await bulkEnableRules({ ids: [rule.id] }); - }} + disableRule={() => bulkDisableRules({ ids: [rule.id] })} + enableRule={() => bulkEnableRules({ ids: [rule.id] })} snoozeRule={async () => {}} unsnoozeRule={async () => {}} rule={rule} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx index dede9c80d87c8..de2eb91b74c84 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx @@ -10,6 +10,8 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiTitle, EuiFlyoutHeader, EuiFlyout, EuiFlyoutBody, EuiPortal } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { isEmpty } from 'lodash'; +import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; import { Rule, RuleTypeParams, @@ -38,6 +40,14 @@ import { getRuleWithInvalidatedFields } from '../../lib/value_validators'; import { DEFAULT_RULE_INTERVAL } from '../../constants'; import { triggersActionsUiConfig } from '../../../common/lib/config_api'; import { getInitialInterval } from './get_initial_interval'; +import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; + +const defaultCreateRuleErrorMessage = i18n.translate( + 'xpack.triggersActionsUI.sections.ruleAdd.saveErrorNotificationText', + { + defaultMessage: 'Cannot create rule.', + } +); const RuleAdd = ({ consumer, @@ -238,12 +248,17 @@ const RuleAdd = ({ ); return newRule; } catch (errorRes) { - toasts.addDanger( - errorRes.body?.message ?? - i18n.translate('xpack.triggersActionsUI.sections.ruleAdd.saveErrorNotificationText', { - defaultMessage: 'Cannot create rule.', - }) + const message = parseRuleCircuitBreakerErrorMessage( + errorRes.body?.message || defaultCreateRuleErrorMessage ); + toasts.addDanger({ + title: message.summary, + ...(message.details && { + text: toMountPoint( + {message.details} + ), + }), + }); } } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx index 50f8049fc4299..7e937d17f8684 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx @@ -219,9 +219,9 @@ describe('rule_edit', () => { await act(async () => { wrapper.find('[data-test-subj="saveEditedRuleButton"]').last().simulate('click'); }); - expect(useKibanaMock().services.notifications.toasts.addDanger).toHaveBeenCalledWith( - 'Fail message' - ); + expect(useKibanaMock().services.notifications.toasts.addDanger).toHaveBeenCalledWith({ + title: 'Fail message', + }); }); it('should pass in the config into `getRuleErrors`', async () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx index b83d2f068e592..3f1c050fb7e25 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx @@ -26,6 +26,8 @@ import { } from '@elastic/eui'; import { cloneDeep, omit } from 'lodash'; import { i18n } from '@kbn/i18n'; +import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; import { Rule, RuleFlyoutCloseReason, @@ -47,6 +49,14 @@ import { ConfirmRuleClose } from './confirm_rule_close'; import { hasRuleChanged } from './has_rule_changed'; import { getRuleWithInvalidatedFields } from '../../lib/value_validators'; import { triggersActionsUiConfig } from '../../../common/lib/config_api'; +import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; + +const defaultUpdateRuleErrorMessage = i18n.translate( + 'xpack.triggersActionsUI.sections.ruleEdit.saveErrorNotificationText', + { + defaultMessage: 'Cannot update rule.', + } +); const cloneAndMigrateRule = (initialRule: Rule) => { const clonedRule = cloneDeep(omit(initialRule, 'notifyWhen', 'throttle')); @@ -181,12 +191,17 @@ export const RuleEdit = ({ ); } } catch (errorRes) { - toasts.addDanger( - errorRes.body?.message ?? - i18n.translate('xpack.triggersActionsUI.sections.ruleEdit.saveErrorNotificationText', { - defaultMessage: 'Cannot update rule.', - }) + const message = parseRuleCircuitBreakerErrorMessage( + errorRes.body?.message || defaultUpdateRuleErrorMessage ); + toasts.addDanger({ + title: message.summary, + ...(message.details && { + text: toMountPoint( + {message.details} + ), + }), + }); } setIsSaving(false); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx index 488140660f4ea..97c8065c18f21 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx @@ -121,7 +121,15 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ const minDate = useMemo( // If the initial schedule is earlier than now, set minDate to it // Set minDate to now if the initial schedule is in the future - () => moment.min(moment(), moment(initialSchedule?.rRule.dtstart ?? undefined)), + () => + moment + .min(moment(), moment(initialSchedule?.rRule.dtstart ?? undefined)) + // Allow the time on minDate to be earlier than the current time + // This is useful especially when the user is trying to create a recurring schedule + // that starts today, and should start at a time earlier than the current time on future + // occurrences + .hour(0) + .minute(0), [initialSchedule] ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.test.tsx index 56ca543431185..8bfc131639a30 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.test.tsx @@ -12,6 +12,19 @@ import { RuleStatusDropdown, ComponentOpts } from './rule_status_dropdown'; const NOW_STRING = '2020-03-01T00:00:00.000Z'; const SNOOZE_UNTIL = new Date('2020-03-04T00:00:00.000Z'); +jest.mock('../../../../common/lib/kibana', () => ({ + useKibana: () => ({ + services: { + notifications: { + toasts: { + addSuccess: jest.fn(), + addDanger: jest.fn(), + }, + }, + }, + }), +})); + describe('RuleStatusDropdown', () => { const enableRule = jest.fn(); const disableRule = jest.fn(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index b5db4dc6ccabd..145fda4e4addd 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -9,6 +9,8 @@ import React, { useState, useEffect, useCallback } from 'react'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; import type { RuleSnooze } from '@kbn/alerting-plugin/common'; +import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; import { EuiLoadingSpinner, EuiPopover, @@ -20,9 +22,11 @@ import { EuiText, EuiToolTip, } from '@elastic/eui'; +import { useKibana } from '../../../../common/lib/kibana'; import { SnoozePanel } from './rule_snooze'; import { isRuleSnoozed } from '../../../lib'; -import { Rule, SnoozeSchedule } from '../../../../types'; +import { Rule, SnoozeSchedule, BulkOperationResponse } from '../../../../types'; +import { ToastWithCircuitBreakerContent } from '../../../components/toast_with_circuit_breaker_content'; export type SnoozeUnit = 'm' | 'h' | 'd' | 'w' | 'M'; const SNOOZE_END_TIME_FORMAT = 'LL @ LT'; @@ -35,8 +39,8 @@ type DropdownRuleRecord = Pick< export interface ComponentOpts { rule: DropdownRuleRecord; onRuleChanged: () => void; - enableRule: () => Promise; - disableRule: () => Promise; + enableRule: () => Promise; + disableRule: () => Promise; snoozeRule: (snoozeSchedule: SnoozeSchedule) => Promise; unsnoozeRule: (scheduleIds?: string[]) => Promise; isEditable: boolean; @@ -58,6 +62,10 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ const [isEnabled, setIsEnabled] = useState(rule.enabled); const [isSnoozed, setIsSnoozed] = useState(!hideSnoozeOption && isRuleSnoozed(rule)); + const { + notifications: { toasts }, + } = useKibana().services; + useEffect(() => { setIsEnabled(rule.enabled); }, [rule.enabled]); @@ -70,6 +78,25 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ const onClickBadge = useCallback(() => setIsPopoverOpen((isOpen) => !isOpen), [setIsPopoverOpen]); const onClosePopover = useCallback(() => setIsPopoverOpen(false), [setIsPopoverOpen]); + const enableRuleInternal = useCallback(async () => { + const { errors } = await enableRule(); + + if (!errors.length) { + return; + } + + const message = parseRuleCircuitBreakerErrorMessage(errors[0].message); + toasts.addDanger({ + title: message.summary, + ...(message.details && { + text: toMountPoint( + {message.details} + ), + }), + }); + throw new Error(); + }, [enableRule, toasts]); + const onChangeEnabledStatus = useCallback( async (enable: boolean) => { if (rule.enabled === enable) { @@ -78,7 +105,7 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ setIsUpdating(true); try { if (enable) { - await enableRule(); + await enableRuleInternal(); } else { await disableRule(); } @@ -88,7 +115,7 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ setIsUpdating(false); } }, - [rule.enabled, isEnabled, onRuleChanged, enableRule, disableRule] + [rule.enabled, isEnabled, onRuleChanged, enableRuleInternal, disableRule] ); const onSnoozeRule = useCallback( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 9949b51554492..1c40db852e209 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -11,6 +11,8 @@ import { i18n } from '@kbn/i18n'; import { capitalize, isEmpty, isEqual, sortBy } from 'lodash'; import { KueryNode } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; +import { toMountPoint } from '@kbn/kibana-react-plugin/public'; +import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; import React, { lazy, useEffect, @@ -90,6 +92,7 @@ import { useLoadRuleAggregationsQuery } from '../../../hooks/use_load_rule_aggre import { useLoadRuleTypesQuery } from '../../../hooks/use_load_rule_types_query'; import { useLoadRulesQuery } from '../../../hooks/use_load_rules_query'; import { useLoadConfigQuery } from '../../../hooks/use_load_config_query'; +import { ToastWithCircuitBreakerContent } from '../../../components/toast_with_circuit_breaker_content'; import { getConfirmDeletionButtonText, @@ -550,15 +553,15 @@ export const RulesList = ({ }; const onDisableRule = useCallback( - async (rule: RuleTableItem) => { - await bulkDisableRules({ http, ids: [rule.id] }); + (rule: RuleTableItem) => { + return bulkDisableRules({ http, ids: [rule.id] }); }, [bulkDisableRules] ); const onEnableRule = useCallback( - async (rule: RuleTableItem) => { - await bulkEnableRules({ http, ids: [rule.id] }); + (rule: RuleTableItem) => { + return bulkEnableRules({ http, ids: [rule.id] }); }, [bulkEnableRules] ); @@ -675,7 +678,23 @@ export const RulesList = ({ : await bulkEnableRules({ http, ids: selectedIds }); setIsEnablingRules(false); - showToast({ action: 'ENABLE', errors, total }); + + const circuitBreakerError = errors.find( + (error) => !!parseRuleCircuitBreakerErrorMessage(error.message).details + ); + + if (circuitBreakerError) { + const parsedError = parseRuleCircuitBreakerErrorMessage(circuitBreakerError.message); + toasts.addDanger({ + title: parsedError.summary, + text: toMountPoint( + {parsedError.details} + ), + }); + } else { + showToast({ action: 'ENABLE', errors, total }); + } + await refreshRules(); onClearSelection(); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 3d929cf7bb5b8..458e14b0b0117 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -50,6 +50,7 @@ import { TriggersActionsUiConfig, RuleTypeRegistryContract, SnoozeSchedule, + BulkOperationResponse, } from '../../../../types'; import { DEFAULT_NUMBER_FORMAT } from '../../../constants'; import { shouldShowDurationWarning } from '../../../lib/execution_duration_utils'; @@ -125,8 +126,8 @@ export interface RulesListTableProps { onTagClose?: (rule: RuleTableItem) => void; onPercentileOptionsChange?: (options: EuiSelectableOption[]) => void; onRuleChanged: () => Promise; - onEnableRule: (rule: RuleTableItem) => Promise; - onDisableRule: (rule: RuleTableItem) => Promise; + onEnableRule: (rule: RuleTableItem) => Promise; + onDisableRule: (rule: RuleTableItem) => Promise; onSnoozeRule: (rule: RuleTableItem, snoozeSchedule: SnoozeSchedule) => Promise; onUnsnoozeRule: (rule: RuleTableItem, scheduleIds?: string[]) => Promise; onSelectAll: () => void; @@ -193,8 +194,8 @@ export const RulesListTable = (props: RulesListTableProps) => { onManageLicenseClick = EMPTY_HANDLER, onPercentileOptionsChange = EMPTY_HANDLER, onRuleChanged, - onEnableRule = EMPTY_HANDLER, - onDisableRule = EMPTY_HANDLER, + onEnableRule, + onDisableRule, onSnoozeRule = EMPTY_HANDLER, onUnsnoozeRule = EMPTY_HANDLER, onSelectAll = EMPTY_HANDLER, diff --git a/x-pack/plugins/uptime/common/constants/settings_defaults.ts b/x-pack/plugins/uptime/common/constants/settings_defaults.ts index ec5fd9bc0a1d7..d5385ada22337 100644 --- a/x-pack/plugins/uptime/common/constants/settings_defaults.ts +++ b/x-pack/plugins/uptime/common/constants/settings_defaults.ts @@ -8,7 +8,7 @@ import { DynamicSettings } from '../runtime_types'; export const DYNAMIC_SETTINGS_DEFAULTS: DynamicSettings = { - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', certAgeThreshold: 730, certExpirationThreshold: 30, defaultConnectors: [], diff --git a/x-pack/plugins/uptime/server/constants/settings.ts b/x-pack/plugins/uptime/server/constants/settings.ts index 3428cc4433a30..777d75b01a3eb 100644 --- a/x-pack/plugins/uptime/server/constants/settings.ts +++ b/x-pack/plugins/uptime/server/constants/settings.ts @@ -8,7 +8,7 @@ import { DynamicSettingsAttributes } from '../runtime_types/settings'; export const DYNAMIC_SETTINGS_DEFAULTS: DynamicSettingsAttributes = { - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', certAgeThreshold: 730, certExpirationThreshold: 30, defaultConnectors: [], diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/lib.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/lib.test.ts index e55898cf7a63d..1dadb58e7c59f 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/lib.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/lib.test.ts @@ -44,7 +44,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', ...mockSearchParams, }, { meta: true } @@ -74,7 +74,7 @@ describe('UptimeEsClient', () => { await expect(uptimeEsClient.search(mockSearchParams)).rejects.toThrow(mockError); expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', ...mockSearchParams, }, { meta: true } @@ -92,7 +92,7 @@ describe('UptimeEsClient', () => { expect(esClient.count).toHaveBeenCalledWith(mockCountParams, { meta: true }); expect(result).toEqual({ - indices: 'heartbeat-8*,heartbeat-7*', + indices: 'heartbeat-*', result: { body: {}, headers: { @@ -143,7 +143,7 @@ describe('UptimeEsClient', () => { it('appends synthetics-* in index for legacy alerts', async () => { savedObjectsClient.get = jest.fn().mockResolvedValue({ attributes: { - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', syntheticsIndexRemoved: true, }, }); @@ -167,7 +167,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + index: 'heartbeat-*,synthetics-*', ...mockSearchParams, }, { meta: true } @@ -200,7 +200,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + index: 'heartbeat-*,synthetics-*', ...mockSearchParams, }, { meta: true } @@ -227,7 +227,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', body: { query: { match_all: {}, @@ -251,7 +251,7 @@ describe('UptimeEsClient', () => { expect(esClient.search).toHaveBeenLastCalledWith( { - index: 'heartbeat-8*,heartbeat-7*', + index: 'heartbeat-*', body: { query: { match_all: {}, diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_details.test.ts.snap b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_details.test.ts.snap index b3a6d7937c6d5..ede405a125cc7 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_details.test.ts.snap +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_details.test.ts.snap @@ -55,7 +55,7 @@ Array [ }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -106,7 +106,7 @@ Array [ }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_duration.test.ts.snap b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_duration.test.ts.snap index eb8499391abc5..712f1f9205cad 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_duration.test.ts.snap +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/__snapshots__/get_monitor_duration.test.ts.snap @@ -69,7 +69,7 @@ Array [ }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_certs.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_certs.test.ts index fe6ed1fc5f4f8..07c2a01256864 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_certs.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_certs.test.ts @@ -253,7 +253,7 @@ describe('getCerts', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_availability.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_availability.test.ts index d4b2680e16037..af3b09cedda27 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_availability.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_availability.test.ts @@ -255,7 +255,7 @@ describe('monitor availability', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); @@ -415,7 +415,7 @@ describe('monitor availability', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); @@ -750,7 +750,7 @@ describe('monitor availability', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); @@ -862,7 +862,7 @@ describe('monitor availability', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -1009,7 +1009,7 @@ describe('monitor availability', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_status.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_status.test.ts index 2ceda7dc03ace..dc7760d8f31f7 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_status.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_monitor_status.test.ts @@ -218,7 +218,7 @@ describe('getMonitorStatus', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); @@ -353,7 +353,7 @@ describe('getMonitorStatus', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); @@ -573,7 +573,7 @@ describe('getMonitorStatus', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); @@ -713,7 +713,7 @@ describe('getMonitorStatus', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); }); @@ -859,7 +859,7 @@ describe('getMonitorStatus', () => { }, "size": 0, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", } `); expect(result.length).toBe(3); diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_network_events.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_network_events.test.ts index ec0642409dc01..29d9386c37cf3 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_network_events.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_network_events.test.ts @@ -213,7 +213,7 @@ describe('getNetworkEvents', () => { "size": 1000, "track_total_hits": true, }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_pings.test.ts b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_pings.test.ts index eac84470ca190..a58c7f5516ff8 100644 --- a/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_pings.test.ts +++ b/x-pack/plugins/uptime/server/legacy_uptime/lib/requests/get_pings.test.ts @@ -163,7 +163,7 @@ describe('getAll', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -225,7 +225,7 @@ describe('getAll', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -287,7 +287,7 @@ describe('getAll', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -354,7 +354,7 @@ describe('getAll', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, @@ -462,7 +462,7 @@ describe('getAll', () => { }, ], }, - "index": "heartbeat-8*,heartbeat-7*", + "index": "heartbeat-*", }, Object { "meta": true, diff --git a/x-pack/test/accessibility/apps/spaces.ts b/x-pack/test/accessibility/apps/spaces.ts index 2a4923a15d08c..622b1b3cefd64 100644 --- a/x-pack/test/accessibility/apps/spaces.ts +++ b/x-pack/test/accessibility/apps/spaces.ts @@ -85,9 +85,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // creating space b and making it the current space so space selector page gets displayed when space b gets deleted - // Skipped due to an a11y violation - // https://github.com/elastic/kibana/issues/144155 - describe.skip('Create Space B and Verify', async () => { + describe('Create Space B and Verify', async () => { it('a11y test for delete space button', async () => { await PageObjects.spaceSelector.clickCreateSpace(); await PageObjects.spaceSelector.clickEnterSpaceName(); diff --git a/x-pack/test/alerting_api_integration/observability/synthetics_rule.ts b/x-pack/test/alerting_api_integration/observability/synthetics_rule.ts index 888d2a0d7f897..21a3749fc3365 100644 --- a/x-pack/test/alerting_api_integration/observability/synthetics_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/synthetics_rule.ts @@ -39,7 +39,7 @@ export default function ({ getService }: FtrProviderContext) { .post(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) .set('kbn-xsrf', 'true') .send({ - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', certExpirationThreshold: 30, certAgeThreshold: 730, defaultConnectors: testActions.slice(0, 2), @@ -79,7 +79,7 @@ export default function ({ getService }: FtrProviderContext) { .post(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS) .set('kbn-xsrf', 'true') .send({ - heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + heartbeatIndices: 'heartbeat-*', certExpirationThreshold: 30, certAgeThreshold: 730, defaultConnectors: testActions, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_edit_with_circuit_breaker.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_edit_with_circuit_breaker.ts index d878eb7404238..a6db48295a90b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_edit_with_circuit_breaker.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_edit_with_circuit_breaker.ts @@ -62,7 +62,7 @@ export default function bulkEditWithCircuitBreakerTests({ getService }: FtrProvi expect(body.errors.length).eql(2); expect(body.errors[0].message).eql( - 'Failed to bulk edit rule - Run limit reached: The rule has 12 runs per minute; there are only 1 runs per minute available.' + 'Error validating circuit breaker - Rules cannot be bulk edited. The maximum number of runs per minute would be exceeded. - The rules have 12 runs per minute; there is only 1 run per minute available. Before you can modify these rules, you must disable other rules or change their check intervals so they run less frequently.' ); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_enable_with_circuit_breaker.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_enable_with_circuit_breaker.ts index d60409223b2b3..e35bdadfaee19 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_enable_with_circuit_breaker.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/bulk_enable_with_circuit_breaker.ts @@ -59,7 +59,7 @@ export default function bulkEnableWithCircuitBreakerTests({ getService }: FtrPro expect(body.errors.length).eql(2); expect(body.errors[0].message).eql( - 'Error validating enable rule data - Run limit reached: The rule has 9 runs per minute; there are only 4 runs per minute available.' + 'Error validating circuit breaker - Rules cannot be bulk enabled. The maximum number of runs per minute would be exceeded. - The rules have 9 runs per minute; there are only 4 runs per minute available. Before you can modify these rules, you must disable other rules or change their check intervals so they run less frequently.' ); }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/create_with_circuit_breaker.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/create_with_circuit_breaker.ts index bf1a0792a0091..f1aea0fc9ce56 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/create_with_circuit_breaker.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/create_with_circuit_breaker.ts @@ -5,6 +5,7 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { getUrlPrefix, getTestRuleData, ObjectRemover } from '../../../../../common/lib'; @@ -26,11 +27,17 @@ export default function createWithCircuitBreakerTests({ getService }: FtrProvide .expect(200); objectRemover.add('space1', createdRule.id, 'rule', 'alerting'); - await supertest + const { + body: { message }, + } = await supertest .post(`${getUrlPrefix('space1')}/api/alerting/rule`) .set('kbn-xsrf', 'foo') .send(getTestRuleData({ schedule: { interval: '10s' } })) .expect(400); + + expect(message).eql( + `Error validating circuit breaker - Rule 'abc' cannot be created. The maximum number of runs per minute would be exceeded. - The rule has 6 runs per minute; there are only 4 runs per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals.` + ); }); it('should prevent rules from being created across spaces', async () => { @@ -41,11 +48,17 @@ export default function createWithCircuitBreakerTests({ getService }: FtrProvide .expect(200); objectRemover.add('space1', createdRule.id, 'rule', 'alerting'); - await supertest + const { + body: { message }, + } = await supertest .post(`${getUrlPrefix('space2')}/api/alerting/rule`) .set('kbn-xsrf', 'foo') .send(getTestRuleData({ schedule: { interval: '10s' } })) .expect(400); + + expect(message).eql( + `Error validating circuit breaker - Rule 'abc' cannot be created. The maximum number of runs per minute would be exceeded. - The rule has 6 runs per minute; there are only 4 runs per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals.` + ); }); it('should allow disabled rules to go over the circuit breaker', async () => { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/enable_with_circuit_breaker.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/enable_with_circuit_breaker.ts index 89a90952ed6a7..eb6691952e9b6 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/enable_with_circuit_breaker.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/enable_with_circuit_breaker.ts @@ -45,7 +45,7 @@ export default function enableWithCircuitBreakerTests({ getService }: FtrProvide .expect(400); expect(body.message).eql( - 'Error validating enable rule data - Run limit reached: The rule has 12 runs per minute; there are only 4 runs per minute available.' + `Error validating circuit breaker - Rule 'abc' cannot be enabled. The maximum number of runs per minute would be exceeded. - The rule has 12 runs per minute; there are only 4 runs per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals.` ); }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/update_with_circuit_breaker.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/update_with_circuit_breaker.ts index 2b1b8e749def9..7c2413d5eeb23 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/update_with_circuit_breaker.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/schedule_circuit_breaker/update_with_circuit_breaker.ts @@ -53,7 +53,7 @@ export default function updateWithCircuitBreakerTests({ getService }: FtrProvide .expect(400); expect(body.message).eql( - 'Error validating update data - Run limit reached: The rule has 12 runs per minute; there are only 7 runs per minute available.' + `Error validating circuit breaker - Rule 'abc' cannot be updated. The maximum number of runs per minute would be exceeded. - The rule has 12 runs per minute; there are only 4 runs per minute available. Before you can modify this rule, you must increase its check interval so that it runs less frequently. Alternatively, disable other rules or change their check intervals.` ); }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts index 2aed9770c56b3..bd79f1dc4a569 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data.ts @@ -62,11 +62,14 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F 'kibana.alert.rule.execution.uuid', ]; - // Failing: See https://github.com/elastic/kibana/issues/167945 - describe.skip('alerts as data', () => { + describe('alerts as data', () => { afterEach(() => objectRemover.removeAll()); after(async () => { - await es.deleteByQuery({ index: alertsAsDataIndex, query: { match_all: {} } }); + await es.deleteByQuery({ + index: alertsAsDataIndex, + query: { match_all: {} }, + conflicts: 'proceed', + }); }); it('should write alert docs during rule execution', async () => { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts index f10047e8a25b2..87e2d8d91b59f 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_flapping.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; -import { ALERT_FLAPPING, ALERT_FLAPPING_HISTORY } from '@kbn/rule-data-utils'; +import { ALERT_FLAPPING, ALERT_FLAPPING_HISTORY, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { Spaces } from '../../../../scenarios'; import { @@ -33,8 +33,12 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F const alertsAsDataIndex = '.alerts-test.patternfiring.alerts-default'; describe('alerts as data flapping', () => { - afterEach(async () => { - await es.deleteByQuery({ index: alertsAsDataIndex, query: { match_all: {} } }); + beforeEach(async () => { + await es.deleteByQuery({ + index: alertsAsDataIndex, + query: { match_all: {} }, + conflicts: 'proceed', + }); objectRemover.removeAll(); }); @@ -77,6 +81,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F expect(createdRule.status).to.eql(200); const ruleId = createdRule.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); // Wait for the rule to run once @@ -92,7 +97,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - let alertDocs = await queryForAlertDocs(); + let alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document let state: any = await getRuleState(ruleId); @@ -123,7 +128,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -151,7 +156,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -221,7 +226,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - let alertDocs = await queryForAlertDocs(); + let alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document let state: any = await getRuleState(ruleId); @@ -252,7 +257,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -280,7 +285,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -332,6 +337,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F expect(createdRule.status).to.eql(200); const ruleId = createdRule.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); // Wait for the rule to run once @@ -346,7 +352,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F await waitForEventLogDocs(ruleId, new Map([['execute', { equal: ++run }]])); } - const alertDocs = await queryForAlertDocs(); + const alertDocs = await queryForAlertDocs(ruleId); const state = await getRuleState(ruleId); expect(alertDocs.length).to.equal(2); @@ -392,6 +398,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F expect(createdRule.status).to.eql(200); const ruleId = createdRule.body.id; + objectRemover.add(Spaces.space1.id, ruleId, 'rule', 'alerting'); // Wait for the rule to run once @@ -407,7 +414,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - let alertDocs = await queryForAlertDocs(); + let alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document let state: any = await getRuleState(ruleId); @@ -436,7 +443,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -466,7 +473,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -496,7 +503,7 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F } // Query for alerts - alertDocs = await queryForAlertDocs(); + alertDocs = await queryForAlertDocs(ruleId); // Get rule state from task document state = await getRuleState(ruleId); @@ -525,10 +532,20 @@ export default function createAlertsAsDataInstallResourcesTest({ getService }: F return JSON.parse(task._source!.task.state); } - async function queryForAlertDocs(): Promise>> { + async function queryForAlertDocs(ruleId: string): Promise>> { const searchResult = await es.search({ index: alertsAsDataIndex, - body: { query: { match_all: {} } }, + body: { + query: { + bool: { + must: { + term: { + [ALERT_RULE_UUID]: { value: ruleId }, + }, + }, + }, + }, + }, }); return searchResult.hits.hits as Array>; } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts index c31c7c8027495..9b68de616ee2f 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts @@ -46,7 +46,6 @@ export default function createRegisteredRuleTypeTests({ getService }: FtrProvide 'siem.newTermsRule', 'siem.notifications', 'slo.rules.burnRate', - 'metrics.alert.anomaly', 'logs.alert.document.count', 'metrics.alert.inventory.threshold', 'metrics.alert.threshold', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/benchmark.ts b/x-pack/test/api_integration/apis/cloud_security_posture/benchmark.ts index 4a22015621f1b..f8735da12c9e4 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/benchmark.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/benchmark.ts @@ -26,6 +26,7 @@ export default function ({ getService }: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', @@ -36,6 +37,7 @@ export default function ({ getService }: FtrProviderContext) { const { body: agentPolicyResponse2 } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy 2', @@ -46,6 +48,7 @@ export default function ({ getService }: FtrProviderContext) { const { body: agentPolicyResponse3 } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy 3', @@ -56,6 +59,7 @@ export default function ({ getService }: FtrProviderContext) { const { body: agentPolicyResponse4 } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy 4', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/get_csp_rule_template.ts b/x-pack/test/api_integration/apis/cloud_security_posture/get_csp_rule_template.ts index 233987100ebfd..485e36d5ff67e 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/get_csp_rule_template.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/get_csp_rule_template.ts @@ -25,6 +25,7 @@ export default function ({ getService }: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts b/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts index d04d819e62bd6..434d3fd308974 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts @@ -8,6 +8,7 @@ import type { SuperTest, Test } from 'supertest'; import { Client } from '@elastic/elasticsearch'; import expect from '@kbn/expect'; +import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; import type { IndexDetails } from '@kbn/cloud-security-posture-plugin/common/types'; import { SecurityService } from '../../../../../test/common/services/security/security'; @@ -72,6 +73,7 @@ export async function createPackagePolicy( const { body: postPackageResponse } = await supertest .post(`/api/fleet/package_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ force: true, diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts index 2203a6374db70..46cd700c7964c 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts @@ -47,17 +47,20 @@ export default function (providerContext: FtrProviderContext) { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); const getPkRes = await supertest .get(`/api/fleet/epm/packages/fleet_server`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .expect(200); const pkgVersion = getPkRes.body.item.version; await supertest .post(`/api/fleet/epm/packages/fleet_server/${pkgVersion}`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ force: true }) .expect(200); const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy a1', @@ -68,6 +71,7 @@ export default function (providerContext: FtrProviderContext) { await supertest .post(`/api/fleet/fleet_server_hosts`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ id: 'test-default-a1', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexed.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexed.ts index 594babe643b05..0ba63bd6d436e 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexed.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexed.ts @@ -41,6 +41,7 @@ export default function (providerContext: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexing.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexing.ts index ef38ab85efb04..216f5aee17627 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexing.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_indexing.ts @@ -41,6 +41,7 @@ export default function (providerContext: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_not_deployed_not_installed.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_not_deployed_not_installed.ts index dcfbedae15741..c991311922758 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_not_deployed_not_installed.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_not_deployed_not_installed.ts @@ -26,6 +26,7 @@ export default function (providerContext: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_unprivileged.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_unprivileged.ts index 7d1445932fa6c..6a3f8fbbfeda5 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_unprivileged.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_unprivileged.ts @@ -56,6 +56,7 @@ export default function (providerContext: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', @@ -109,6 +110,7 @@ export default function (providerContext: FtrProviderContext) { const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy', diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts index bc6a44100dab0..dce7e655c0e67 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts @@ -31,17 +31,20 @@ export default function (providerContext: FtrProviderContext) { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); const getPkRes = await supertest .get(`/api/fleet/epm/packages/fleet_server`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .expect(200); const pkgVersion = getPkRes.body.item.version; await supertest .post(`/api/fleet/epm/packages/fleet_server/${pkgVersion}`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ force: true }) .expect(200); const { body: agentPolicyResponse } = await supertest .post(`/api/fleet/agent_policies`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ name: 'Test policy a1', @@ -52,6 +55,7 @@ export default function (providerContext: FtrProviderContext) { await supertest .post(`/api/fleet/fleet_server_hosts`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxxx') .send({ id: 'test-default-a1', diff --git a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts index a76df2127a1fb..e0373a405cde7 100644 --- a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts +++ b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts @@ -31,6 +31,10 @@ export default function ({ getService }: FtrProviderContext) { }, }, }, + lifecycle: { + // @ts-expect-error @elastic/elasticsearch enabled prop is not typed yet + enabled: true, + }, }, data_stream: {}, }, @@ -85,8 +89,7 @@ export default function ({ getService }: FtrProviderContext) { expect(typeof storageSizeBytes).to.be('number'); }; - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/168021 - describe.skip('Data streams', function () { + describe('Data streams', function () { describe('Get', () => { const testDataStreamName = 'test-data-stream'; diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts index 8745be165a586..303706c930401 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_project.ts @@ -9,7 +9,10 @@ import expect from '@kbn/expect'; import { ConfigKey, ProjectMonitorsRequest } from '@kbn/synthetics-plugin/common/runtime_types'; import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants'; import { formatKibanaNamespace } from '@kbn/synthetics-plugin/common/formatters'; -import { REQUEST_TOO_LARGE } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/add_monitor_project'; +import { + ELASTIC_MANAGED_LOCATIONS_DISABLED, + REQUEST_TOO_LARGE, +} from '@kbn/synthetics-plugin/server/routes/monitor_cruds/add_monitor_project'; import { PackagePolicy } from '@kbn/fleet-plugin/common'; import { PROFILE_VALUES_ENUM, @@ -132,6 +135,18 @@ export default function ({ getService }: FtrProviderContext) { .expect(404); }); + it('project monitors - returns forbidden if no access to public locations', async () => { + const project = `test-project-${uuidv4()}`; + + await monitorTestService.generateProjectAPIKey(false); + const response = await monitorTestService.addProjectMonitors( + project, + projectMonitors.monitors + ); + expect(response.status).to.eql(403); + expect(response.body.message).to.eql(ELASTIC_MANAGED_LOCATIONS_DISABLED); + }); + it('project monitors - handles browser monitors', async () => { const successfulMonitors = [projectMonitors.monitors[0]]; const project = `test-project-${uuidv4()}`; diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor_project_private_location.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor_project_private_location.ts index 29b1d6878b2c8..29549684aa44e 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor_project_private_location.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor_project_private_location.ts @@ -73,7 +73,8 @@ export default function ({ getService }: FtrProviderContext) { }, ]; try { - const body = await monitorTestService.addProjectMonitors(project, testMonitors); + const { body, status } = await monitorTestService.addProjectMonitors(project, testMonitors); + expect(status).eql(200); expect(body.createdMonitors.length).eql(1); expect(body.failedMonitors[0].reason).eql( "Couldn't save or update monitor because of an invalid configuration." @@ -96,16 +97,28 @@ export default function ({ getService }: FtrProviderContext) { privateLocations: ['Test private location 0'], }; const testMonitors = [projectMonitors.monitors[0], secondMonitor]; - const body = await monitorTestService.addProjectMonitors(project, testMonitors); + const { body, status: status0 } = await monitorTestService.addProjectMonitors( + project, + testMonitors + ); + expect(status0).eql(200); + expect(body.createdMonitors.length).eql(2); - const editedBody = await monitorTestService.addProjectMonitors(project, testMonitors); + const { body: editedBody, status: editedStatus } = + await monitorTestService.addProjectMonitors(project, testMonitors); + expect(editedStatus).eql(200); + expect(editedBody.createdMonitors.length).eql(0); expect(editedBody.updatedMonitors.length).eql(2); testMonitors[1].name = '!@#$%^&*()_++[\\-\\]- wow name'; testMonitors[1].privateLocations = ['Test private location 8']; - const editedBodyError = await monitorTestService.addProjectMonitors(project, testMonitors); + const { body: editedBodyError, status } = await monitorTestService.addProjectMonitors( + project, + testMonitors + ); + expect(status).eql(200); expect(editedBodyError.createdMonitors.length).eql(0); expect(editedBodyError.updatedMonitors.length).eql(1); expect(editedBodyError.failedMonitors.length).eql(1); diff --git a/x-pack/test/api_integration/apis/synthetics/index.ts b/x-pack/test/api_integration/apis/synthetics/index.ts index b00ff699ca1b6..959014c0362cc 100644 --- a/x-pack/test/api_integration/apis/synthetics/index.ts +++ b/x-pack/test/api_integration/apis/synthetics/index.ts @@ -16,6 +16,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { await esDeleteAllIndices('synthetics*'); }); + loadTestFile(require.resolve('./synthetics_enablement')); loadTestFile(require.resolve('./get_filters')); loadTestFile(require.resolve('./enable_default_alerting')); loadTestFile(require.resolve('./get_monitor')); @@ -27,7 +28,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./edit_monitor')); loadTestFile(require.resolve('./delete_monitor')); loadTestFile(require.resolve('./delete_monitor_project')); - loadTestFile(require.resolve('./synthetics_enablement')); loadTestFile(require.resolve('./sync_global_params')); loadTestFile(require.resolve('./add_edit_params')); loadTestFile(require.resolve('./add_monitor_project_private_location')); diff --git a/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts b/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts index 637044df1fc69..ad88b1d1c2aa4 100644 --- a/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts +++ b/x-pack/test/api_integration/apis/synthetics/services/synthetics_monitor_test_service.ts @@ -10,18 +10,41 @@ import { syntheticsMonitorType } from '@kbn/synthetics-plugin/common/types/saved import { EncryptedSyntheticsSavedMonitor } from '@kbn/synthetics-plugin/common/runtime_types'; import { MonitorInspectResponse } from '@kbn/synthetics-plugin/public/apps/synthetics/state/monitor_management/api'; import { v4 as uuidv4 } from 'uuid'; +import expect from '@kbn/expect'; +import { ProjectAPIKeyResponse } from '@kbn/synthetics-plugin/server/routes/monitor_cruds/get_api_key'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { KibanaSupertestProvider } from '../../../../../../test/api_integration/services/supertest'; export class SyntheticsMonitorTestService { private supertest: ReturnType; private getService: FtrProviderContext['getService']; + private supertestWithoutAuth: ReturnType; + public apiKey: string | undefined = ''; constructor(getService: FtrProviderContext['getService']) { + this.supertest = getService('supertest'); this.supertest = getService('supertest'); this.getService = getService; + this.supertestWithoutAuth = getService('supertestWithoutAuth'); } + generateProjectAPIKey = async (accessToPublicLocations = true) => { + const res = await this.supertest + .get( + SYNTHETICS_API_URLS.SYNTHETICS_PROJECT_APIKEY + + '?accessToElasticManagedLocations=' + + accessToPublicLocations + ) + .set('kbn-xsrf', 'true') + .expect(200); + const result = res.body as ProjectAPIKeyResponse; + expect(result).to.have.property('apiKey'); + const apiKey = result.apiKey?.encoded; + expect(apiKey).to.not.be.empty(); + this.apiKey = apiKey; + return apiKey; + }; + async getMonitor(monitorId: string, decrypted: boolean = true, space?: string) { let url = SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR.replace('{monitorId}', monitorId) + @@ -62,12 +85,22 @@ export class SyntheticsMonitorTestService { } async addProjectMonitors(project: string, monitors: any) { - const { body } = await this.supertest - .put(SYNTHETICS_API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project)) - .set('kbn-xsrf', 'true') - .send({ monitors }) - .expect(200); - return body; + if (this.apiKey) { + return this.supertestWithoutAuth + .put( + SYNTHETICS_API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project) + ) + .set('kbn-xsrf', 'true') + .set('authorization', `ApiKey ${this.apiKey}`) + .send({ monitors }); + } else { + return this.supertest + .put( + SYNTHETICS_API_URLS.SYNTHETICS_MONITORS_PROJECT_UPDATE.replace('{projectName}', project) + ) + .set('kbn-xsrf', 'true') + .send({ monitors }); + } } async deleteMonitorByJourney( diff --git a/x-pack/test/api_integration/apis/uptime/rest/index_status.ts b/x-pack/test/api_integration/apis/uptime/rest/index_status.ts index 50ff47f04be5d..1602e00d13a2d 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/index_status.ts +++ b/x-pack/test/api_integration/apis/uptime/rest/index_status.ts @@ -18,7 +18,7 @@ export default function ({ getService }: FtrProviderContext) { const data = apiResponse.body; expect(data).to.eql({ indexExists: true, - indices: 'heartbeat-8*,heartbeat-7*', + indices: 'heartbeat-*', }); }); }); diff --git a/x-pack/test/apm_api_integration/tests/time_range_metadata/generate_data.ts b/x-pack/test/apm_api_integration/tests/time_range_metadata/generate_data.ts deleted file mode 100644 index e1f8720a103b0..0000000000000 --- a/x-pack/test/apm_api_integration/tests/time_range_metadata/generate_data.ts +++ /dev/null @@ -1,76 +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 { apm, timerange } from '@kbn/apm-synthtrace-client'; -import moment, { Moment } from 'moment'; -import { Transform, Readable } from 'stream'; -import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; - -export function getTransactionEvents(start: Moment, end: Moment) { - const serviceName = 'synth-go'; - const transactionName = 'GET /api/product/list'; - const GO_PROD_RATE = 75; - const GO_PROD_ERROR_RATE = 25; - - const serviceGoProdInstance = apm - .service({ name: serviceName, environment: 'production', agentName: 'go' }) - .instance('instance-a'); - - return [ - timerange(start, end) - .interval('1m') - .rate(GO_PROD_RATE) - .generator((timestamp) => - serviceGoProdInstance - .transaction({ transactionName }) - .timestamp(timestamp) - .duration(1000) - .success() - ), - - timerange(start, end) - .interval('1m') - .rate(GO_PROD_ERROR_RATE) - .generator((timestamp) => - serviceGoProdInstance - .transaction({ transactionName }) - .duration(1000) - .timestamp(timestamp) - .failure() - ), - ]; -} - -export function subtractDateDifference(start: Moment, end: Moment) { - const diff = moment(end).diff(moment(start)) + 1000; - const previousStart = moment(start).subtract(diff, 'milliseconds').format(); - const previousEnd = moment(end).subtract(diff, 'milliseconds').format(); - return { previousStart: moment(previousStart), previousEnd: moment(previousEnd) }; -} - -function deleteSummaryFieldTransform() { - return new Transform({ - objectMode: true, - transform(chunk: any, encoding, callback) { - delete chunk?.transaction?.duration?.summary; - callback(null, chunk); - }, - }); -} - -export function overwriteSynthPipelineWithSummaryFieldDeleteTransform({ - synthtraceEsClient, -}: { - synthtraceEsClient: ApmSynthtraceEsClient; -}) { - return (base: Readable) => { - const defaultPipeline = synthtraceEsClient.getDefaultPipeline()(base); - return (defaultPipeline as unknown as NodeJS.ReadableStream).pipe( - deleteSummaryFieldTransform() - ); - }; -} diff --git a/x-pack/test/apm_api_integration/tests/time_range_metadata/many_apm_server_versions.spec.ts b/x-pack/test/apm_api_integration/tests/time_range_metadata/many_apm_server_versions.spec.ts new file mode 100644 index 0000000000000..7f91aaf93d804 --- /dev/null +++ b/x-pack/test/apm_api_integration/tests/time_range_metadata/many_apm_server_versions.spec.ts @@ -0,0 +1,247 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import expect from '@kbn/expect'; +import { apm, timerange } from '@kbn/apm-synthtrace-client'; +import moment from 'moment'; +import { + addObserverVersionTransform, + ApmSynthtraceEsClient, + deleteSummaryFieldTransform, +} from '@kbn/apm-synthtrace'; +import { + TRANSACTION_DURATION_HISTOGRAM, + TRANSACTION_DURATION_SUMMARY, +} from '@kbn/apm-plugin/common/es_fields/apm'; +import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type'; +import { RollupInterval } from '@kbn/apm-plugin/common/rollup'; +import { LatencyAggregationType } from '@kbn/apm-plugin/common/latency_aggregation_types'; +import { pipeline, Readable } from 'stream'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { ApmApiClient } from '../../common/config'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const registry = getService('registry'); + const apmApiClient = getService('apmApiClient'); + const synthtrace = getService('synthtraceEsClient'); + const es = getService('es'); + + const baseTime = new Date('2023-10-01T00:00:00.000Z').getTime(); + const startLegacy = moment(baseTime).add(0, 'minutes'); + const start = moment(baseTime).add(5, 'minutes'); + const end = moment(baseTime).add(10, 'minutes'); + + registry.when( + 'Time range metadata when there are multiple APM Server versions', + { config: 'basic', archives: [] }, + () => { + describe('when ingesting traces from APM Server with different versions', () => { + before(async () => { + await generateTraceDataForService({ + serviceName: 'synth-java-legacy', + start: startLegacy, + end, + isLegacy: true, + synthtrace, + }); + + await generateTraceDataForService({ + serviceName: 'synth-java', + start, + end, + isLegacy: false, + synthtrace, + }); + }); + + after(() => { + return synthtrace.clean(); + }); + + it('ingests transaction metrics with transaction.duration.summary', async () => { + const res = await es.search({ + index: 'metrics-apm*', + body: { + query: { + bool: { + filter: [ + { exists: { field: TRANSACTION_DURATION_HISTOGRAM } }, + { exists: { field: TRANSACTION_DURATION_SUMMARY } }, + ], + }, + }, + }, + }); + + // @ts-expect-error + expect(res.hits.total.value).to.be(10); + }); + + it('ingests transaction metrics without transaction.duration.summary', async () => { + const res = await es.search({ + index: 'metrics-apm*', + body: { + query: { + bool: { + filter: [{ exists: { field: TRANSACTION_DURATION_HISTOGRAM } }], + must_not: [{ exists: { field: TRANSACTION_DURATION_SUMMARY } }], + }, + }, + }, + }); + + // @ts-expect-error + expect(res.hits.total.value).to.be(20); + }); + + it('has transaction.duration.summary field for every document type', async () => { + const response = await apmApiClient.readUser({ + endpoint: 'GET /internal/apm/time_range_metadata', + params: { + query: { + start: start.toISOString(), + end: end.toISOString(), + enableContinuousRollups: true, + enableServiceTransactionMetrics: true, + useSpanName: false, + kuery: '', + }, + }, + }); + + const allHasSummaryField = response.body.sources.every((source) => { + if (source.documentType === 'transactionEvent') { + return true; + } + + return source.hasDurationSummaryField; + }); + + expect(allHasSummaryField).to.eql(true); + }); + + it('does not have latency data for synth-java-legacy service', async () => { + const res = await getLatencyChartForService({ + serviceName: 'synth-java-legacy', + start, + end, + apmApiClient, + }); + + expect(res.body.currentPeriod.latencyTimeseries.map(({ y }) => y)).to.eql([ + null, + null, + null, + null, + null, + null, + ]); + }); + + it('has latency data for synth-java service', async () => { + const res = await getLatencyChartForService({ + serviceName: 'synth-java', + start, + end, + apmApiClient, + }); + + expect(res.body.currentPeriod.latencyTimeseries.map(({ y }) => y)).to.eql([ + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + null, + ]); + }); + }); + } + ); +} + +// This will retrieve latency data expecting the `transaction.duration.summary` field to be present +function getLatencyChartForService({ + serviceName, + start, + end, + apmApiClient, +}: { + serviceName: string; + start: moment.Moment; + end: moment.Moment; + apmApiClient: ApmApiClient; +}) { + return apmApiClient.readUser({ + endpoint: `GET /internal/apm/services/{serviceName}/transactions/charts/latency`, + params: { + path: { serviceName }, + query: { + start: start.toISOString(), + end: end.toISOString(), + environment: 'production', + latencyAggregationType: LatencyAggregationType.avg, + transactionType: 'request', + kuery: '', + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + bucketSizeInSeconds: 60, + useDurationSummary: true, + }, + }, + }); +} + +function generateTraceDataForService({ + serviceName, + start, + end, + isLegacy, + synthtrace, +}: { + serviceName: string; + start: moment.Moment; + end: moment.Moment; + isLegacy?: boolean; + synthtrace: ApmSynthtraceEsClient; +}) { + const instance = apm + .service({ + name: serviceName, + environment: 'production', + agentName: 'java', + }) + .instance(`instance`); + + const events = timerange(start, end) + .ratePerMinute(6) + .generator((timestamp) => + instance + .transaction({ transactionName: 'GET /order/{id}' }) + .timestamp(timestamp) + .duration(1000) + .success() + ); + + const apmPipeline = (base: Readable) => { + // @ts-expect-error + const defaultPipeline: NodeJS.ReadableStream = synthtrace.getDefaultPipeline()(base); + + return pipeline( + defaultPipeline, + addObserverVersionTransform('8.5.0'), + deleteSummaryFieldTransform(), + (err) => { + if (err) { + // eslint-disable-next-line no-console + console.error(err); + } + } + ); + }; + + return synthtrace.index(events, isLegacy ? apmPipeline : undefined); +} diff --git a/x-pack/test/apm_api_integration/tests/time_range_metadata/time_range_metadata.spec.ts b/x-pack/test/apm_api_integration/tests/time_range_metadata/time_range_metadata.spec.ts index 34600b863b517..32303b7b0bb4c 100644 --- a/x-pack/test/apm_api_integration/tests/time_range_metadata/time_range_metadata.spec.ts +++ b/x-pack/test/apm_api_integration/tests/time_range_metadata/time_range_metadata.spec.ts @@ -11,18 +11,16 @@ import { omit, sortBy } from 'lodash'; import moment, { Moment } from 'moment'; import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type'; import { RollupInterval } from '@kbn/apm-plugin/common/rollup'; +import { deleteSummaryFieldTransform } from '@kbn/apm-synthtrace'; +import { Readable, pipeline } from 'stream'; import { FtrProviderContext } from '../../common/ftr_provider_context'; -import { - getTransactionEvents, - subtractDateDifference, - overwriteSynthPipelineWithSummaryFieldDeleteTransform, -} from './generate_data'; export default function ApiTest({ getService }: FtrProviderContext) { const registry = getService('registry'); const apmApiClient = getService('apmApiClient'); const synthtraceEsClient = getService('synthtraceEsClient'); const es = getService('es'); + const log = getService('log'); const start = moment('2022-01-01T00:00:00.000Z'); const end = moment('2022-01-02T00:00:00.000Z').subtract(1, 'millisecond'); @@ -80,29 +78,45 @@ export default function ApiTest({ getService }: FtrProviderContext) { { config: 'basic', archives: [] }, () => { describe('data loaded with and without summary field', () => { - const localStart = moment('2023-04-28T00:00:00.000Z'); - const localEnd = moment('2023-04-28T06:00:00.000Z'); + const withoutSummaryFieldStart = moment('2023-04-28T00:00:00.000Z'); + const withoutSummaryFieldEnd = moment(withoutSummaryFieldStart).add(2, 'hours'); + + const withSummaryFieldStart = moment(withoutSummaryFieldEnd); + const withSummaryFieldEnd = moment(withoutSummaryFieldEnd).add(2, 'hours'); + before(async () => { - const regularData = getTransactionEvents(localStart, localEnd); - await synthtraceEsClient.index([...regularData]); - const { previousStart, previousEnd } = subtractDateDifference(localStart, localEnd); - const previousDataWithoutSummaryField = getTransactionEvents(previousStart, previousEnd); - synthtraceEsClient.pipeline( - overwriteSynthPipelineWithSummaryFieldDeleteTransform({ - synthtraceEsClient, - }) + const previousTxEvents = getTransactionEvents( + withoutSummaryFieldStart, + withoutSummaryFieldEnd ); - await synthtraceEsClient.index([...previousDataWithoutSummaryField]); + + const apmPipeline = (base: Readable) => { + // @ts-expect-error + const defaultPipeline: NodeJS.ReadableStream = + synthtraceEsClient.getDefaultPipeline()(base); + + return pipeline(defaultPipeline, deleteSummaryFieldTransform(), (err) => { + if (err) { + log.error(err); + } + }); + }; + + await synthtraceEsClient.index(previousTxEvents, apmPipeline); + + const txEvents = getTransactionEvents(withSummaryFieldStart, withSummaryFieldEnd); + await synthtraceEsClient.index(txEvents); }); + after(() => { - synthtraceEsClient.clean(); - synthtraceEsClient.pipeline(synthtraceEsClient.getDefaultPipeline()); + return synthtraceEsClient.clean(); }); + describe('Values for hasDurationSummaryField for transaction metrics', () => { it('returns true when summary field is available both inside and outside the range', async () => { const response = await getTimeRangeMedata({ - start: moment(localStart).add(3, 'hours'), - end: moment(localEnd), + start: moment(withSummaryFieldStart).add(1, 'hour'), + end: moment(withSummaryFieldEnd), }); expect( @@ -113,10 +127,11 @@ export default function ApiTest({ getService }: FtrProviderContext) { ).length ).to.eql(3); }); + it('returns false when summary field is available inside but not outside the range', async () => { const response = await getTimeRangeMedata({ - start: moment(localStart).subtract(30, 'minutes'), - end: moment(localEnd), + start: moment(withSummaryFieldStart).subtract(30, 'minutes'), + end: moment(withSummaryFieldEnd), }); expect( @@ -491,7 +506,44 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); }); - after(() => synthtraceEsClient.clean()); + after(() => { + return synthtraceEsClient.clean(); + }); } ); } + +function getTransactionEvents(start: Moment, end: Moment) { + const serviceName = 'synth-go'; + const transactionName = 'GET /api/product/list'; + const GO_PROD_RATE = 15; + const GO_PROD_ERROR_RATE = 5; + + const serviceGoProdInstance = apm + .service({ name: serviceName, environment: 'production', agentName: 'go' }) + .instance('instance-a'); + + return [ + timerange(start, end) + .interval('1m') + .rate(GO_PROD_RATE) + .generator((timestamp) => + serviceGoProdInstance + .transaction({ transactionName }) + .timestamp(timestamp) + .duration(1000) + .success() + ), + + timerange(start, end) + .interval('1m') + .rate(GO_PROD_ERROR_RATE) + .generator((timestamp) => + serviceGoProdInstance + .transaction({ transactionName }) + .duration(1000) + .timestamp(timestamp) + .failure() + ), + ]; +} diff --git a/x-pack/test/cloud_security_posture_functional/config.ts b/x-pack/test/cloud_security_posture_functional/config.ts index 05f1477d84af1..53d87d2378db5 100644 --- a/x-pack/test/cloud_security_posture_functional/config.ts +++ b/x-pack/test/cloud_security_posture_functional/config.ts @@ -38,7 +38,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { * 2. merge the updated version number change to kibana */ `--xpack.fleet.packages.0.name=cloud_security_posture`, - `--xpack.fleet.packages.0.version=1.5.0`, + `--xpack.fleet.packages.0.version=1.6.0`, // `--xpack.fleet.registryUrl=https://localhost:8080`, ], }, diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.ts new file mode 100644 index 0000000000000..795c2edb62dd4 --- /dev/null +++ b/x-pack/test/cloud_security_posture_functional/page_objects/add_cis_integration_form_page.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FtrProviderContext } from '../ftr_provider_context'; + +export function AddCisIntegrationFormPageProvider({ + getService, + getPageObjects, +}: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const PageObjects = getPageObjects(['common', 'header']); + + const cisGcp = { + getIntegrationFormEntirePage: () => testSubjects.find('dataCollectionSetupStep'), + + getIntegrationPolicyTable: () => testSubjects.find('integrationPolicyTable'), + + getIntegrationFormEditPage: () => testSubjects.find('editPackagePolicy_page'), + + findOptionInPage: async (text: string) => { + await PageObjects.header.waitUntilLoadingHasFinished(); + const optionToBeClicked = await testSubjects.find(text); + return await optionToBeClicked; + }, + + clickOptionButton: async (text: string) => { + const optionToBeClicked = await cisGcp.findOptionInPage(text); + await optionToBeClicked.click(); + }, + + clickSaveButton: async () => { + const optionToBeClicked = await cisGcp.findOptionInPage('createPackagePolicySaveButton'); + await optionToBeClicked.click(); + }, + + getPostInstallModal: async () => { + return await testSubjects.find('confirmModalTitleText'); + }, + + isPostInstallGoogleCloudShellModal: async (isOrg: boolean, orgID?: string, prjID?: string) => { + const googleCloudShellModal = await testSubjects.find('postInstallGoogleCloudShellModal'); + const googleCloudShellModalVisibleText = await googleCloudShellModal.getVisibleText(); + const stringProjectId = prjID ? prjID : ''; + const stringOrganizationId = orgID ? `ORG_ID=${orgID}` : 'ORG_ID='; + const orgIdExist = googleCloudShellModalVisibleText.includes(stringOrganizationId); + const prjIdExist = googleCloudShellModalVisibleText.includes(stringProjectId); + + if (isOrg) { + return orgIdExist === true && prjIdExist === true; + } else { + return orgIdExist === false && prjIdExist === true; + } + }, + + checkGcpFieldExist: async (text: string) => { + const field = await testSubjects.findAll(text); + return field.length; + }, + + fillInTextField: async (selector: string, text: string) => { + const textField = await testSubjects.find(selector); + await textField.type(text); + }, + + chooseDropDown: async (selector: string, text: string) => { + const credentialTypeBox = await testSubjects.find(selector); + const chosenOption = await testSubjects.find(text); + await credentialTypeBox.click(); + await chosenOption.click(); + }, + + getFieldValueInEditPage: async (field: string) => { + /* Newly added/edited integration always shows up on top by default as such we can just always click the most top if we want to check for the latest one */ + const integrationList = await testSubjects.findAll('integrationNameLink'); + await integrationList[0].click(); + const fieldValue = await (await testSubjects.find(field)).getAttribute('value'); + return fieldValue; + }, + }; + + const navigateToAddIntegrationCspmPage = async () => { + await PageObjects.common.navigateToUrl( + 'fleet', // Defined in Security Solution plugin + 'integrations/cloud_security_posture/add-integration/cspm', + { shouldUseHashForSubUrl: false } + ); + }; + + const navigateToIntegrationCspList = async () => { + await PageObjects.common.navigateToActualUrl( + 'integrations', // Defined in Security Solution plugin + '/detail/cloud_security_posture/policies' + ); + }; + + return { + cisGcp, + navigateToAddIntegrationCspmPage, + navigateToIntegrationCspList, + }; +} diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/index.ts b/x-pack/test/cloud_security_posture_functional/page_objects/index.ts index 36dbf1bdc0fe9..84a75d27e4e2a 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/index.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/index.ts @@ -8,11 +8,13 @@ import { pageObjects as xpackFunctionalPageObjects } from '../../functional/page_objects'; import { FindingsPageProvider } from './findings_page'; import { CspDashboardPageProvider } from './csp_dashboard_page'; +import { AddCisIntegrationFormPageProvider } from './add_cis_integration_form_page'; import { VulnerabilityDashboardPageProvider } from './vulnerability_dashboard_page_object'; export const cloudSecurityPosturePageObjects = { findings: FindingsPageProvider, cloudPostureDashboard: CspDashboardPageProvider, + cisAddIntegration: AddCisIntegrationFormPageProvider, vulnerabilityDashboard: VulnerabilityDashboardPageProvider, }; export const pageObjects = { diff --git a/x-pack/test/cloud_security_posture_functional/pages/cis_integration.ts b/x-pack/test/cloud_security_posture_functional/pages/cis_integration.ts new file mode 100644 index 0000000000000..20f85163521a7 --- /dev/null +++ b/x-pack/test/cloud_security_posture_functional/pages/cis_integration.ts @@ -0,0 +1,179 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../ftr_provider_context'; + +const CIS_GCP_OPTION_TEST_ID = 'cisGcpTestId'; +const GCP_ORGANIZATION_TEST_ID = 'gcpOrganizationAccountTestId'; +const GCP_SINGLE_ACCOUNT_TEST_ID = 'gcpSingleAccountTestId'; +const GCP_CLOUD_SHELL_TEST_ID = 'gcpGoogleCloudShellOptionTestId'; +const GCP_MANUAL_TEST_ID = 'gcpManualOptionTestId'; +const PRJ_ID_TEST_ID = 'project_id_test_id'; +const ORG_ID_TEST_ID = 'organization_id_test_id'; +const CREDENTIALS_TYPE_TEST_ID = 'credentials_type_test_id'; +const CREDENTIALS_FILE_TEST_ID = 'credentials_file_test_id'; +const CREDENTIALS_JSON_TEST_ID = 'credentials_json_test_id'; + +// eslint-disable-next-line import/no-default-export +export default function (providerContext: FtrProviderContext) { + const { getPageObjects, getService } = providerContext; + const pageObjects = getPageObjects(['cloudPostureDashboard', 'cisAddIntegration', 'header']); + const kibanaServer = getService('kibanaServer'); + + describe('Test adding Cloud Security Posture Integrations', function () { + this.tags(['cloud_security_posture_cis_integration']); + let cisIntegrationGcp: typeof pageObjects.cisAddIntegration.cisGcp; + let cisIntegration: typeof pageObjects.cisAddIntegration; + + beforeEach(async () => { + cisIntegration = pageObjects.cisAddIntegration; + cisIntegrationGcp = pageObjects.cisAddIntegration.cisGcp; + + await cisIntegration.navigateToAddIntegrationCspmPage(); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + }); + + describe('CIS_GCP Organization', () => { + it('Switch between Manual and Google cloud shell', async () => { + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_ORGANIZATION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_MANUAL_TEST_ID); + /* Check for existing fields. In Manual, Credential field should be visible */ + expect((await cisIntegrationGcp.checkGcpFieldExist(PRJ_ID_TEST_ID)) === 1).to.be(true); + expect((await cisIntegrationGcp.checkGcpFieldExist(ORG_ID_TEST_ID)) === 1).to.be(true); + expect((await cisIntegrationGcp.checkGcpFieldExist(CREDENTIALS_TYPE_TEST_ID)) === 1).to.be( + true + ); + + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + /* Check for existing fields. In Google Cloud Shell, Credential field should NOT be visible */ + expect((await cisIntegrationGcp.checkGcpFieldExist(PRJ_ID_TEST_ID)) === 1).to.be(true); + expect((await cisIntegrationGcp.checkGcpFieldExist(ORG_ID_TEST_ID)) === 1).to.be(true); + expect((await cisIntegrationGcp.checkGcpFieldExist(CREDENTIALS_TYPE_TEST_ID)) === 0).to.be( + true + ); + }); + + it('Post Installation Google Cloud Shell modal pops up after user clicks on Save button when adding integration, when there are no Project ID or Organization ID provided, it should use default value', async () => { + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_ORGANIZATION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect((await cisIntegrationGcp.isPostInstallGoogleCloudShellModal(true)) === true).to.be( + true + ); + }); + + it('Post Installation Google Cloud Shell modal pops up after user clicks on Save button when adding integration, when there are Project ID or Organization ID provided, it should use that value', async () => { + const projectName = 'PRJ_NAME_TEST'; + const organizationName = 'ORG_NAME_TEST'; + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_ORGANIZATION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + await cisIntegrationGcp.fillInTextField('project_id_test_id', projectName); + await cisIntegrationGcp.fillInTextField('organization_id_test_id', organizationName); + + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect( + (await cisIntegrationGcp.isPostInstallGoogleCloudShellModal( + true, + organizationName, + projectName + )) === true + ).to.be(true); + }); + + it('Organization ID field on cloud shell command should only be shown if user chose Google Cloud Shell, if user chose Single Account it shouldn not show up', async () => { + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect((await cisIntegrationGcp.isPostInstallGoogleCloudShellModal(false)) === true).to.be( + true + ); + }); + }); + + describe('CIS_GCP Single', () => { + it('Post Installation Google Cloud Shell modal pops up after user clicks on Save button when adding integration, when there are no Project ID, it should use default value', async () => { + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect((await cisIntegrationGcp.isPostInstallGoogleCloudShellModal(false)) === true).to.be( + true + ); + }); + + it('Post Installation Google Cloud Shell modal pops up after user clicks on Save button when adding integration, when there are Project ID, it should use that value', async () => { + const projectName = 'PRJ_NAME_TEST'; + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_CLOUD_SHELL_TEST_ID); + await cisIntegrationGcp.fillInTextField('project_id_test_id', projectName); + + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect( + (await cisIntegrationGcp.isPostInstallGoogleCloudShellModal(false, '', projectName)) === + true + ).to.be(true); + }); + + it('Users are able to add CIS_GCP Integration with Manual settings using Credentials File', async () => { + const projectName = 'PRJ_NAME_TEST'; + const credentialFileName = 'CRED_FILE_TEST_NAME'; + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_MANUAL_TEST_ID); + await cisIntegrationGcp.fillInTextField(PRJ_ID_TEST_ID, projectName); + await cisIntegrationGcp.fillInTextField(CREDENTIALS_FILE_TEST_ID, credentialFileName); + + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect((await cisIntegrationGcp.getPostInstallModal()) !== undefined).to.be(true); + await cisIntegration.navigateToIntegrationCspList(); + expect( + (await cisIntegrationGcp.getFieldValueInEditPage(CREDENTIALS_FILE_TEST_ID)) === + credentialFileName + ).to.be(true); + }); + + it('Users are able to add CIS_GCP Integration with Manual settings using Credentials JSON', async () => { + const projectName = 'PRJ_NAME_TEST'; + const credentialJsonName = 'CRED_JSON_TEST_NAME'; + await cisIntegrationGcp.clickOptionButton(CIS_GCP_OPTION_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_SINGLE_ACCOUNT_TEST_ID); + await cisIntegrationGcp.clickOptionButton(GCP_MANUAL_TEST_ID); + await cisIntegrationGcp.fillInTextField(PRJ_ID_TEST_ID, projectName); + await cisIntegrationGcp.chooseDropDown( + CREDENTIALS_TYPE_TEST_ID, + 'credentials_json_option_test_id' + ); + await cisIntegrationGcp.fillInTextField(CREDENTIALS_JSON_TEST_ID, credentialJsonName); + + await cisIntegrationGcp.clickSaveButton(); + pageObjects.header.waitUntilLoadingHasFinished(); + expect((await cisIntegrationGcp.getPostInstallModal()) !== undefined).to.be(true); + await cisIntegration.navigateToIntegrationCspList(); + expect( + (await cisIntegrationGcp.getFieldValueInEditPage(CREDENTIALS_JSON_TEST_ID)) === + credentialJsonName + ).to.be(true); + }); + }); + }); +} diff --git a/x-pack/test/cloud_security_posture_functional/pages/findings.ts b/x-pack/test/cloud_security_posture_functional/pages/findings.ts index 2dbee8496998a..69c1fd6949f51 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/findings.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/findings.ts @@ -164,7 +164,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe('Table Sort', () => { + // FLAKY: https://github.com/elastic/kibana/issues/152913 + describe.skip('Table Sort', () => { type SortingMethod = (a: string, b: string) => number; type SortDirection = 'asc' | 'desc'; // Sort by lexical order will sort by the first character of the string (case-sensitive) diff --git a/x-pack/test/cloud_security_posture_functional/pages/index.ts b/x-pack/test/cloud_security_posture_functional/pages/index.ts index c1bcdaea38cf8..9d4e17ec0c88c 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/index.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/index.ts @@ -15,5 +15,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./findings_alerts')); loadTestFile(require.resolve('./compliance_dashboard')); loadTestFile(require.resolve('./vulnerability_dashboard')); + loadTestFile(require.resolve('./cis_integration')); }); } diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/init_and_status_apis.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/init_and_status_apis.ts index 8f651ae70b5c7..ab1dbb8dbbcd2 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/init_and_status_apis.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/init_and_status_apis.ts @@ -18,6 +18,8 @@ import { installLegacyRiskScore, getLegacyRiskScoreDashboards, clearLegacyDashboards, + deleteRiskEngineTask, + deleteAllRiskScores, } from './utils'; // eslint-disable-next-line import/no-default-export @@ -29,6 +31,16 @@ export default ({ getService }: FtrProviderContext) => { const log = getService('log'); describe('Risk Engine', () => { + beforeEach(async () => { + await cleanRiskEngineConfig({ kibanaServer }); + await deleteRiskEngineTask({ es, log }); + await deleteAllRiskScores(log, es); + await clearTransforms({ + es, + log, + }); + }); + afterEach(async () => { await cleanRiskEngineConfig({ kibanaServer, @@ -45,10 +57,11 @@ export default ({ getService }: FtrProviderContext) => { supertest, log, }); + await deleteRiskEngineTask({ es, log }); }); // FLAKY: https://github.com/elastic/kibana/issues/168376 - describe.skip('init api', () => { + describe('init api', () => { it('should return response with success status', async () => { const response = await riskEngineRoutes.init(); expect(response.body).to.eql({ @@ -350,7 +363,7 @@ export default ({ getService }: FtrProviderContext) => { }); // FLAKY: https://github.com/elastic/kibana/issues/168355 - describe.skip('status api', () => { + describe('status api', () => { it('should disable / enable risk engine', async () => { const status1 = await riskEngineRoutes.getStatus(); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_score_calculation.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_score_calculation.ts index 31a00c92593df..f03214e301dd1 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_score_calculation.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_score_calculation.ts @@ -38,7 +38,7 @@ export default ({ getService }: FtrProviderContext): void => { const { body: result } = await supertest .post(RISK_SCORE_CALCULATION_URL) .set('kbn-xsrf', 'true') - .set('elastic-api-version', '2023-10-31') + .set('elastic-api-version', '1') .send(body) .expect(200); return result; diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_scoring_task_execution.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_scoring_task_execution.ts index 9de57ceb970b4..6a95d236a9d0a 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_scoring_task_execution.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/risk_scoring_task_execution.ts @@ -24,6 +24,7 @@ import { cleanRiskEngineConfig, waitForRiskEngineTaskToBeGone, deleteRiskScoreIndices, + clearTransforms, } from './utils'; // eslint-disable-next-line import/no-default-export @@ -37,8 +38,7 @@ export default ({ getService }: FtrProviderContext): void => { const createAndSyncRuleAndAlerts = createAndSyncRuleAndAlertsFactory({ supertest, log }); const riskEngineRoutes = riskEngineRouteHelpersFactory(supertest); - // Failing: See https://github.com/elastic/kibana/issues/168424 - describe.skip('Risk Engine - Risk Scoring Task', () => { + describe('Risk Engine - Risk Scoring Task', () => { context('with auditbeat data', () => { const { indexListOfDocuments } = dataGeneratorFactory({ es, @@ -62,6 +62,7 @@ export default ({ getService }: FtrProviderContext): void => { await deleteAllRiskScores(log, es); await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); + await clearTransforms({ es, log }); }); afterEach(async () => { @@ -70,6 +71,7 @@ export default ({ getService }: FtrProviderContext): void => { await deleteAllRiskScores(log, es); await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); + await clearTransforms({ es, log }); }); describe('with some alerts containing hosts', () => { @@ -94,8 +96,7 @@ export default ({ getService }: FtrProviderContext): void => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/168415 - describe.skip('initializing the risk engine', () => { + describe('initializing the risk engine', () => { beforeEach(async () => { await riskEngineRoutes.init(); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/telemetry_usage.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/telemetry_usage.ts index 5306937a97ab5..2e7888fe00591 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/telemetry_usage.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/risk_engine/telemetry_usage.ts @@ -17,6 +17,7 @@ import { waitForRiskScoresToBePresent, riskEngineRouteHelpersFactory, cleanRiskEngineConfig, + clearTransforms, } from './utils'; import { dataGeneratorFactory } from '../../../utils/data_generator'; @@ -53,6 +54,7 @@ export default ({ getService }: FtrProviderContext) => { await deleteRiskScoreIndices({ log, es }); await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); + await clearTransforms({ es, log }); }); describe('Risk engine not enabled', () => { @@ -66,7 +68,7 @@ export default ({ getService }: FtrProviderContext) => { }); // FLAKY: https://github.com/elastic/kibana/issues/168429 - describe.skip('Risk engine enabled', () => { + describe('Risk engine enabled', () => { let hostId: string; let userId: string; @@ -108,6 +110,7 @@ export default ({ getService }: FtrProviderContext) => { await deleteRiskScoreIndices({ log, es }); await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); + await clearTransforms({ es, log }); }); it('should return riskEngineMetrics with expected values', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/agents/services.ts b/x-pack/test/fleet_api_integration/apis/agents/services.ts index e710e62a7568e..7cb04d895ce7c 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/services.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/services.ts @@ -9,6 +9,8 @@ import supertest from 'supertest'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import { format as formatUrl } from 'url'; +import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; + import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; export function getSupertestWithoutAuth({ getService }: FtrProviderContext) { @@ -45,12 +47,14 @@ export function setupFleetAndAgents(providerContext: FtrProviderContext) { await supetestWithoutAuth .post(`/api/fleet/setup`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxx') .set('Authorization', `Bearer ${token.value}`) .send() .expect(200); await supetestWithoutAuth .post(`/api/fleet/agents/setup`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set('kbn-xsrf', 'xxx') .set('Authorization', `Bearer ${token.value}`) .send({ forceRecreate: true }) diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.js b/x-pack/test/functional/apps/discover/async_scripted_fields.js index f5143e5fcc084..5810830aec3a6 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.js +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.js @@ -81,7 +81,7 @@ export default function ({ getService, getPageObjects }) { 'dscNoResultsInterceptedWarningsCallout_warningTitle' ); log.debug(shardMessage); - expect(shardMessage).to.be('The data might be incomplete or wrong.'); + expect(shardMessage).to.be('Results are partial and may be incomplete.'); }); }); diff --git a/x-pack/test/functional/apps/index_management/data_streams_tab/data_streams_tab.ts b/x-pack/test/functional/apps/index_management/data_streams_tab/data_streams_tab.ts index c801c40c7e067..eea731575f8f3 100644 --- a/x-pack/test/functional/apps/index_management/data_streams_tab/data_streams_tab.ts +++ b/x-pack/test/functional/apps/index_management/data_streams_tab/data_streams_tab.ts @@ -12,8 +12,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const pageObjects = getPageObjects(['common', 'indexManagement', 'header']); const toasts = getService('toasts'); const log = getService('log'); - const dataStreams = getService('dataStreams'); const browser = getService('browser'); + const es = getService('es'); const security = getService('security'); const testSubjects = getService('testSubjects'); @@ -23,15 +23,32 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { before(async () => { await log.debug('Creating required data stream'); try { - await dataStreams.createDataStream( - TEST_DS_NAME, - { - '@timestamp': { - type: 'date', + await es.indices.putIndexTemplate({ + name: `${TEST_DS_NAME}_index_template`, + index_patterns: [TEST_DS_NAME], + data_stream: {}, + _meta: { + description: `Template for ${TEST_DS_NAME} testing index`, + }, + template: { + settings: { mode: undefined }, + mappings: { + properties: { + '@timestamp': { + type: 'date', + }, + }, + }, + lifecycle: { + // @ts-expect-error @elastic/elasticsearch enabled prop is not typed yet + enabled: true, }, }, - false - ); + }); + + await es.indices.createDataStream({ + name: TEST_DS_NAME, + }); } catch (e) { log.debug('[Setup error] Error creating test data stream'); throw e; @@ -49,7 +66,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await log.debug('Cleaning up created data stream'); try { - await dataStreams.deleteDataStream(TEST_DS_NAME); + await es.indices.deleteDataStream({ name: TEST_DS_NAME }); + await es.indices.deleteIndexTemplate({ + name: `${TEST_DS_NAME}_index_template`, + }); } catch (e) { log.debug('[Teardown error] Error deleting test data stream'); throw e; diff --git a/x-pack/test/functional/apps/infra/node_details.ts b/x-pack/test/functional/apps/infra/node_details.ts index 89a4ec813cca3..a824106c6f617 100644 --- a/x-pack/test/functional/apps/infra/node_details.ts +++ b/x-pack/test/functional/apps/infra/node_details.ts @@ -346,50 +346,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - describe('#With Nginx section', () => { - before(async () => { - await navigateToNodeDetails('demo-stack-nginx-01', 'demo-stack-nginx-01'); - await pageObjects.header.waitUntilLoadingHasFinished(); - }); - - describe('Overview Tab', () => { - before(async () => { - await pageObjects.assetDetails.clickOverviewTab(); - - await pageObjects.timePicker.setAbsoluteRange( - START_HOST_ALERTS_DATE.format(DATE_PICKER_FORMAT), - END_HOST_ALERTS_DATE.format(DATE_PICKER_FORMAT) - ); - }); - - [ - { metric: 'cpuUsage', value: '0.8%' }, - { metric: 'normalizedLoad1m', value: '1.4%' }, - { metric: 'memoryUsage', value: '18.0%' }, - { metric: 'diskSpaceUsage', value: '17.5%' }, - ].forEach(({ metric, value }) => { - it(`${metric} tile should show ${value}`, async () => { - await retry.tryForTime(3 * 1000, async () => { - const tileValue = await pageObjects.assetDetails.getAssetDetailsKPITileValue( - metric - ); - expect(tileValue).to.eql(value); - }); - }); - }); - - it('should render 12 charts in the Metrics section', async () => { - const hosts = await pageObjects.assetDetails.getAssetDetailsMetricsCharts(); - expect(hosts.length).to.equal(12); - }); - - it('should render 3 charts in the Nginx Metrics section', async () => { - const hosts = await pageObjects.assetDetails.getAssetDetailsNginxMetricsCharts(); - expect(hosts.length).to.equal(3); - }); - }); - }); - describe('#With Kubernetes section', () => { before(async () => { await navigateToNodeDetails('demo-stack-kubernetes-01', 'demo-stack-kubernetes-01'); diff --git a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts index a0cd70db3655a..5195997c3ba31 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts @@ -6,8 +6,38 @@ */ import { FtrProviderContext } from '../../../ftr_provider_context'; -import { farequoteDataViewTestDataWithQuery } from '../../aiops/log_rate_analysis_test_data'; -import { TestData } from '../../aiops/types'; + +export const farequoteKQLFiltersSearchTestData = { + suiteTitle: 'KQL saved search and filters', + isSavedSearch: true, + dateTimeField: '@timestamp', + sourceIndexOrSavedSearch: 'ft_farequote_filter_and_kuery', + chartClickCoordinates: [0, 0] as [number, number], + dataViewName: 'ft_farequote', + totalDocCount: '5,674', +}; + +const dataViewCreationTestData = { + suiteTitle: 'from data view creation mode', + isSavedSearch: true, + dateTimeField: '@timestamp', + chartClickCoordinates: [0, 0] as [number, number], + totalDocCount: '86,274', +}; + +const nonTimeSeriesTestData = { + suiteTitle: 'from data view creation mode', + isSavedSearch: false, + dateTimeField: '@timestamp', + sourceIndexOrSavedSearch: 'ft_ihp_outlier', + chartClickCoordinates: [0, 0] as [number, number], + dataViewName: 'ft_ihp_outlier', +}; + +type TestData = + | typeof farequoteKQLFiltersSearchTestData + | typeof dataViewCreationTestData + | typeof nonTimeSeriesTestData; export default function ({ getService, getPageObjects }: FtrProviderContext) { const ml = getService('ml'); @@ -15,97 +45,193 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const elasticChart = getService('elasticChart'); const esArchiver = getService('esArchiver'); - function runTests(testData: TestData) { - it(`${testData.suiteTitle} loads the source data in data drift`, async () => { - await elasticChart.setNewChartUiDebugFlag(true); - - await ml.testExecution.logTestStep( - `${testData.suiteTitle} loads the saved search selection page` - ); - await ml.navigation.navigateToDataDrift(); - - await ml.testExecution.logTestStep( - `${testData.suiteTitle} loads the data drift index or saved search select page` - ); - await ml.jobSourceSelection.selectSourceForDataDrift(testData.sourceIndexOrSavedSearch); - }); + async function assertDataDriftPageContent(testData: TestData) { + await PageObjects.header.waitUntilLoadingHasFinished(); - it(`${testData.suiteTitle} displays index details`, async () => { - await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the time range step`); - await ml.dataDrift.assertTimeRangeSelectorSectionExists(); + await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the time range step`); + await ml.dataDrift.assertTimeRangeSelectorSectionExists(); - await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); - await ml.dataDrift.clickUseFullDataButton(); + await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); + await ml.dataDrift.clickUseFullDataButton(); - await ml.dataDrift.setRandomSamplingOption('Reference', 'dvRandomSamplerOptionOff'); - await ml.dataDrift.setRandomSamplingOption('Comparison', 'dvRandomSamplerOptionOff'); + await ml.dataDrift.setRandomSamplingOption('Reference', 'dvRandomSamplerOptionOff'); + await ml.dataDrift.setRandomSamplingOption('Comparison', 'dvRandomSamplerOptionOff'); - await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.header.waitUntilLoadingHasFinished(); - await ml.testExecution.logTestStep( - `${testData.suiteTitle} displays elements in the doc count panel correctly` - ); - await ml.dataDrift.assertPrimarySearchBarExists(); - await ml.dataDrift.assertReferenceDocCountContent(); - await ml.dataDrift.assertComparisonDocCountContent(); + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays elements in the doc count panel correctly` + ); + await ml.dataDrift.assertPrimarySearchBarExists(); + await ml.dataDrift.assertReferenceDocCountContent(); + await ml.dataDrift.assertComparisonDocCountContent(); - await ml.testExecution.logTestStep( - `${testData.suiteTitle} displays elements in the page correctly` - ); - await ml.dataDrift.assertNoWindowParametersEmptyPromptExists(); + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays elements on the page correctly` + ); + await ml.dataDrift.assertNoWindowParametersEmptyPromptExists(); + if (testData.chartClickCoordinates) { await ml.testExecution.logTestStep('clicks the document count chart to start analysis'); await ml.dataDrift.clickDocumentCountChart( 'dataDriftDocCountChart-Reference', testData.chartClickCoordinates ); - await ml.dataDrift.runAnalysis(); - }); + } + await ml.dataDrift.runAnalysis(); } describe('data drift', async function () { - for (const testData of [farequoteDataViewTestDataWithQuery]) { - describe(`with '${testData.sourceIndexOrSavedSearch}'`, function () { - before(async () => { - await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); - - await ml.testResources.createIndexPatternIfNeeded( - testData.sourceIndexOrSavedSearch, - '@timestamp' - ); - - await ml.testResources.setKibanaTimeZoneToUTC(); - - if (testData.dataGenerator === 'kibana_sample_data_logs') { - await PageObjects.security.login('elastic', 'changeme', { - expectSuccess: true, - }); - - await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { - useActualUrl: true, - }); - await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.home.addSampleDataSet('logs'); - await PageObjects.header.waitUntilLoadingHasFinished(); - } else { - await ml.securityUI.loginAsMlPowerUser(); - } - }); - - after(async () => { - await elasticChart.setNewChartUiDebugFlag(false); - await ml.testResources.deleteIndexPatternByTitle(testData.sourceIndexOrSavedSearch); - await esArchiver.unload('x-pack/test/functional/es_archives/ml/farequote'); - }); - - it(`${testData.suiteTitle} loads the ml page`, async () => { - // Start navigation from the base of the ML app. - await ml.navigation.navigateToMl(); - await elasticChart.setNewChartUiDebugFlag(true); - }); - - runTests(testData); + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ihp_outlier'); + await ml.testResources.createIndexPatternIfNeeded('ft_ihp_outlier'); + + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + await ml.testResources.createIndexPatternIfNeeded('ft_farequote', '@timestamp'); + await ml.testResources.createSavedSearchFarequoteFilterAndKueryIfNeeded(); + + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.securityUI.loginAsMlPowerUser(); + }); + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/ml/ihp_outlier'); + await esArchiver.unload('x-pack/test/functional/es_archives/ml/farequote'); + await Promise.all([ + ml.testResources.deleteIndexPatternByTitle('ft_fare*'), + ml.testResources.deleteIndexPatternByTitle('ft_fare*,ft_fareq*'), + ml.testResources.deleteIndexPatternByTitle('ft_farequote'), + ml.testResources.deleteIndexPatternByTitle('ft_ihp_outlier'), + ]); + }); + + describe('with ft_farequote_filter_and_kuery from index selection page', async function () { + after(async () => { + await elasticChart.setNewChartUiDebugFlag(false); }); - } + + it(`${farequoteKQLFiltersSearchTestData.suiteTitle} loads the ml page`, async () => { + // Start navigation from the base of the ML app. + await ml.navigation.navigateToMl(); + await elasticChart.setNewChartUiDebugFlag(true); + }); + + it(`${farequoteKQLFiltersSearchTestData.suiteTitle} loads the source data in data drift`, async () => { + await ml.testExecution.logTestStep( + `${farequoteKQLFiltersSearchTestData.suiteTitle} loads the data drift index or saved search select page` + ); + await ml.navigation.navigateToDataDrift(); + + await ml.testExecution.logTestStep( + `${farequoteKQLFiltersSearchTestData.suiteTitle} loads the data drift view` + ); + await ml.jobSourceSelection.selectSourceForDataDrift( + farequoteKQLFiltersSearchTestData.sourceIndexOrSavedSearch + ); + await assertDataDriftPageContent(farequoteKQLFiltersSearchTestData); + + if (farequoteKQLFiltersSearchTestData.dataViewName !== undefined) { + await ml.dataDrift.assertDataViewTitle(farequoteKQLFiltersSearchTestData.dataViewName); + } + + await ml.dataDrift.assertTotalDocumentCount( + 'Reference', + farequoteKQLFiltersSearchTestData.totalDocCount + ); + await ml.dataDrift.assertTotalDocumentCount( + 'Comparison', + farequoteKQLFiltersSearchTestData.totalDocCount + ); + }); + }); + + describe(dataViewCreationTestData.suiteTitle, function () { + beforeEach(`${dataViewCreationTestData.suiteTitle} loads the ml page`, async () => { + // Start navigation from the base of the ML app. + await ml.navigation.navigateToMl(); + await elasticChart.setNewChartUiDebugFlag(true); + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} loads the saved search selection page` + ); + await ml.navigation.navigateToDataDrift(); + }); + + it(`${dataViewCreationTestData.suiteTitle} allows analyzing data drift without saving`, async () => { + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} creates new data view` + ); + await ml.dataDrift.navigateToCreateNewDataViewPage(); + await ml.dataDrift.assertIndexPatternNotEmptyFormErrorExists('reference'); + await ml.dataDrift.assertIndexPatternNotEmptyFormErrorExists('comparison'); + await ml.dataDrift.assertAnalyzeWithoutSavingButtonState(true); + await ml.dataDrift.assertAnalyzeDataDriftButtonState(true); + + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} sets index patterns` + ); + await ml.dataDrift.setIndexPatternInput('reference', 'ft_fare*'); + await ml.dataDrift.setIndexPatternInput('comparison', 'ft_fareq*'); + + await ml.dataDrift.selectTimeField(dataViewCreationTestData.dateTimeField); + + await ml.dataDrift.assertAnalyzeWithoutSavingButtonState(false); + await ml.dataDrift.assertAnalyzeDataDriftButtonState(false); + + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} redirects to data drift page` + ); + await ml.dataDrift.clickAnalyzeWithoutSavingButton(); + await assertDataDriftPageContent(dataViewCreationTestData); + await ml.dataDrift.assertDataViewTitle('ft_fare*,ft_fareq*'); + await ml.dataDrift.assertTotalDocumentCount( + 'Reference', + dataViewCreationTestData.totalDocCount + ); + await ml.dataDrift.assertTotalDocumentCount( + 'Comparison', + dataViewCreationTestData.totalDocCount + ); + }); + + it(`${dataViewCreationTestData.suiteTitle} hides analyze data drift without saving option if patterns are same`, async () => { + await ml.dataDrift.navigateToCreateNewDataViewPage(); + await ml.dataDrift.assertAnalyzeWithoutSavingButtonState(true); + await ml.dataDrift.assertAnalyzeDataDriftButtonState(true); + + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} sets index patterns` + ); + await ml.dataDrift.setIndexPatternInput('reference', 'ft_fare*'); + await ml.dataDrift.setIndexPatternInput('comparison', 'ft_fare*'); + + await ml.dataDrift.assertAnalyzeWithoutSavingButtonMissing(); + await ml.dataDrift.assertAnalyzeDataDriftButtonState(false); + + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} redirects to data drift page` + ); + await ml.dataDrift.clickAnalyzeDataDrift(); + await assertDataDriftPageContent(dataViewCreationTestData); + + await ml.testExecution.logTestStep( + `${dataViewCreationTestData.suiteTitle} does not create new data view, and uses available one with matching index pattern` + ); + await ml.dataDrift.assertDataViewTitle('ft_farequote'); + await ml.dataDrift.assertTotalDocumentCount( + 'Reference', + dataViewCreationTestData.totalDocCount + ); + await ml.dataDrift.assertTotalDocumentCount( + 'Comparison', + dataViewCreationTestData.totalDocCount + ); + }); + + it(`${nonTimeSeriesTestData.suiteTitle} loads non-time series data`, async () => { + await ml.jobSourceSelection.selectSourceForDataDrift( + nonTimeSeriesTestData.sourceIndexOrSavedSearch + ); + await ml.dataDrift.runAnalysis(); + }); + }); }); } diff --git a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts index 67f3728eab9f9..9ae541c834714 100644 --- a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts +++ b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts @@ -67,6 +67,25 @@ export default function ({ getService }: FtrProviderContext) { }, }; + const modelWithPipelineAndDestIndex = { + modelId: 'dfa_regression_model_n_1', + description: '', + modelTypes: ['regression', 'tree_ensemble'], + }; + const modelWithPipelineAndDestIndexExpectedValues = { + dataViewTitle: `user-index_${modelWithPipelineAndDestIndex.modelId}`, + index: `user-index_${modelWithPipelineAndDestIndex.modelId}`, + name: `ml-inference-${modelWithPipelineAndDestIndex.modelId}`, + description: '', + inferenceConfig: { + regression: { + results_field: 'predicted_value', + num_top_feature_importance_values: 0, + }, + }, + fieldMap: {}, + }; + before(async () => { for (const model of trainedModels) { await ml.api.importTrainedModel(model.id, model.name); @@ -77,17 +96,32 @@ export default function ({ getService }: FtrProviderContext) { // Make sure the .ml-stats index is created in advance, see https://github.com/elastic/elasticsearch/issues/65846 await ml.api.assureMlStatsIndexExists(); + + // Create ingest pipeline and destination index that's tied to model + await ml.api.createIngestPipeline(modelWithPipelineAndDestIndex.modelId); + await ml.api.createIndex(modelWithPipelineAndDestIndexExpectedValues.index, undefined, { + index: { default_pipeline: `pipeline_${modelWithPipelineAndDestIndex.modelId}` }, + }); }); after(async () => { await ml.api.stopAllTrainedModelDeploymentsES(); await ml.api.deleteAllTrainedModelsES(); + + await ml.api.cleanMlIndices(); + await ml.api.deleteIndices(modelWithPipelineAndDestIndexExpectedValues.index); + await ml.api.deleteIngestPipeline(modelWithoutPipelineDataExpectedValues.name, false); await ml.api.deleteIngestPipeline( modelWithoutPipelineDataExpectedValues.duplicateName, false ); - await ml.api.cleanMlIndices(); + + // Need to delete index before ingest pipeline, else it will give error + await ml.api.deleteIngestPipeline(modelWithPipelineAndDestIndex.modelId); + await ml.testResources.deleteIndexPatternByTitle( + modelWithPipelineAndDestIndexExpectedValues.dataViewTitle + ); }); describe('for ML user with read-only access', () => { @@ -387,7 +421,43 @@ export default function ({ getService }: FtrProviderContext) { ); }); + it('navigates to data drift', async () => { + await ml.testExecution.logTestStep('should show the model map in the expanded row'); + await ml.trainedModelsTable.ensureRowIsExpanded(modelWithPipelineAndDestIndex.modelId); + await ml.trainedModelsTable.assertModelsMapTabContent(); + + await ml.testExecution.logTestStep( + 'should navigate to data drift index pattern creation page' + ); + + await ml.trainedModelsTable.assertAnalyzeDataDriftActionButtonEnabled( + modelWithPipelineAndDestIndex.modelId, + true + ); + await ml.trainedModelsTable.clickAnalyzeDataDriftActionButton( + modelWithPipelineAndDestIndex.modelId + ); + + await ml.testExecution.logTestStep(`sets index pattern for reference data set`); + await ml.dataDrift.setIndexPatternInput( + 'reference', + `${modelWithPipelineAndDestIndexExpectedValues.index}*` + ); + await ml.dataDrift.assertIndexPatternInput( + 'comparison', + modelWithPipelineAndDestIndexExpectedValues.index + ); + + await ml.testExecution.logTestStep(`redirects to data drift page`); + await ml.trainedModelsTable.clickAnalyzeDataDriftWithoutSaving(); + await ml.navigation.navigateToTrainedModels(); + }); + describe('with imported models', function () { + before(async () => { + await ml.navigation.navigateToTrainedModels(); + }); + for (const model of trainedModels) { it(`renders expanded row content correctly for imported tiny model ${model.id} without pipelines`, async () => { await ml.trainedModelsTable.ensureRowIsExpanded(model.id); diff --git a/x-pack/test/functional/services/ml/data_drift.ts b/x-pack/test/functional/services/ml/data_drift.ts index 2e0eec6f0e10e..b077caafd0bee 100644 --- a/x-pack/test/functional/services/ml/data_drift.ts +++ b/x-pack/test/functional/services/ml/data_drift.ts @@ -8,6 +8,8 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; +type SubjectId = 'reference' | 'comparison'; + export function MachineLearningDataDriftProvider({ getService, getPageObjects, @@ -17,6 +19,7 @@ export function MachineLearningDataDriftProvider({ const PageObjects = getPageObjects(['discover', 'header']); const elasticChart = getService('elasticChart'); const browser = getService('browser'); + const comboBox = getService('comboBox'); type RandomSamplerOption = | 'dvRandomSamplerOptionOnAutomatic' @@ -29,11 +32,27 @@ export function MachineLearningDataDriftProvider({ return `${testSubject}-${id}`; }, + async assertDataViewTitle(expectedTitle: string) { + const selector = 'mlDataDriftPageDataViewTitle'; + await testSubjects.existOrFail(selector); + await retry.tryForTime(5000, async () => { + const title = await testSubjects.getVisibleText(selector); + expect(title).to.eql( + expectedTitle, + `Expected data drift page's data view title to be '${expectedTitle}' (got '${title}')` + ); + }); + }, + async assertTimeRangeSelectorSectionExists() { await testSubjects.existOrFail('dataComparisonTimeRangeSelectorSection'); }, - async assertTotalDocumentCount(selector: string, expectedFormattedTotalDocCount: string) { + async assertTotalDocumentCount( + id: 'Reference' | 'Comparison', + expectedFormattedTotalDocCount: string + ) { + const selector = `dataVisualizerTotalDocCount-${id}`; await retry.tryForTime(5000, async () => { const docCount = await testSubjects.getVisibleText(selector); expect(docCount).to.eql( @@ -206,9 +225,126 @@ export function MachineLearningDataDriftProvider({ async runAnalysis() { await retry.tryForTime(5000, async () => { await testSubjects.click(`aiopsRerunAnalysisButton`); - // As part of the interface for the histogram brushes, the button to clear the selection should be present await this.assertDataDriftTableExists(); }); }, + + async navigateToCreateNewDataViewPage() { + await retry.tryForTime(5000, async () => { + await testSubjects.click(`dataDriftCreateDataViewButton`); + await testSubjects.existOrFail(`mlPageDataDriftCustomIndexPatterns`); + }); + }, + + async assertIndexPatternNotEmptyFormErrorExists(id: SubjectId) { + const subj = `mlDataDriftIndexPatternFormRow-${id ?? ''}`; + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail(subj); + const row = await testSubjects.find(subj); + const errorElements = await row.findAllByClassName('euiFormErrorText'); + expect(await errorElements[0].getVisibleText()).eql('Index pattern must not be empty.'); + }); + }, + + async assertIndexPatternInput(id: SubjectId, expectedText: string) { + const inputSelector = `mlDataDriftIndexPatternTitleInput-${id}`; + + await retry.tryForTime(5000, async () => { + const input = await testSubjects.find(inputSelector); + const text = await input.getAttribute('value'); + expect(text).eql( + expectedText, + `Expected ${inputSelector} to have text ${expectedText} (got ${text})` + ); + }); + }, + + async setIndexPatternInput(id: SubjectId, pattern: string) { + const inputSelector = `mlDataDriftIndexPatternTitleInput-${id}`; + + // The input for index pattern automatically appends "*" at the end of the string + // So here we just omit that * at the end to avoid double characters + + await retry.tryForTime(10 * 1000, async () => { + const hasWildCard = pattern.endsWith('*'); + const trimmedPattern = hasWildCard ? pattern.substring(0, pattern.length - 1) : pattern; + + const input = await testSubjects.find(inputSelector); + await input.clearValue(); + + await testSubjects.setValue(inputSelector, trimmedPattern, { + clearWithKeyboard: true, + typeCharByChar: true, + }); + + if (!hasWildCard) { + // If original pattern does not have wildcard, make to delete the wildcard + await input.focus(); + await browser.pressKeys(browser.keys.DELETE); + } + + await this.assertIndexPatternInput(id, pattern); + }); + }, + + async assertAnalyzeWithoutSavingButtonMissing() { + await retry.tryForTime(5000, async () => { + await testSubjects.missingOrFail('analyzeDataDriftWithoutSavingButton'); + }); + }, + + async assertAnalyzeWithoutSavingButtonState(disabled = true) { + await retry.tryForTime(5000, async () => { + const isDisabled = !(await testSubjects.isEnabled('analyzeDataDriftWithoutSavingButton')); + expect(isDisabled).to.equal( + disabled, + `Expect analyze without saving button disabled state to be ${disabled} (got ${isDisabled})` + ); + }); + }, + + async assertAnalyzeDataDriftButtonState(disabled = true) { + await retry.tryForTime(5000, async () => { + const isDisabled = !(await testSubjects.isEnabled('analyzeDataDriftButton')); + expect(isDisabled).to.equal( + disabled, + `Expect analyze data drift button disabled state to be ${disabled} (got ${isDisabled})` + ); + }); + }, + + async clickAnalyzeWithoutSavingButton() { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail('analyzeDataDriftWithoutSavingButton'); + await testSubjects.click('analyzeDataDriftWithoutSavingButton'); + await testSubjects.existOrFail(`mlPageDataDriftCustomIndexPatterns`); + }); + }, + + async clickAnalyzeDataDrift() { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail('analyzeDataDriftButton'); + await testSubjects.click('analyzeDataDriftButton'); + await testSubjects.existOrFail(`mlPageDataDriftCustomIndexPatterns`); + }); + }, + + async assertDataDriftTimestampField(expectedIdentifier: string) { + await retry.tryForTime(2000, async () => { + const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( + 'mlDataDriftTimestampField > comboBoxInput' + ); + expect(comboBoxSelectedOptions).to.eql( + expectedIdentifier === '' ? [] : [expectedIdentifier], + `Expected type field to be '${expectedIdentifier}' (got '${comboBoxSelectedOptions}')` + ); + }); + }, + + async selectTimeField(timeFieldName: string) { + await comboBox.set('mlDataDriftTimestampField', timeFieldName); + + await this.assertDataDriftTimestampField(timeFieldName); + }, }; } diff --git a/x-pack/test/functional/services/ml/trained_models_table.ts b/x-pack/test/functional/services/ml/trained_models_table.ts index 6616d61a78f42..878d1a0d8d1d1 100644 --- a/x-pack/test/functional/services/ml/trained_models_table.ts +++ b/x-pack/test/functional/services/ml/trained_models_table.ts @@ -226,6 +226,71 @@ export function TrainedModelsTableProvider( ); } + public async assertModelAnalyzeDataDriftButtonExists(modelId: string, expectedValue: boolean) { + const actionsExists = await testSubjects.exists( + this.rowSelector(modelId, 'mlModelsAnalyzeDataDriftAction') + ); + + expect(actionsExists).to.eql( + expectedValue, + `Expected row analyze data drift action button for trained model '${modelId}' to be ${ + expectedValue ? 'visible' : 'hidden' + } (got ${actionsExists ? 'visible' : 'hidden'})` + ); + } + + public async assertAnalyzeDataDriftActionButtonEnabled( + modelId: string, + expectedValue: boolean + ) { + const actionsButtonExists = await this.doesModelCollapsedActionsButtonExist(modelId); + + let isEnabled = null; + await retry.tryForTime(5 * 1000, async () => { + if (actionsButtonExists) { + await this.toggleActionsContextMenu(modelId, true); + const panelElement = await find.byCssSelector('.euiContextMenuPanel'); + const actionButton = await panelElement.findByTestSubject('mlModelsTableRowDeleteAction'); + isEnabled = await actionButton.isEnabled(); + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + } else { + await this.assertModelDeleteActionButtonExists(modelId, true); + isEnabled = await testSubjects.isEnabled( + this.rowSelector(modelId, 'mlModelsAnalyzeDataDriftAction') + ); + } + + expect(isEnabled).to.eql( + expectedValue, + `Expected row analyze data drift action button for trained model '${modelId}' to be '${ + expectedValue ? 'enabled' : 'disabled' + }' (got '${isEnabled ? 'enabled' : 'disabled'}')` + ); + }); + } + + public async clickAnalyzeDataDriftActionButton(modelId: string) { + await retry.tryForTime(30 * 1000, async () => { + const actionsButtonExists = await this.doesModelCollapsedActionsButtonExist(modelId); + if (actionsButtonExists) { + await this.toggleActionsContextMenu(modelId, true); + const panelElement = await find.byCssSelector('.euiContextMenuPanel'); + const actionButton = await panelElement.findByTestSubject( + 'mlModelsAnalyzeDataDriftAction' + ); + await actionButton.click(); + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + } else { + await this.assertModelDeleteActionButtonExists(modelId, true); + await testSubjects.click(this.rowSelector(modelId, 'mlModelsAnalyzeDataDriftAction')); + } + + await testSubjects.existOrFail('mlPageDataDriftCustomIndexPatterns'); + }); + } + public async assertModelTestButtonExists(modelId: string, expectedValue: boolean) { const actionExists = await testSubjects.exists( this.rowSelector(modelId, 'mlModelsTableRowTestAction') @@ -480,7 +545,7 @@ export function TrainedModelsTableProvider( } public async assertTabContent( - type: 'details' | 'stats' | 'inferenceConfig' | 'pipelines', + type: 'details' | 'stats' | 'inferenceConfig' | 'pipelines' | 'map', expectVisible = true ) { const tabTestSubj = `mlTrainedModel${upperFirst(type)}`; @@ -500,6 +565,10 @@ export function TrainedModelsTableProvider( await this.assertTabContent('details', expectVisible); } + public async assertModelsMapTabContent(expectVisible = true) { + await this.assertTabContent('map', expectVisible); + } + public async assertInferenceConfigTabContent(expectVisible = true) { await this.assertTabContent('inferenceConfig', expectVisible); } @@ -526,5 +595,12 @@ export function TrainedModelsTableProvider( } } } + + public async clickAnalyzeDataDriftWithoutSaving() { + await retry.tryForTime(5 * 1000, async () => { + await testSubjects.clickWhenNotDisabled('analyzeDataDriftWithoutSavingButton'); + await testSubjects.existOrFail('mlDataDriftTable'); + }); + } })(); } diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts index b2732c064721b..2d5c8a1815214 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/details.ts @@ -420,8 +420,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/168027 - describe.skip('Edit rule with deleted connector', function () { + describe('Edit rule with deleted connector', function () { const testRunUuid = uuidv4(); afterEach(async () => { diff --git a/x-pack/test/observability_api_integration/apis/composite_slo/create.ts b/x-pack/test/observability_api_integration/apis/composite_slo/create.ts deleted file mode 100644 index 0da6c395e83ce..0000000000000 --- a/x-pack/test/observability_api_integration/apis/composite_slo/create.ts +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../common/ftr_provider_context'; -import { createCompositeSLOInput } from '../../fixtures/composite_slo'; - -export default function ({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - const kibanaServer = getService('kibanaServer'); - - describe.skip('create >', () => { - const security = getService('security'); - - before(async () => { - await security.testUser.setRoles(['slo_all']); - await kibanaServer.importExport.load( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/slo.json' - ); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - await kibanaServer.importExport.unload( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/slo.json' - ); - }); - - it('returns a 400 with invalid payload', async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send({}) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain('Invalid value undefined supplied to'); - }); - }); - - it('returns a 400 when the number of source SLOs is less than 2', async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - sources: [{ id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }], - }) - ) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain( - 'A composite SLO must contain between 2 and 30 source SLOs.' - ); - }); - }); - - it('returns a 400 when the source SLOs are not found', async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - sources: [ - { id: 'inexistant', revision: 1, weight: 1 }, - { id: 'inexistant2', revision: 1, weight: 1 }, - ], - }) - ) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain( - 'One or many source SLOs are not matching the specified id and revision.' - ); - }); - }); - - it("returns a 400 when the source SLOs' time window don't match", async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - timeWindow: { - duration: '30d', - type: 'rolling', - }, - sources: [ - { id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }, - { id: 'f6694b30-f97c-11ed-895c-170d13e61076', revision: 1, weight: 2 }, - ], - }) - ) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain( - 'Invalid time window. Every source SLO must use the same time window as the composite.' - ); - }); - }); - - it('returns a 400 when timeslices window is not defined for a timeslices budgeting method', async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - budgetingMethod: 'timeslices', - objective: { - target: 0.9, - }, - sources: [ - { id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }, - { id: 'f6694b30-f97c-11ed-895c-170d13e61076', revision: 1, weight: 2 }, - ], - }) - ) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain( - 'Invalid timeslices objective. A timeslice window must be set and equal to all source SLO.' - ); - }); - }); - - it("returns a 400 when the source SLOs' budgeting method don't match", async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - budgetingMethod: 'timeslices', - objective: { - target: 0.9, - timesliceTarget: 0.95, - timesliceWindow: '1m', - }, - sources: [ - { id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }, - { id: 'f6694b30-f97c-11ed-895c-170d13e61076', revision: 1, weight: 2 }, - ], - }) - ) - .expect(400) - .then((resp) => { - expect(resp.body.error).to.eql('Bad Request'); - expect(resp.body.message).to.contain( - 'Invalid budgeting method. Every source SLO must use the same timeslice window.' - ); - }); - }); - - describe('happy path', () => { - it('returns a 200', async () => { - await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - sources: [ - { id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }, - { id: 'f6694b30-f97c-11ed-895c-170d13e61076', revision: 1, weight: 2 }, - ], - }) - ) - .expect(200) - .then((resp) => { - expect(resp.body.id).to.be.ok(); - }); - }); - }); - }); -} diff --git a/x-pack/test/observability_api_integration/apis/composite_slo/delete.ts b/x-pack/test/observability_api_integration/apis/composite_slo/delete.ts deleted file mode 100644 index bd4f80f2ef550..0000000000000 --- a/x-pack/test/observability_api_integration/apis/composite_slo/delete.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../common/ftr_provider_context'; - -export default function ({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - const kibanaServer = getService('kibanaServer'); - - describe.skip('delete >', () => { - const security = getService('security'); - - before(async () => { - await security.testUser.setRoles(['slo_all']); - await kibanaServer.importExport.load( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/simple_composite_slo.json' - ); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - await kibanaServer.importExport.unload( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/simple_composite_slo.json' - ); - }); - - it('returns a 404 when the composite SLO is not found', async () => { - await supertest - .delete(`/api/observability/composite_slos/inexistant-id`) - .set('kbn-xsrf', 'foo') - .expect(404) - .then((resp) => { - expect(resp.body.error).to.eql('Not Found'); - expect(resp.body.message).to.contain('Composite SLO [inexistant-id] not found'); - }); - }); - - describe('happy path', () => { - it('returns a 204', async () => { - await supertest - .delete(`/api/observability/composite_slos/b5e88480-fa77-11ed-8871-27f3f5ca40ce`) - .set('kbn-xsrf', 'foo') - .expect(204); - }); - }); - }); -} diff --git a/x-pack/test/observability_api_integration/apis/composite_slo/update.ts b/x-pack/test/observability_api_integration/apis/composite_slo/update.ts deleted file mode 100644 index 69f87da9c8a93..0000000000000 --- a/x-pack/test/observability_api_integration/apis/composite_slo/update.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../common/ftr_provider_context'; -import { createCompositeSLOInput } from '../../fixtures/composite_slo'; - -export default function ({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - const kibanaServer = getService('kibanaServer'); - - describe.skip('update >', () => { - const security = getService('security'); - - before(async () => { - await security.testUser.setRoles(['slo_all']); - await kibanaServer.importExport.load( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/slo.json' - ); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - await kibanaServer.importExport.unload( - 'x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/slo.json' - ); - }); - - it('returns a 404 when not found', async () => { - await supertest - .put(`/api/observability/composite_slos/inexistant-id`) - .set('kbn-xsrf', 'foo') - .send({ name: 'updated composite slo name' }) - .expect(404) - .then((resp) => { - expect(resp.body.error).to.eql('Not Found'); - expect(resp.body.message).to.contain('Composite SLO [inexistant-id] not found'); - }); - }); - - describe('happy path', () => { - it('returns a 200', async () => { - const { body } = await supertest - .post(`/api/observability/composite_slos`) - .set('kbn-xsrf', 'foo') - .send( - createCompositeSLOInput({ - sources: [ - { id: 'f9072790-f97c-11ed-895c-170d13e61076', revision: 2, weight: 1 }, - { id: 'f6694b30-f97c-11ed-895c-170d13e61076', revision: 1, weight: 2 }, - ], - }) - ) - .expect(200); - - await supertest - .put(`/api/observability/composite_slos/${body.id}`) - .set('kbn-xsrf', 'foo') - .send({ name: 'updated composite slo name 🚀' }) - .expect(200) - .then((resp) => { - expect(resp.body.name).to.eql('updated composite slo name 🚀'); - }); - }); - }); - }); -} diff --git a/x-pack/test/observability_api_integration/apis/config.ts b/x-pack/test/observability_api_integration/apis/config.ts deleted file mode 100644 index fac715a634cfa..0000000000000 --- a/x-pack/test/observability_api_integration/apis/config.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { createTestConfig } from '../common/config'; - -export default createTestConfig({ - license: 'trial', - name: 'X-Pack Observability API integration test', - testFiles: [require.resolve('./composite_slo')], -}); diff --git a/x-pack/test/observability_api_integration/fixtures/composite_slo.ts b/x-pack/test/observability_api_integration/fixtures/composite_slo.ts deleted file mode 100644 index ca206c130ffc7..0000000000000 --- a/x-pack/test/observability_api_integration/fixtures/composite_slo.ts +++ /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 { cloneDeep } from 'lodash'; -import { v1 as uuidv1 } from 'uuid'; -import { CreateCompositeSLOInput } from '@kbn/slo-schema'; - -const defaultCompositeSLOInput: CreateCompositeSLOInput = { - name: 'some composite slo', - timeWindow: { - duration: '7d', - type: 'rolling', - }, - budgetingMethod: 'occurrences', - objective: { - target: 0.95, - }, - compositeMethod: 'weightedAverage', - sources: [ - { id: uuidv1(), revision: 1, weight: 1 }, - { id: uuidv1(), revision: 2, weight: 2 }, - ], - tags: ['critical', 'k8s'], -}; - -export function createCompositeSLOInput( - data: Partial = {} -): CreateCompositeSLOInput { - return cloneDeep({ ...defaultCompositeSLOInput, ...data }); -} diff --git a/x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/simple_composite_slo.json b/x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/simple_composite_slo.json deleted file mode 100644 index 528a4d0a45204..0000000000000 --- a/x-pack/test/observability_api_integration/fixtures/kbn_archiver/saved_objects/simple_composite_slo.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "attributes": { - "budgetingMethod": "occurrences", - "compositeMethod": "weightedAverage", - "createdAt": "2023-05-24T21:12:37.831Z", - "id": "b5e88480-fa77-11ed-8871-27f3f5ca40ce", - "name": "composite slo test", - "objective": { "target": 0.95 }, - "sources": [ - { "id": "f6694b30-f97c-11ed-895c-170d13e61076", "revision": 1, "weight": 2 }, - { "id": "f9072790-f97c-11ed-895c-170d13e61076", "revision": 2, "weight": 1 } - ], - "tags": [], - "timeWindow": { "duration": "7d", "type": "rolling" }, - "updatedAt": "2023-05-24T21:12:37.831Z" - }, - "coreMigrationVersion": "8.8.0", - "created_at": "2023-05-24T21:12:37.843Z", - "id": "b5ea3230-fa77-11ed-8871-27f3f5ca40ce", - "managed": false, - "references": [], - "type": "composite-slo", - "updated_at": "2023-05-24T21:12:37.843Z", - "version": "WzIwNTk2LDFd" -} diff --git a/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts b/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts index ed7d31efe1c10..0b1ec65593a34 100644 --- a/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts +++ b/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts @@ -23,7 +23,8 @@ export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('Event Log public API', () => { + // FLAKY: https://github.com/elastic/kibana/issues/168750 + describe.skip('Event Log public API', () => { before(async () => { await spacesService.create({ id: 'namespace-a', diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index 17154d9a254c4..a8ab29da16979 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -81,7 +81,6 @@ export default function ({ getService }: FtrProviderContext) { 'alerting:apm.transaction_duration', 'alerting:apm.transaction_error_rate', 'alerting:logs.alert.document.count', - 'alerting:metrics.alert.anomaly', 'alerting:metrics.alert.inventory.threshold', 'alerting:metrics.alert.threshold', 'alerting:monitoring_alert_cluster_health', diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index 21259c2d289e2..99569e7b3084f 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -47,7 +47,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { `--xpack.securitySolution.enableExperimental=${JSON.stringify([ 'alertDetailsPageEnabled', 'chartEmbeddablesEnabled', - 'discoverInTimeline', ])}`, // mock cloud to enable the guided onboarding tour in e2e tests '--xpack.cloud.id=test', diff --git a/x-pack/test/security_solution_cypress/cypress/README.md b/x-pack/test/security_solution_cypress/cypress/README.md index aa749344201fa..c85ba1bea305f 100644 --- a/x-pack/test/security_solution_cypress/cypress/README.md +++ b/x-pack/test/security_solution_cypress/cypress/README.md @@ -42,7 +42,9 @@ Please, before opening a PR with the new test, please make sure that the test fa Note that we use tags in order to select which tests we want to execute: -- `@serverless` includes a test in the Serverless test suite. You need to explicitly add this tag to any test you want to run against a Serverless environment. +- `@serverless` includes a test in the Serverless test suite for PRs (the so-called first quality gate). You need to explicitly add this tag to any test you want to run in CI for open PRs. These tests will run against a local, "simulated" serverless environment. +- `@serverlessQA` includes a test in the Serverless test suite for QA (the so-called second quality gate). You need to explicitly add this tag to any test you want to run in the CD pipeline against real serverless projects deployed in the Serverless QA environment. + - **NOTE:** We are adding this tag temporarily until we check the behavior of our tests in the second quality gate. - `@ess` includes a test in the normal, non-Serverless test suite. You need to explicitly add this tag to any test you want to run against a non-Serverless environment. - `@brokenInServerless` excludes a test from the Serverless test suite (even if it's tagged as `@serverless`). Indicates that a test should run in Serverless, but currently is broken. - `@skipInServerless` excludes a test from the Serverless test suite (even if it's tagged as `@serverless`). Could indicate many things, e.g. "the test is flaky in Serverless", "the test is Flaky in any type of environemnt", "the test has been temporarily excluded, see the comment above why". diff --git a/x-pack/test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts b/x-pack/test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts new file mode 100644 index 0000000000000..e76893eceea36 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { defineCypressConfig } from '@kbn/cypress-config'; +import { esArchiver } from './support/es_archiver'; + +// eslint-disable-next-line import/no-default-export +export default defineCypressConfig({ + reporter: '../../../node_modules/cypress-multi-reporters', + reporterOptions: { + configFile: './cypress/reporter_config.json', + }, + defaultCommandTimeout: 150000, + env: { + grepFilterSpecs: true, + grepOmitFiltered: true, + grepTags: '@serverlessQA --@brokenInServerless --@skipInServerless', + // Grep plugin is working taking under consideration the directory where cypress lives. + // https://github.com/elastic/kibana/pull/167494#discussion_r1340567022 for more context. + grepIntegrationFolder: '../', + }, + execTimeout: 150000, + pageLoadTimeout: 150000, + numTestsKeptInMemory: 0, + retries: { + runMode: 1, + }, + screenshotsFolder: '../../../target/kibana-security-solution/cypress/screenshots', + trashAssetsBeforeRuns: false, + video: false, + videosFolder: '../../../../target/kibana-security-solution/cypress/videos', + viewportHeight: 946, + viewportWidth: 1680, + e2e: { + baseUrl: 'http://localhost:5601', + experimentalCspAllowList: ['default-src', 'script-src', 'script-src-elem'], + experimentalMemoryManagement: true, + specPattern: './cypress/e2e/**/*.cy.ts', + setupNodeEvents(on, config) { + esArchiver(on, config); + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('@cypress/grep/src/plugin')(config); + return config; + }, + }, +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/create_runtime_field.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/create_runtime_field.cy.ts deleted file mode 100644 index 78ed47f878665..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/create_runtime_field.cy.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; -import { openTimelineUsingToggle } from '../../tasks/security_main'; -import { openTimelineFieldsBrowser, populateTimeline } from '../../tasks/timeline'; - -import { hostsUrl, ALERTS_URL } from '../../urls/navigation'; - -import { createRule } from '../../tasks/api_calls/rules'; - -import { getNewRule } from '../../objects/rule'; -import { refreshPage } from '../../tasks/security_header'; -import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; -import { createField } from '../../tasks/create_runtime_field'; -import { openAlertsFieldBrowser } from '../../tasks/alerts'; -import { deleteRuntimeField } from '../../tasks/sourcerer'; -import { GET_DATA_GRID_HEADER } from '../../screens/common/data_grid'; -import { GET_TIMELINE_HEADER } from '../../screens/timeline'; - -const alertRunTimeField = 'field.name.alert.page'; -const timelineRuntimeField = 'field.name.timeline'; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe( - 'Create DataView runtime field', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - deleteRuntimeField('security-solution-default', alertRunTimeField); - deleteRuntimeField('security-solution-default', timelineRuntimeField); - }); - - beforeEach(() => { - login(); - }); - - it('adds field to alert table', () => { - visitWithTimeRange(ALERTS_URL); - createRule(getNewRule()); - refreshPage(); - waitForAlertsToPopulate(); - openAlertsFieldBrowser(); - createField(alertRunTimeField); - cy.get(GET_DATA_GRID_HEADER(alertRunTimeField)).should('exist'); - }); - - it('adds field to timeline', () => { - visitWithTimeRange(hostsUrl('allHosts')); - openTimelineUsingToggle(); - populateTimeline(); - openTimelineFieldsBrowser(); - - createField(timelineRuntimeField); - cy.get(GET_TIMELINE_HEADER(timelineRuntimeField)).should('exist'); - }); - } -); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer.cy.ts deleted file mode 100644 index 0d70bf4dcd3d1..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer.cy.ts +++ /dev/null @@ -1,136 +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 { DEFAULT_INDEX_PATTERN } from '@kbn/security-solution-plugin/common/constants'; - -import { login, loginWithUser } from '../../tasks/login'; -import { visitWithTimeRange, visitWithUser } from '../../tasks/navigation'; - -import { hostsUrl } from '../../urls/navigation'; -import { - addIndexToDefault, - deselectSourcererOptions, - isDataViewSelection, - isHostsStatValue, - isKibanaDataViewOption, - isNotSourcererSelection, - isSourcererOptions, - isSourcererSelection, - openAdvancedSettings, - openDataViewSelection, - openSourcerer, - resetSourcerer, - saveSourcerer, -} from '../../tasks/sourcerer'; -import { postDataView } from '../../tasks/common'; -import { createUsersAndRoles, secReadCasesAll, secReadCasesAllUser } from '../../tasks/privileges'; -import { TOASTER } from '../../screens/configure_cases'; -import { SOURCERER } from '../../screens/sourcerer'; - -const usersToCreate = [secReadCasesAllUser]; -const rolesToCreate = [secReadCasesAll]; -const siemDataViewTitle = 'Security Default Data View'; -const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*']; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe('Sourcerer', { tags: ['@ess', '@serverless', '@skipInServerless'] }, () => { - before(() => { - cy.task('esArchiverResetKibana'); - dataViews.forEach((dataView: string) => postDataView(dataView)); - }); - - // TODO: https://github.com/elastic/kibana/issues/161539 - describe('permissions', { tags: ['@ess', '@brokenInServerless'] }, () => { - before(() => { - createUsersAndRoles(usersToCreate, rolesToCreate); - }); - it(`role(s) ${secReadCasesAllUser.roles.join()} shows error when user does not have permissions`, () => { - loginWithUser(secReadCasesAllUser); - visitWithUser(hostsUrl('allHosts'), secReadCasesAllUser); - cy.get(TOASTER).should('have.text', 'Write role required to generate data'); - }); - }); - - // TODO: https://github.com/elastic/kibana/issues/161539 - // FLAKY: https://github.com/elastic/kibana/issues/165766 - describe('Default scope', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { - beforeEach(() => { - cy.clearLocalStorage(); - login(); - visitWithTimeRange(hostsUrl('allHosts')); - }); - - it('correctly loads SIEM data view', () => { - openSourcerer(); - isDataViewSelection(siemDataViewTitle); - openAdvancedSettings(); - isSourcererSelection(`auditbeat-*`); - isSourcererOptions(DEFAULT_INDEX_PATTERN.filter((pattern) => pattern !== 'auditbeat-*')); - }); - - describe('Modified badge', () => { - it('Selecting new data view does not add a modified badge', () => { - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer(); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - openDataViewSelection(); - isKibanaDataViewOption(dataViews); - cy.get(SOURCERER.selectListDefaultOption).should(`contain`, siemDataViewTitle); - cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); - isDataViewSelection(dataViews[1]); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer(); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - }); - - it('shows modified badge when index patterns change and removes when reset', () => { - openSourcerer(); - openDataViewSelection(); - cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); - isDataViewSelection(dataViews[1]); - openAdvancedSettings(); - const patterns = dataViews[1].split(','); - deselectSourcererOptions([patterns[0]]); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`exist`); - openSourcerer(); - cy.get(SOURCERER.badgeModifiedOption).should(`exist`); - resetSourcerer(); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer(); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - isDataViewSelection(siemDataViewTitle); - }); - }); - - it('disables save when no patterns are selected', () => { - openSourcerer(); - openAdvancedSettings(); - cy.get(SOURCERER.saveButton).should('be.enabled'); - deselectSourcererOptions(['auditbeat-*']); - cy.get(SOURCERER.saveButton).should('be.disabled'); - }); - - it( - 'adds a pattern to the default index and correctly filters out auditbeat-*', - { tags: '@brokenInServerless' }, - () => { - openSourcerer(); - isSourcererSelection(`auditbeat-*`); - isNotSourcererSelection('*beat*'); - addIndexToDefault('*beat*'); - isHostsStatValue('1'); - openSourcerer(); - openAdvancedSettings(); - isSourcererSelection(`auditbeat-*`); - isSourcererSelection('*beat*'); - } - ); - }); -}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.ts b/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.ts deleted file mode 100644 index 4267944740539..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.ts +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - DEFAULT_ALERTS_INDEX, - DEFAULT_INDEX_PATTERN, -} from '@kbn/security-solution-plugin/common/constants'; - -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; - -import { TIMELINES_URL } from '../../urls/navigation'; -import { - clickAlertCheckbox, - deselectSourcererOptions, - isDataViewSelection, - isKibanaDataViewOption, - isNotSourcererOption, - isNotSourcererSelection, - isSourcererOptions, - isSourcererSelection, - openAdvancedSettings, - openDataViewSelection, - openSourcerer, - refreshUntilAlertsIndexExists, - resetSourcerer, - saveSourcerer, -} from '../../tasks/sourcerer'; -import { openTimelineUsingToggle } from '../../tasks/security_main'; -import { SOURCERER } from '../../screens/sourcerer'; -import { createTimeline } from '../../tasks/api_calls/timelines'; -import { getTimeline, getTimelineModifiedSourcerer } from '../../objects/timeline'; -import { closeTimeline, openTimelineById } from '../../tasks/timeline'; - -const siemDataViewTitle = 'Security Default Data View'; -const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*']; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe('Timeline scope', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { - beforeEach(() => { - cy.clearLocalStorage(); - login(); - visitWithTimeRange(TIMELINES_URL); - }); - - it('correctly loads SIEM data view', () => { - openTimelineUsingToggle(); - openSourcerer('timeline'); - isDataViewSelection(siemDataViewTitle); - openAdvancedSettings(); - isSourcererSelection(`auditbeat-*`); - isSourcererSelection(`${DEFAULT_ALERTS_INDEX}-default`); - isSourcererOptions(DEFAULT_INDEX_PATTERN.filter((pattern) => pattern !== 'auditbeat-*')); - isNotSourcererOption(`${DEFAULT_ALERTS_INDEX}-default`); - }); - - describe('Modified badge', () => { - it('Selecting new data view does not add a modified badge', () => { - openTimelineUsingToggle(); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - openDataViewSelection(); - isKibanaDataViewOption(dataViews); - cy.get(SOURCERER.selectListDefaultOption).should(`contain`, siemDataViewTitle); - cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); - isDataViewSelection(dataViews[1]); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - }); - - it('shows modified badge when index patterns change and removes when reset', () => { - openTimelineUsingToggle(); - openSourcerer('timeline'); - openDataViewSelection(); - cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); - isDataViewSelection(dataViews[1]); - openAdvancedSettings(); - const patterns = dataViews[1].split(','); - deselectSourcererOptions([patterns[0]]); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeModifiedOption).should(`exist`); - resetSourcerer(); - saveSourcerer(); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); - isDataViewSelection(siemDataViewTitle); - }); - }); - describe('Alerts checkbox', () => { - before(() => { - login(); - createTimeline(getTimeline()).then((response) => - cy.wrap(response.body.data.persistTimeline.timeline.savedObjectId).as('timelineId') - ); - createTimeline(getTimelineModifiedSourcerer()).then((response) => - cy.wrap(response.body.data.persistTimeline.timeline.savedObjectId).as('auditbeatTimelineId') - ); - }); - - beforeEach(() => { - login(); - visitWithTimeRange(TIMELINES_URL); - refreshUntilAlertsIndexExists(); - }); - - it('Modifies timeline to alerts only, and switches to different saved timeline without issue', function () { - openTimelineById(this.timelineId).then(() => { - cy.get(SOURCERER.badgeAlerts).should(`not.exist`); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - openSourcerer('timeline'); - clickAlertCheckbox(); - saveSourcerer(); - cy.get(SOURCERER.badgeAlerts).should(`exist`); - cy.get(SOURCERER.badgeModified).should(`not.exist`); - closeTimeline(); - - openTimelineById(this.auditbeatTimelineId).then(() => { - cy.get(SOURCERER.badgeModified).should(`exist`); - cy.get(SOURCERER.badgeAlerts).should(`not.exist`); - openSourcerer('timeline'); - openAdvancedSettings(); - isSourcererSelection(`auditbeat-*`); - }); - }); - }); - - const defaultPatterns = [`auditbeat-*`, `${DEFAULT_ALERTS_INDEX}-default`]; - it('alerts checkbox behaves as expected', () => { - isDataViewSelection(siemDataViewTitle); - defaultPatterns.forEach((pattern) => isSourcererSelection(pattern)); - openDataViewSelection(); - cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); - isDataViewSelection(dataViews[1]); - dataViews[1] - .split(',') - .filter((pattern) => pattern !== 'fakebeat-*' && pattern !== 'siem-read*') - .forEach((pattern) => isSourcererSelection(pattern)); - - clickAlertCheckbox(); - isNotSourcererSelection(`auditbeat-*`); - isSourcererSelection(`${DEFAULT_ALERTS_INDEX}-default`); - cy.get(SOURCERER.alertCheckbox).uncheck({ force: true }); - defaultPatterns.forEach((pattern) => isSourcererSelection(pattern)); - }); - - it('shows alerts badge when index patterns change and removes when reset', () => { - clickAlertCheckbox(); - saveSourcerer(); - cy.get(SOURCERER.badgeAlerts).should(`exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeAlertsOption).should(`exist`); - resetSourcerer(); - saveSourcerer(); - cy.get(SOURCERER.badgeAlerts).should(`not.exist`); - openSourcerer('timeline'); - cy.get(SOURCERER.badgeAlertsOption).should(`not.exist`); - }); - }); -}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/cti_enrichments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/cti_enrichments.cy.ts deleted file mode 100644 index 04de2c6ac6b35..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/cti_enrichments.cy.ts +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { disableExpandableFlyout } from '../../tasks/api_calls/kibana_advanced_settings'; -import { getNewThreatIndicatorRule, indicatorRuleMatchingDoc } from '../../objects/rule'; -import { cleanKibana } from '../../tasks/common'; -import { login } from '../../tasks/login'; -import { - JSON_TEXT, - TABLE_CELL, - TABLE_ROWS, - THREAT_DETAILS_VIEW, - ENRICHMENT_COUNT_NOTIFICATION, - INDICATOR_MATCH_ENRICHMENT_SECTION, - INVESTIGATION_TIME_ENRICHMENT_SECTION, - THREAT_DETAILS_ACCORDION, -} from '../../screens/alerts_details'; -import { TIMELINE_FIELD } from '../../screens/rule_details'; -import { expandFirstAlert, setEnrichmentDates, viewThreatIntelTab } from '../../tasks/alerts'; -import { createRule } from '../../tasks/api_calls/rules'; -import { openJsonView, openThreatIndicatorDetails } from '../../tasks/alerts_details'; -import { addsFieldsToTimeline, visitRuleDetailsPage } from '../../tasks/rule_details'; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe('CTI Enrichment', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { - before(() => { - cleanKibana(); - // illegal_argument_exception: unknown setting [index.lifecycle.rollover_alias] - cy.task('esArchiverLoad', { archiveName: 'threat_indicator' }); - cy.task('esArchiverLoad', { archiveName: 'suspicious_source_event' }); - login(); - - disableExpandableFlyout(); - }); - - after(() => { - cy.task('esArchiverUnload', 'threat_indicator'); - cy.task('esArchiverUnload', 'suspicious_source_event'); - }); - - beforeEach(() => { - login(); - createRule({ ...getNewThreatIndicatorRule(), rule_id: 'rule_testing', enabled: true }).then( - (rule) => visitRuleDetailsPage(rule.body.id) - ); - }); - - // TODO: https://github.com/elastic/kibana/issues/161539 - // Skipped: https://github.com/elastic/kibana/issues/162818 - it.skip('Displays enrichment matched.* fields on the timeline', () => { - const expectedFields = { - 'threat.enrichments.matched.atomic': indicatorRuleMatchingDoc.atomic, - 'threat.enrichments.matched.type': indicatorRuleMatchingDoc.matchedType, - 'threat.enrichments.matched.field': - getNewThreatIndicatorRule().threat_mapping[0].entries[0].field, - 'threat.enrichments.matched.id': indicatorRuleMatchingDoc.matchedId, - 'threat.enrichments.matched.index': indicatorRuleMatchingDoc.matchedIndex, - }; - const fields = Object.keys(expectedFields) as Array; - - addsFieldsToTimeline('threat.enrichments.matched', fields); - - fields.forEach((field) => { - cy.get(TIMELINE_FIELD(field)).should('have.text', expectedFields[field]); - }); - }); - - it('Displays persisted enrichments on the JSON view', () => { - const expectedEnrichment = [ - { - 'indicator.file.hash.md5': ['9b6c3518a91d23ed77504b5416bfb5b3'], - 'matched.index': ['logs-ti_abusech.malware'], - 'indicator.file.type': ['elf'], - 'indicator.file.hash.tlsh': [ - '6D7312E017B517CC1371A8353BED205E9128223972AE35302E97528DF957703BAB2DBE', - ], - 'feed.name': ['AbuseCH malware'], - 'indicator.file.hash.ssdeep': [ - '1536:87vbq1lGAXSEYQjbChaAU2yU23M51DjZgSQAvcYkFtZTjzBht5:8D+CAXFYQChaAUk5ljnQssL', - ], - 'indicator.file.hash.sha256': [ - 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', - ], - 'indicator.first_seen': ['2021-03-10T08:02:14.000Z'], - 'matched.field': ['myhash.mysha256'], - 'indicator.type': ['file'], - 'matched.type': ['indicator_match_rule'], - 'matched.id': ['84cf452c1e0375c3d4412cb550bd1783358468a3b3b777da4829d72c7d6fb74f'], - 'matched.atomic': ['a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3'], - 'indicator.file.size': [80280], - }, - ]; - - expandFirstAlert(); - openJsonView(); - - cy.get(JSON_TEXT).then((x) => { - const parsed = JSON.parse(x.text()); - expect(parsed.fields['threat.enrichments']).to.deep.equal(expectedEnrichment); - }); - }); - - it('Displays threat indicator details on the threat intel tab', () => { - const expectedThreatIndicatorData = [ - { field: 'feed.name', value: 'AbuseCH malware' }, - { field: 'indicator.file.hash.md5', value: '9b6c3518a91d23ed77504b5416bfb5b3' }, - { - field: 'indicator.file.hash.sha256', - value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', - }, - { - field: 'indicator.file.hash.ssdeep', - value: '1536:87vbq1lGAXSEYQjbChaAU2yU23M51DjZgSQAvcYkFtZTjzBht5:8D+CAXFYQChaAUk5ljnQssL', - }, - { - field: 'indicator.file.hash.tlsh', - value: '6D7312E017B517CC1371A8353BED205E9128223972AE35302E97528DF957703BAB2DBE', - }, - { field: 'indicator.file.size', value: '80280' }, - { field: 'indicator.file.type', value: 'elf' }, - { field: 'indicator.first_seen', value: '2021-03-10T08:02:14.000Z' }, - { field: 'indicator.type', value: 'file' }, - { - field: 'matched.atomic', - value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', - }, - { field: 'matched.field', value: 'myhash.mysha256' }, - { - field: 'matched.id', - value: '84cf452c1e0375c3d4412cb550bd1783358468a3b3b777da4829d72c7d6fb74f', - }, - { field: 'matched.index', value: 'logs-ti_abusech.malware' }, - { field: 'matched.type', value: 'indicator_match_rule' }, - ]; - - expandFirstAlert(); - openThreatIndicatorDetails(); - - cy.get(ENRICHMENT_COUNT_NOTIFICATION).should('have.text', '1'); - cy.get(THREAT_DETAILS_VIEW).within(() => { - cy.get(TABLE_ROWS).should('have.length', expectedThreatIndicatorData.length); - expectedThreatIndicatorData.forEach((row, index) => { - cy.get(TABLE_ROWS) - .eq(index) - .within(() => { - cy.get(TABLE_CELL).eq(0).should('have.text', row.field); - cy.get(TABLE_CELL).eq(1).should('have.text', row.value); - }); - }); - }); - }); - - describe('with additional indicators', () => { - before(() => { - cy.task('esArchiverLoad', { archiveName: 'threat_indicator2' }); - }); - - after(() => { - cy.task('esArchiverUnload', 'threat_indicator2'); - }); - - it('Displays matched fields from both indicator match rules and investigation time enrichments on Threat Intel tab', () => { - const indicatorMatchRuleEnrichment = { - field: 'myhash.mysha256', - value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', - feedName: 'AbuseCH malware', - }; - const investigationTimeEnrichment = { - field: 'source.ip', - value: '192.168.1.1', - feedName: 'feed_name', - }; - - expandFirstAlert(); - viewThreatIntelTab(); - setEnrichmentDates('08/05/2018 10:00 AM'); - - cy.get(`${INDICATOR_MATCH_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) - .should('exist') - .should( - 'have.text', - `${indicatorMatchRuleEnrichment.field} ${indicatorMatchRuleEnrichment.value} from ${indicatorMatchRuleEnrichment.feedName}` - ); - - cy.get(`${INVESTIGATION_TIME_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) - .should('exist') - .should( - 'have.text', - `${investigationTimeEnrichment.field} ${investigationTimeEnrichment.value} from ${investigationTimeEnrichment.feedName}` - ); - }); - }); -}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_detection.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_detection.cy.ts deleted file mode 100644 index 3f8da89072da8..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_detection.cy.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; - -import { ALERTS_URL, TIMELINES_URL } from '../../urls/navigation'; -import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../screens/alerts'; -import { TIMELINE_QUERY, TIMELINE_VIEW_IN_ANALYZER } from '../../screens/timeline'; -import { selectAlertsHistogram } from '../../tasks/alerts'; -import { createTimeline } from '../../tasks/timelines'; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe( - 'Ransomware Detection Alerts', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cy.task('esArchiverLoad', { - archiveName: 'ransomware_detection', - useCreate: true, - docsOnly: true, - }); - }); - - describe('Ransomware display in Alerts Section', () => { - beforeEach(() => { - login(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); - - describe('Alerts table', () => { - it('shows Ransomware Alerts', () => { - cy.get(ALERT_RULE_NAME).should('have.text', 'Ransomware Detection Alert'); - }); - }); - - describe('Trend Chart', () => { - beforeEach(() => { - selectAlertsHistogram(); - }); - - it('shows Ransomware Detection Alert in the trend chart', () => { - cy.get(ALERTS_HISTOGRAM_SERIES).should('have.text', 'Ransomware Detection Alert'); - }); - }); - }); - - // FLAKY: https://github.com/elastic/kibana/issues/168602 - describe.skip('Ransomware in Timelines', () => { - before(() => { - login(); - visitWithTimeRange(TIMELINES_URL); - createTimeline(); - }); - - it('Renders ransomware entries in timelines table', () => { - cy.get(TIMELINE_QUERY).type('event.code: "ransomware"{enter}'); - - // Wait for grid to load, it should have an analyzer icon - cy.get(TIMELINE_VIEW_IN_ANALYZER).should('exist'); - - cy.get(MESSAGE).should('have.text', 'Ransomware Detection Alert'); - }); - }); - } -); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_prevention.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_prevention.cy.ts deleted file mode 100644 index fa4a647ae7f20..0000000000000 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/ransomware_prevention.cy.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; - -import { ALERTS_URL, TIMELINES_URL } from '../../urls/navigation'; -import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../screens/alerts'; -import { TIMELINE_QUERY, TIMELINE_VIEW_IN_ANALYZER } from '../../screens/timeline'; -import { selectAlertsHistogram } from '../../tasks/alerts'; -import { createTimeline } from '../../tasks/timelines'; -import { cleanKibana } from '../../tasks/common'; - -// TODO: https://github.com/elastic/kibana/issues/161539 -describe( - 'Ransomware Prevention Alerts', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - cy.task('esArchiverLoad', { - archiveName: 'ransomware_prevention', - useCreate: true, - docsOnly: true, - }); - }); - - after(() => { - cy.task('esArchiverUnload', 'ransomware_prevention'); - }); - - describe('Ransomware display in Alerts Section', () => { - beforeEach(() => { - login(); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); - - describe('Alerts table', () => { - it('shows Ransomware Alerts', () => { - cy.get(ALERT_RULE_NAME).should('have.text', 'Ransomware Prevention Alert'); - }); - }); - - describe('Trend Chart', () => { - beforeEach(() => { - selectAlertsHistogram(); - }); - - it('shows Ransomware Prevention Alert in the trend chart', () => { - cy.get(ALERTS_HISTOGRAM_SERIES).should('have.text', 'Ransomware Prevention Alert'); - }); - }); - }); - - describe('Ransomware in Timelines', () => { - beforeEach(() => { - login(); - visitWithTimeRange(TIMELINES_URL); - - createTimeline(); - }); - - it('Renders ransomware entries in timelines table', () => { - cy.get(TIMELINE_QUERY).type('event.code: "ransomware"{enter}'); - - // Wait for grid to load, it should have an analyzer icon - cy.get(TIMELINE_VIEW_IN_ANALYZER).should('exist'); - - cy.get(MESSAGE).should('have.text', 'Ransomware Prevention Alert'); - }); - }); - } -); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_status.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_status.cy.ts new file mode 100644 index 0000000000000..5d56239e74c99 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_status.cy.ts @@ -0,0 +1,230 @@ +/* + * Copyright 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 { getNewRule } from '../../../objects/rule'; +import { ALERTS_COUNT, SELECTED_ALERTS } from '../../../screens/alerts'; + +import { + selectNumberOfAlerts, + waitForAlerts, + markAcknowledgedFirstAlert, + markAlertsAcknowledged, + goToAcknowledgedAlerts, + closeFirstAlert, + closeAlerts, + goToClosedAlerts, + goToOpenedAlerts, + openAlerts, + openFirstAlert, +} from '../../../tasks/alerts'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { deleteAlertsAndRules } from '../../../tasks/common'; +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; +import { login } from '../../../tasks/login'; +import { visit } from '../../../tasks/navigation'; + +import { ALERTS_URL } from '../../../urls/navigation'; + +describe('Changing alert status', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cy.task('esArchiverLoad', { archiveName: 'auditbeat_big' }); + }); + + context('Opening alerts', () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + createRule(getNewRule()); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + selectNumberOfAlerts(3); + cy.get(SELECTED_ALERTS).should('have.text', `Selected 3 alerts`); + closeAlerts(); + waitForAlerts(); + }); + + after(() => { + cy.task('esArchiverUnload', 'auditbeat_big'); + }); + + it('can mark a closed alert as open', () => { + waitForAlertsToPopulate(); + cy.get(ALERTS_COUNT) + .invoke('text') + .then((numberOfOpenedAlertsText) => { + const numberOfOpenedAlerts = parseInt(numberOfOpenedAlertsText, 10); + goToClosedAlerts(); + waitForAlerts(); + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + const numberOfAlertsToBeOpened = 1; + + openFirstAlert(); + waitForAlerts(); + + const expectedNumberOfAlerts = +numberOfAlerts - numberOfAlertsToBeOpened; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); + + goToOpenedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(`${numberOfOpenedAlerts + numberOfAlertsToBeOpened}`); + }); + }); + }); + + it('can bulk open alerts', () => { + waitForAlertsToPopulate(); + cy.get(ALERTS_COUNT) + .invoke('text') + .then((numberOfOpenedAlertsText) => { + const numberOfOpenedAlerts = parseInt(numberOfOpenedAlertsText, 10); + goToClosedAlerts(); + waitForAlerts(); + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + const numberOfAlertsToBeOpened = 2; + const numberOfAlertsToBeSelected = 2; + + selectNumberOfAlerts(numberOfAlertsToBeSelected); + cy.get(SELECTED_ALERTS).should( + 'have.text', + `Selected ${numberOfAlertsToBeSelected} alerts` + ); + + openAlerts(); + waitForAlerts(); + + const expectedNumberOfAlerts = +numberOfAlerts - numberOfAlertsToBeOpened; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); + + goToOpenedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(`${numberOfOpenedAlerts + numberOfAlertsToBeOpened}`); + }); + }); + }); + }); + + context('Marking alerts as acknowledged', () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + createRule(getNewRule()); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + }); + + it('can mark alert as acknowledged', () => { + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + const numberOfAlertsToBeMarkedAcknowledged = 1; + + markAcknowledgedFirstAlert(); + waitForAlerts(); + const expectedNumberOfAlerts = +numberOfAlerts - numberOfAlertsToBeMarkedAcknowledged; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); + + goToAcknowledgedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(`${numberOfAlertsToBeMarkedAcknowledged}`); + }); + }); + + it('can bulk mark alerts as acknowledged', () => { + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + const numberOfAlertsToBeMarkedAcknowledged = 2; + const numberOfAlertsToBeSelected = 2; + + selectNumberOfAlerts(numberOfAlertsToBeSelected); + + markAlertsAcknowledged(); + waitForAlerts(); + const expectedNumberOfAlerts = +numberOfAlerts - numberOfAlertsToBeMarkedAcknowledged; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); + + goToAcknowledgedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(numberOfAlertsToBeMarkedAcknowledged); + }); + }); + }); + + context('Closing alerts', () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + createRule(getNewRule({ rule_id: '1', max_signals: 100 })); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + }); + it('can close an alert', () => { + const numberOfAlertsToBeClosed = 1; + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + cy.get(ALERTS_COUNT).should('have.text', `${numberOfAlerts} alerts`); + + selectNumberOfAlerts(numberOfAlertsToBeClosed); + + cy.get(SELECTED_ALERTS).should('have.text', `Selected ${numberOfAlertsToBeClosed} alert`); + + closeFirstAlert(); + waitForAlerts(); + + const expectedNumberOfAlertsAfterClosing = +numberOfAlerts - numberOfAlertsToBeClosed; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlertsAfterClosing); + + goToClosedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(numberOfAlertsToBeClosed); + }); + }); + + it('can bulk close alerts', () => { + const numberOfAlertsToBeClosed = 2; + cy.get(ALERTS_COUNT) + .invoke('text') + .then((alertNumberString) => { + const numberOfAlerts = alertNumberString.split(' ')[0]; + cy.get(ALERTS_COUNT).should('have.text', `${numberOfAlerts} alerts`); + + selectNumberOfAlerts(numberOfAlertsToBeClosed); + + cy.get(SELECTED_ALERTS).should( + 'have.text', + `Selected ${numberOfAlertsToBeClosed} alerts` + ); + + closeAlerts(); + waitForAlerts(); + + const expectedNumberOfAlertsAfterClosing = +numberOfAlerts - numberOfAlertsToBeClosed; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlertsAfterClosing); + + goToClosedAlerts(); + waitForAlerts(); + + cy.get(ALERTS_COUNT).contains(numberOfAlertsToBeClosed); + }); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alert_tags.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_tags.cy.ts similarity index 83% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alert_tags.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_tags.cy.ts index ff8e890ab9966..c7b6b16a45c2f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alert_tags.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_tags.cy.ts @@ -5,28 +5,27 @@ * 2.0. */ -import { getNewRule } from '../../objects/rule'; +import { getNewRule } from '../../../objects/rule'; import { clickAlertTag, openAlertTaggingBulkActionMenu, selectNumberOfAlerts, updateAlertTags, -} from '../../tasks/alerts'; -import { createRule } from '../../tasks/api_calls/rules'; -import { cleanKibana, deleteAlertsAndRules } from '../../tasks/common'; -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; -import { ALERTS_URL } from '../../urls/navigation'; -import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; +} from '../../../tasks/alerts'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { cleanKibana, deleteAlertsAndRules } from '../../../tasks/common'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; import { ALERTS_TABLE_ROW_LOADER, MIXED_ALERT_TAG, SELECTED_ALERT_TAG, UNSELECTED_ALERT_TAG, -} from '../../screens/alerts'; +} from '../../../screens/alerts'; -// TODO: https://github.com/elastic/kibana/issues/161539 -describe('Alert tagging', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Alert tagging', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverResetKibana'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts similarity index 91% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts index 686edd1bf4f81..bbdba453351bb 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alerts_detection_callouts_index_outdated.cy.ts @@ -7,21 +7,21 @@ import { ROLES } from '@kbn/security-solution-plugin/common/test'; -import { ALERTS_URL } from '../../urls/navigation'; -import { RULES_MANAGEMENT_URL } from '../../urls/rules_management'; -import { ruleDetailsUrl } from '../../urls/rule_details'; -import { getNewRule } from '../../objects/rule'; -import { PAGE_TITLE } from '../../screens/common/page'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { ruleDetailsUrl } from '../../../urls/rule_details'; +import { getNewRule } from '../../../objects/rule'; +import { PAGE_TITLE } from '../../../screens/common/page'; -import { login } from '../../tasks/login'; -import { visit } from '../../tasks/navigation'; +import { login } from '../../../tasks/login'; +import { visit } from '../../../tasks/navigation'; -import { createRule, deleteCustomRule } from '../../tasks/api_calls/rules'; +import { createRule, deleteCustomRule } from '../../../tasks/api_calls/rules'; import { getCallOut, NEED_ADMIN_FOR_UPDATE_CALLOUT, waitForCallOutToBeShown, -} from '../../tasks/common/callouts'; +} from '../../../tasks/common/callouts'; const loadPageAsPlatformEngineerUser = (url: string) => { login(ROLES.soc_manager); @@ -33,7 +33,6 @@ const waitForPageTitleToBeShown = () => { cy.get(PAGE_TITLE).should('be.visible'); }; -// TODO: https://github.com/elastic/kibana/issues/161539 Does it need to run in Serverless? describe( 'Detections > Need Admin Callouts indicating an admin is needed to migrate the alert data set', { tags: ['@ess', '@skipInServerless'] }, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/missing_privileges_callout.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/missing_privileges_callout.cy.ts similarity index 88% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/missing_privileges_callout.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/missing_privileges_callout.cy.ts index e12dabe044598..f38899300ed7f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/missing_privileges_callout.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/missing_privileges_callout.cy.ts @@ -7,21 +7,21 @@ import { ROLES } from '@kbn/security-solution-plugin/common/test'; -import { ALERTS_URL } from '../../urls/navigation'; -import { RULES_MANAGEMENT_URL } from '../../urls/rules_management'; -import { getNewRule } from '../../objects/rule'; -import { PAGE_TITLE } from '../../screens/common/page'; - -import { login } from '../../tasks/login'; -import { visit } from '../../tasks/navigation'; -import { createRule, deleteCustomRule } from '../../tasks/api_calls/rules'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { getNewRule } from '../../../objects/rule'; +import { PAGE_TITLE } from '../../../screens/common/page'; + +import { login } from '../../../tasks/login'; +import { visit } from '../../../tasks/navigation'; +import { createRule, deleteCustomRule } from '../../../tasks/api_calls/rules'; import { getCallOut, waitForCallOutToBeShown, dismissCallOut, MISSING_PRIVILEGES_CALLOUT, -} from '../../tasks/common/callouts'; -import { ruleDetailsUrl } from '../../urls/rule_details'; +} from '../../../tasks/common/callouts'; +import { ruleDetailsUrl } from '../../../urls/rule_details'; const loadPageAsReadOnlyUser = (url: string) => { login(ROLES.reader); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/threat_match_enrichments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/threat_match_enrichments.cy.ts new file mode 100644 index 0000000000000..2bda5a6acadc2 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/threat_match_enrichments.cy.ts @@ -0,0 +1,201 @@ +/* + * Copyright 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 { disableExpandableFlyout } from '../../../tasks/api_calls/kibana_advanced_settings'; +import { getNewThreatIndicatorRule, indicatorRuleMatchingDoc } from '../../../objects/rule'; +import { cleanKibana } from '../../../tasks/common'; +import { login } from '../../../tasks/login'; +import { + JSON_TEXT, + TABLE_CELL, + TABLE_ROWS, + THREAT_DETAILS_VIEW, + ENRICHMENT_COUNT_NOTIFICATION, + INDICATOR_MATCH_ENRICHMENT_SECTION, + INVESTIGATION_TIME_ENRICHMENT_SECTION, + THREAT_DETAILS_ACCORDION, +} from '../../../screens/alerts_details'; +import { TIMELINE_FIELD } from '../../../screens/rule_details'; +import { expandFirstAlert, setEnrichmentDates, viewThreatIntelTab } from '../../../tasks/alerts'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { openJsonView, openThreatIndicatorDetails } from '../../../tasks/alerts_details'; +import { addsFieldsToTimeline, visitRuleDetailsPage } from '../../../tasks/rule_details'; + +// TODO: https://github.com/elastic/kibana/issues/161539 +describe( + 'Threat Match Enrichment', + { tags: ['@ess', '@serverless', '@brokenInServerless'] }, + () => { + before(() => { + cleanKibana(); + // illegal_argument_exception: unknown setting [index.lifecycle.rollover_alias] + cy.task('esArchiverLoad', { archiveName: 'threat_indicator' }); + cy.task('esArchiverLoad', { archiveName: 'suspicious_source_event' }); + login(); + + disableExpandableFlyout(); + }); + + after(() => { + cy.task('esArchiverUnload', 'threat_indicator'); + cy.task('esArchiverUnload', 'suspicious_source_event'); + }); + + beforeEach(() => { + login(); + createRule({ ...getNewThreatIndicatorRule(), rule_id: 'rule_testing', enabled: true }).then( + (rule) => visitRuleDetailsPage(rule.body.id) + ); + }); + + // TODO: https://github.com/elastic/kibana/issues/161539 + // Skipped: https://github.com/elastic/kibana/issues/162818 + it.skip('Displays enrichment matched.* fields on the timeline', () => { + const expectedFields = { + 'threat.enrichments.matched.atomic': indicatorRuleMatchingDoc.atomic, + 'threat.enrichments.matched.type': indicatorRuleMatchingDoc.matchedType, + 'threat.enrichments.matched.field': + getNewThreatIndicatorRule().threat_mapping[0].entries[0].field, + 'threat.enrichments.matched.id': indicatorRuleMatchingDoc.matchedId, + 'threat.enrichments.matched.index': indicatorRuleMatchingDoc.matchedIndex, + }; + const fields = Object.keys(expectedFields) as Array; + + addsFieldsToTimeline('threat.enrichments.matched', fields); + + fields.forEach((field) => { + cy.get(TIMELINE_FIELD(field)).should('have.text', expectedFields[field]); + }); + }); + + it('Displays persisted enrichments on the JSON view', () => { + const expectedEnrichment = [ + { + 'indicator.file.hash.md5': ['9b6c3518a91d23ed77504b5416bfb5b3'], + 'matched.index': ['logs-ti_abusech.malware'], + 'indicator.file.type': ['elf'], + 'indicator.file.hash.tlsh': [ + '6D7312E017B517CC1371A8353BED205E9128223972AE35302E97528DF957703BAB2DBE', + ], + 'feed.name': ['AbuseCH malware'], + 'indicator.file.hash.ssdeep': [ + '1536:87vbq1lGAXSEYQjbChaAU2yU23M51DjZgSQAvcYkFtZTjzBht5:8D+CAXFYQChaAUk5ljnQssL', + ], + 'indicator.file.hash.sha256': [ + 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', + ], + 'indicator.first_seen': ['2021-03-10T08:02:14.000Z'], + 'matched.field': ['myhash.mysha256'], + 'indicator.type': ['file'], + 'matched.type': ['indicator_match_rule'], + 'matched.id': ['84cf452c1e0375c3d4412cb550bd1783358468a3b3b777da4829d72c7d6fb74f'], + 'matched.atomic': ['a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3'], + 'indicator.file.size': [80280], + }, + ]; + + expandFirstAlert(); + openJsonView(); + + cy.get(JSON_TEXT).then((x) => { + const parsed = JSON.parse(x.text()); + expect(parsed.fields['threat.enrichments']).to.deep.equal(expectedEnrichment); + }); + }); + + it('Displays threat indicator details on the threat intel tab', () => { + const expectedThreatIndicatorData = [ + { field: 'feed.name', value: 'AbuseCH malware' }, + { field: 'indicator.file.hash.md5', value: '9b6c3518a91d23ed77504b5416bfb5b3' }, + { + field: 'indicator.file.hash.sha256', + value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', + }, + { + field: 'indicator.file.hash.ssdeep', + value: '1536:87vbq1lGAXSEYQjbChaAU2yU23M51DjZgSQAvcYkFtZTjzBht5:8D+CAXFYQChaAUk5ljnQssL', + }, + { + field: 'indicator.file.hash.tlsh', + value: '6D7312E017B517CC1371A8353BED205E9128223972AE35302E97528DF957703BAB2DBE', + }, + { field: 'indicator.file.size', value: '80280' }, + { field: 'indicator.file.type', value: 'elf' }, + { field: 'indicator.first_seen', value: '2021-03-10T08:02:14.000Z' }, + { field: 'indicator.type', value: 'file' }, + { + field: 'matched.atomic', + value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', + }, + { field: 'matched.field', value: 'myhash.mysha256' }, + { + field: 'matched.id', + value: '84cf452c1e0375c3d4412cb550bd1783358468a3b3b777da4829d72c7d6fb74f', + }, + { field: 'matched.index', value: 'logs-ti_abusech.malware' }, + { field: 'matched.type', value: 'indicator_match_rule' }, + ]; + + expandFirstAlert(); + openThreatIndicatorDetails(); + + cy.get(ENRICHMENT_COUNT_NOTIFICATION).should('have.text', '1'); + cy.get(THREAT_DETAILS_VIEW).within(() => { + cy.get(TABLE_ROWS).should('have.length', expectedThreatIndicatorData.length); + expectedThreatIndicatorData.forEach((row, index) => { + cy.get(TABLE_ROWS) + .eq(index) + .within(() => { + cy.get(TABLE_CELL).eq(0).should('have.text', row.field); + cy.get(TABLE_CELL).eq(1).should('have.text', row.value); + }); + }); + }); + }); + + describe('with additional indicators', () => { + before(() => { + cy.task('esArchiverLoad', { archiveName: 'threat_indicator2' }); + }); + + after(() => { + cy.task('esArchiverUnload', 'threat_indicator2'); + }); + + it('Displays matched fields from both indicator match rules and investigation time enrichments on Threat Intel tab', () => { + const indicatorMatchRuleEnrichment = { + field: 'myhash.mysha256', + value: 'a04ac6d98ad989312783d4fe3456c53730b212c79a426fb215708b6c6daa3de3', + feedName: 'AbuseCH malware', + }; + const investigationTimeEnrichment = { + field: 'source.ip', + value: '192.168.1.1', + feedName: 'feed_name', + }; + + expandFirstAlert(); + viewThreatIntelTab(); + setEnrichmentDates('08/05/2018 10:00 AM'); + + cy.get(`${INDICATOR_MATCH_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) + .should('exist') + .should( + 'have.text', + `${indicatorMatchRuleEnrichment.field} ${indicatorMatchRuleEnrichment.value} from ${indicatorMatchRuleEnrichment.feedName}` + ); + + cy.get(`${INVESTIGATION_TIME_ENRICHMENT_SECTION} ${THREAT_DETAILS_ACCORDION}`) + .should('exist') + .should( + 'have.text', + `${investigationTimeEnrichment.field} ${investigationTimeEnrichment.value} from ${investigationTimeEnrichment.feedName}` + ); + }); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_complete.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_complete.cy.ts new file mode 100644 index 0000000000000..6d3491a7e3acc --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_complete.cy.ts @@ -0,0 +1,72 @@ +/* + * Copyright 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 { getNewRule } from '../../../objects/rule'; + +import { + INDEX_SELECTOR, + SLACK_ACTION_BTN, + WEBHOOK_ACTION_BTN, + EMAIL_ACTION_BTN, + ACTION_BTN, +} from '../../../screens/common/rule_actions'; + +import { createRule } from '../../../tasks/api_calls/rules'; + +import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { cleanKibana, deleteAlertsAndRules } from '../../../tasks/common'; +import { goToActionsStepTab } from '../../../tasks/create_new_rule'; +import { login } from '../../../tasks/login'; + +import { editFirstRule } from '../../../tasks/alerts_detection_rules'; + +import { visit } from '../../../tasks/navigation'; + +const rule = getNewRule(); + +describe( + 'Rule actions PLI complete product tier', + { + tags: ['@serverless'], + + env: { + ftrConfig: { + productTypes: [ + { product_line: 'security', product_tier: 'complete' }, + { product_line: 'endpoint', product_tier: 'complete' }, + ], + }, + }, + }, + () => { + before(() => { + cleanKibana(); + login(); + }); + + beforeEach(() => { + deleteAlertsAndRules(); + createRule(rule); + login(); + }); + + it('more than 3 rule actions should be available', () => { + visit(RULES_MANAGEMENT_URL); + editFirstRule(); + + goToActionsStepTab(); + + // all actions available + cy.get(ACTION_BTN).should('have.length.greaterThan', 4); + + cy.get(INDEX_SELECTOR).should('be.visible'); + cy.get(SLACK_ACTION_BTN).should('be.visible'); + cy.get(EMAIL_ACTION_BTN).should('be.visible'); + cy.get(WEBHOOK_ACTION_BTN).should('be.visible'); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_essentials.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_essentials.cy.ts new file mode 100644 index 0000000000000..1555b1788f6ce --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_actions/rule_actions_pli_essentials.cy.ts @@ -0,0 +1,74 @@ +/* + * Copyright 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 { getNewRule } from '../../../objects/rule'; + +import { + INDEX_SELECTOR, + SLACK_ACTION_BTN, + WEBHOOK_ACTION_BTN, + EMAIL_ACTION_BTN, + ACTION_BTN, +} from '../../../screens/common/rule_actions'; + +import { createRule } from '../../../tasks/api_calls/rules'; + +import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { cleanKibana, deleteAlertsAndRules } from '../../../tasks/common'; +import { goToActionsStepTab } from '../../../tasks/create_new_rule'; +import { login } from '../../../tasks/login'; + +import { editFirstRule } from '../../../tasks/alerts_detection_rules'; + +import { visit } from '../../../tasks/navigation'; + +const rule = getNewRule(); + +describe( + 'Rule actions PLI essentials product tier', + { + tags: ['@serverless'], + + env: { + ftrConfig: { + productTypes: [ + { product_line: 'security', product_tier: 'essentials' }, + { product_line: 'endpoint', product_tier: 'essentials' }, + ], + }, + }, + }, + () => { + before(() => { + cleanKibana(); + login(); + }); + + beforeEach(() => { + deleteAlertsAndRules(); + createRule(rule); + login(); + }); + + it('only 3 rule actions should be available', () => { + visit(RULES_MANAGEMENT_URL); + editFirstRule(); + + goToActionsStepTab(); + + // only 3 basic actions available + cy.get(ACTION_BTN).should('have.length', 3); + + cy.get(INDEX_SELECTOR).should('be.visible'); + cy.get(SLACK_ACTION_BTN).should('be.visible'); + cy.get(EMAIL_ACTION_BTN).should('be.visible'); + + // webhook is not available + cy.get(WEBHOOK_ACTION_BTN).should('not.exist'); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/create_runtime_field.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/create_runtime_field.cy.ts new file mode 100644 index 0000000000000..2fd13f8b6696d --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/create_runtime_field.cy.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 { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { openTimelineUsingToggle } from '../../../tasks/security_main'; +import { openTimelineFieldsBrowser, populateTimeline } from '../../../tasks/timeline'; + +import { hostsUrl, ALERTS_URL } from '../../../urls/navigation'; + +import { createRule } from '../../../tasks/api_calls/rules'; + +import { getNewRule } from '../../../objects/rule'; +import { refreshPage } from '../../../tasks/security_header'; +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; +import { createField } from '../../../tasks/create_runtime_field'; +import { openAlertsFieldBrowser } from '../../../tasks/alerts'; +import { deleteRuntimeField } from '../../../tasks/sourcerer'; +import { GET_DATA_GRID_HEADER } from '../../../screens/common/data_grid'; +import { GET_TIMELINE_HEADER } from '../../../screens/timeline'; + +const alertRunTimeField = 'field.name.alert.page'; +const timelineRuntimeField = 'field.name.timeline'; + +describe('Create DataView runtime field', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + deleteRuntimeField('security-solution-default', alertRunTimeField); + deleteRuntimeField('security-solution-default', timelineRuntimeField); + }); + + beforeEach(() => { + login(); + }); + + it('adds field to alert table', () => { + visitWithTimeRange(ALERTS_URL); + createRule(getNewRule()); + refreshPage(); + waitForAlertsToPopulate(); + openAlertsFieldBrowser(); + createField(alertRunTimeField); + cy.get(GET_DATA_GRID_HEADER(alertRunTimeField)).should('exist'); + }); + + it('adds field to timeline', () => { + visitWithTimeRange(hostsUrl('allHosts')); + openTimelineUsingToggle(); + populateTimeline(); + openTimelineFieldsBrowser(); + + createField(timelineRuntimeField); + cy.get(GET_TIMELINE_HEADER(timelineRuntimeField)).should('exist'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer.cy.ts new file mode 100644 index 0000000000000..d26543bea97f7 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer.cy.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 { DEFAULT_INDEX_PATTERN } from '@kbn/security-solution-plugin/common/constants'; + +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; + +import { hostsUrl } from '../../../urls/navigation'; +import { + addIndexToDefault, + deselectSourcererOptions, + isDataViewSelection, + isHostsStatValue, + isKibanaDataViewOption, + isNotSourcererSelection, + isSourcererOptions, + isSourcererSelection, + openAdvancedSettings, + openDataViewSelection, + openSourcerer, + resetSourcerer, + saveSourcerer, +} from '../../../tasks/sourcerer'; +import { postDataView } from '../../../tasks/common'; +import { SOURCERER } from '../../../screens/sourcerer'; + +const siemDataViewTitle = 'Security Default Data View'; +const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*']; + +describe('Sourcerer', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cy.task('esArchiverResetKibana'); + dataViews.forEach((dataView: string) => postDataView(dataView)); + }); + + beforeEach(() => { + cy.clearLocalStorage(); + login(); + visitWithTimeRange(hostsUrl('allHosts')); + }); + + it('correctly loads SIEM data view', () => { + openSourcerer(); + isDataViewSelection(siemDataViewTitle); + openAdvancedSettings(); + isSourcererSelection(`auditbeat-*`); + isSourcererOptions(DEFAULT_INDEX_PATTERN.filter((pattern) => pattern !== 'auditbeat-*')); + }); + + describe('Modified badge', () => { + it('Selecting new data view does not add a modified badge', () => { + cy.get(SOURCERER.badgeModified).should(`not.exist`); + openSourcerer(); + cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); + openDataViewSelection(); + isKibanaDataViewOption(dataViews); + cy.get(SOURCERER.selectListDefaultOption).should(`contain`, siemDataViewTitle); + cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); + isDataViewSelection(dataViews[1]); + saveSourcerer(); + cy.get(SOURCERER.badgeModified).should(`not.exist`); + openSourcerer(); + cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); + }); + + it('shows modified badge when index patterns change and removes when reset', () => { + openSourcerer(); + openDataViewSelection(); + cy.get(SOURCERER.selectListOption).contains(dataViews[1]).click(); + isDataViewSelection(dataViews[1]); + openAdvancedSettings(); + const patterns = dataViews[1].split(','); + deselectSourcererOptions([patterns[0]]); + saveSourcerer(); + cy.get(SOURCERER.badgeModified).should(`exist`); + openSourcerer(); + cy.get(SOURCERER.badgeModifiedOption).should(`exist`); + resetSourcerer(); + saveSourcerer(); + cy.get(SOURCERER.badgeModified).should(`not.exist`); + openSourcerer(); + cy.get(SOURCERER.badgeModifiedOption).should(`not.exist`); + isDataViewSelection(siemDataViewTitle); + }); + }); + + it('disables save when no patterns are selected', () => { + openSourcerer(); + openAdvancedSettings(); + cy.get(SOURCERER.saveButton).should('be.enabled'); + deselectSourcererOptions(['auditbeat-*']); + cy.get(SOURCERER.saveButton).should('be.disabled'); + }); + + it( + 'adds a pattern to the default index and correctly filters out auditbeat-*', + { tags: '@brokenInServerless' }, + () => { + openSourcerer(); + isSourcererSelection(`auditbeat-*`); + isNotSourcererSelection('*beat*'); + addIndexToDefault('*beat*'); + isHostsStatValue('1'); + openSourcerer(); + openAdvancedSettings(); + isSourcererSelection(`auditbeat-*`); + isSourcererSelection('*beat*'); + } + ); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_permissions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_permissions.cy.ts new file mode 100644 index 0000000000000..fa4bf2d27061b --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_permissions.cy.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { loginWithUser } from '../../../tasks/login'; +import { visitWithUser } from '../../../tasks/navigation'; + +import { hostsUrl } from '../../../urls/navigation'; +import { postDataView } from '../../../tasks/common'; +import { + createUsersAndRoles, + secReadCasesAll, + secReadCasesAllUser, +} from '../../../tasks/privileges'; +import { TOASTER } from '../../../screens/configure_cases'; + +const usersToCreate = [secReadCasesAllUser]; +const rolesToCreate = [secReadCasesAll]; +const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*']; + +describe('Sourcerer permissions', { tags: ['@ess', '@skipInServerless'] }, () => { + before(() => { + cy.task('esArchiverResetKibana'); + dataViews.forEach((dataView: string) => postDataView(dataView)); + createUsersAndRoles(usersToCreate, rolesToCreate); + }); + + it(`role(s) ${secReadCasesAllUser.roles.join()} shows error when user does not have permissions`, () => { + loginWithUser(secReadCasesAllUser); + visitWithUser(hostsUrl('allHosts'), secReadCasesAllUser); + cy.get(TOASTER).should('have.text', 'Write role required to generate data'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_timeline.cy.ts similarity index 92% rename from x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_timeline.cy.ts index 22729c9e7661e..64a4e7224f820 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/data_sources/sourcerer_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/sourcerer/sourcerer_timeline.cy.ts @@ -10,10 +10,10 @@ import { DEFAULT_INDEX_PATTERN, } from '@kbn/security-solution-plugin/common/constants'; -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; -import { TIMELINES_URL } from '../../urls/navigation'; +import { TIMELINES_URL } from '../../../urls/navigation'; import { clickAlertCheckbox, deselectSourcererOptions, @@ -29,12 +29,12 @@ import { refreshUntilAlertsIndexExists, resetSourcerer, saveSourcerer, -} from '../../tasks/sourcerer'; -import { openTimelineUsingToggle } from '../../tasks/security_main'; -import { SOURCERER } from '../../screens/sourcerer'; -import { createTimeline } from '../../tasks/api_calls/timelines'; -import { getTimeline, getTimelineModifiedSourcerer } from '../../objects/timeline'; -import { closeTimeline, openTimelineById } from '../../tasks/timeline'; +} from '../../../tasks/sourcerer'; +import { openTimelineUsingToggle } from '../../../tasks/security_main'; +import { SOURCERER } from '../../../screens/sourcerer'; +import { createTimeline } from '../../../tasks/api_calls/timelines'; +import { getTimeline, getTimelineModifiedSourcerer } from '../../../objects/timeline'; +import { closeTimeline, openTimelineById } from '../../../tasks/timeline'; const siemDataViewTitle = 'Security Default Data View'; const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*']; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/permissions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/permissions.cy.ts new file mode 100644 index 0000000000000..ddc1f939c08fe --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/permissions.cy.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ROLES } from '@kbn/security-solution-plugin/common/test'; + +import { login } from '../../../tasks/login'; +import { visit } from '../../../tasks/navigation'; +import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; +import { VALUE_LISTS_MODAL_ACTIVATOR } from '../../../screens/lists'; + +describe('value list permissions', { tags: ['@ess', '@skipInServerless'] }, () => { + describe('user with restricted access role', () => { + it('Does not allow a t1 analyst user to upload a value list', () => { + login(ROLES.t1_analyst); + visit(RULES_MANAGEMENT_URL, { role: ROLES.t1_analyst }); + cy.get(VALUE_LISTS_MODAL_ACTIVATOR).should('have.attr', 'disabled'); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/value_lists.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/value_lists.cy.ts index faa82b4fc6cdf..4b1c3e93f631e 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/value_lists.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/value_lists/value_lists.cy.ts @@ -5,8 +5,6 @@ * 2.0. */ -import { ROLES } from '@kbn/security-solution-plugin/common/test'; - import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; import { RULES_MANAGEMENT_URL } from '../../../urls/rules_management'; @@ -25,253 +23,224 @@ import { deleteValueLists, KNOWN_VALUE_LIST_FILES, } from '../../../tasks/lists'; -import { - VALUE_LISTS_TABLE, - VALUE_LISTS_ROW, - VALUE_LISTS_MODAL_ACTIVATOR, -} from '../../../screens/lists'; +import { VALUE_LISTS_TABLE, VALUE_LISTS_ROW } from '../../../screens/lists'; import { refreshIndex } from '../../../tasks/api_calls/elasticsearch'; -// TODO: https://github.com/elastic/kibana/issues/161539 -// FLAKY: https://github.com/elastic/kibana/issues/165699 -describe('value lists', { tags: ['@ess', '@serverless', '@skipInServerless'] }, () => { - // TODO: https://github.com/elastic/kibana/issues/161539 - describe('management modal', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { - beforeEach(() => { - login(); - deleteValueLists([ - KNOWN_VALUE_LIST_FILES.TEXT, - KNOWN_VALUE_LIST_FILES.IPs, - KNOWN_VALUE_LIST_FILES.CIDRs, - ]); - createListsIndex(); - visit(RULES_MANAGEMENT_URL); - waitForListsIndex(); - waitForValueListsModalToBeLoaded(); - }); +describe('value lists management modal', { tags: ['@ess', '@serverless'] }, () => { + beforeEach(() => { + login(); + deleteValueLists([ + KNOWN_VALUE_LIST_FILES.TEXT, + KNOWN_VALUE_LIST_FILES.IPs, + KNOWN_VALUE_LIST_FILES.CIDRs, + ]); + createListsIndex(); + visit(RULES_MANAGEMENT_URL); + waitForListsIndex(); + waitForValueListsModalToBeLoaded(); + }); + + it('can open and close the modal', () => { + openValueListsModal(); + closeValueListsModal(); + }); - it('can open and close the modal', () => { + describe('create list types', () => { + beforeEach(() => { openValueListsModal(); - closeValueListsModal(); }); - // TODO: https://github.com/elastic/kibana/issues/161539 - // Flaky in serverless tests - describe('create list types', { tags: ['@brokenInServerless'] }, () => { - beforeEach(() => { - openValueListsModal(); - }); - - it('creates a "keyword" list from an uploaded file', () => { - selectValueListType('keyword'); - selectValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); - uploadValueList(); + it('creates a "keyword" list from an uploaded file', () => { + selectValueListType('keyword'); + selectValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); + uploadValueList(); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.TEXT); - expect($row.text()).to.contain('Keywords'); - }); - }); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.TEXT); + expect($row.text()).to.contain('Keywords'); + }); + }); - it('creates a "text" list from an uploaded file', () => { - selectValueListType('text'); - selectValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); - uploadValueList(); + it('creates a "text" list from an uploaded file', () => { + selectValueListType('text'); + selectValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); + uploadValueList(); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.TEXT); - expect($row.text()).to.contain('Text'); - }); - }); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.TEXT); + expect($row.text()).to.contain('Text'); + }); + }); - it('creates a "ip" list from an uploaded file', () => { - selectValueListType('ip'); - selectValueListsFile(KNOWN_VALUE_LIST_FILES.IPs); - uploadValueList(); + it('creates a "ip" list from an uploaded file', () => { + selectValueListType('ip'); + selectValueListsFile(KNOWN_VALUE_LIST_FILES.IPs); + uploadValueList(); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.IPs); - expect($row.text()).to.contain('IP addresses'); - }); - }); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.IPs); + expect($row.text()).to.contain('IP addresses'); + }); + }); - it('creates a "ip_range" list from an uploaded file', () => { - selectValueListType('ip_range'); - selectValueListsFile(KNOWN_VALUE_LIST_FILES.CIDRs); - uploadValueList(); + it('creates a "ip_range" list from an uploaded file', () => { + selectValueListType('ip_range'); + selectValueListsFile(KNOWN_VALUE_LIST_FILES.CIDRs); + uploadValueList(); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.CIDRs); - expect($row.text()).to.contain('IP ranges'); - }); - }); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).to.contain(KNOWN_VALUE_LIST_FILES.CIDRs); + expect($row.text()).to.contain('IP ranges'); + }); }); + }); - // TODO: https://github.com/elastic/kibana/issues/161539 - // Flaky in serverless tests - describe('delete list types', { tags: ['@brokenInServerless'] }, () => { - it('deletes a "keyword" list from an uploaded file', () => { - importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'keyword'); - openValueListsModal(); - deleteValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.TEXT); - }); - }); + describe('delete list types', () => { + it('deletes a "keyword" list from an uploaded file', () => { + importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'keyword'); + openValueListsModal(); + deleteValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.TEXT); + }); + }); - it('deletes a "text" list from an uploaded file', () => { - importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'text'); - openValueListsModal(); - deleteValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.TEXT); - }); - }); + it('deletes a "text" list from an uploaded file', () => { + importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'text'); + openValueListsModal(); + deleteValueListsFile(KNOWN_VALUE_LIST_FILES.TEXT); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.TEXT); + }); + }); - it('deletes a "ip" from an uploaded file', () => { - importValueList(KNOWN_VALUE_LIST_FILES.IPs, 'ip'); - openValueListsModal(); - deleteValueListsFile(KNOWN_VALUE_LIST_FILES.IPs); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.IPs); - }); - }); + it('deletes a "ip" from an uploaded file', () => { + importValueList(KNOWN_VALUE_LIST_FILES.IPs, 'ip'); + openValueListsModal(); + deleteValueListsFile(KNOWN_VALUE_LIST_FILES.IPs); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.IPs); + }); + }); - it('deletes a "ip_range" from an uploaded file', () => { - importValueList(KNOWN_VALUE_LIST_FILES.CIDRs, 'ip_range', ['192.168.100.0']); - openValueListsModal(); - deleteValueListsFile(KNOWN_VALUE_LIST_FILES.CIDRs); - cy.get(VALUE_LISTS_TABLE) - .find(VALUE_LISTS_ROW) - .should(($row) => { - expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.CIDRs); - }); - }); + it('deletes a "ip_range" from an uploaded file', () => { + importValueList(KNOWN_VALUE_LIST_FILES.CIDRs, 'ip_range', ['192.168.100.0']); + openValueListsModal(); + deleteValueListsFile(KNOWN_VALUE_LIST_FILES.CIDRs); + cy.get(VALUE_LISTS_TABLE) + .find(VALUE_LISTS_ROW) + .should(($row) => { + expect($row.text()).not.to.contain(KNOWN_VALUE_LIST_FILES.CIDRs); + }); }); + }); - // TODO: https://github.com/elastic/kibana/issues/161539 - // Flaky in serverless tests - describe('export list types', { tags: ['@brokenInServerless'] }, () => { - it('exports a "keyword" list from an uploaded file', () => { - cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.TEXT}`).as( - 'exportList' - ); - importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'keyword'); + describe('export list types', () => { + it('exports a "keyword" list from an uploaded file', () => { + cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.TEXT}`).as( + 'exportList' + ); + importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'keyword'); - // Importing value lists includes bulk creation of list items with refresh=wait_for - // While it should wait for data update and return after that it's not always a case with bulk operations. - // Sometimes list items are empty making this test flaky. - // To fix it refresh used list items index (for the default space) - refreshIndex('.items-default'); + // Importing value lists includes bulk creation of list items with refresh=wait_for + // While it should wait for data update and return after that it's not always a case with bulk operations. + // Sometimes list items are empty making this test flaky. + // To fix it refresh used list items index (for the default space) + refreshIndex('.items-default'); - openValueListsModal(); - exportValueList(); + openValueListsModal(); + exportValueList(); - cy.wait('@exportList').then(({ response }) => { - cy.fixture(KNOWN_VALUE_LIST_FILES.TEXT).then((list: string) => { - const [lineOne, lineTwo] = list.split('\n'); - expect(response?.body).to.contain(lineOne); - expect(response?.body).to.contain(lineTwo); - }); + cy.wait('@exportList').then(({ response }) => { + cy.fixture(KNOWN_VALUE_LIST_FILES.TEXT).then((list: string) => { + const [lineOne, lineTwo] = list.split('\n'); + expect(response?.body).to.contain(lineOne); + expect(response?.body).to.contain(lineTwo); }); }); + }); - it('exports a "text" list from an uploaded file', () => { - cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.TEXT}`).as( - 'exportList' - ); - importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'text'); + it('exports a "text" list from an uploaded file', () => { + cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.TEXT}`).as( + 'exportList' + ); + importValueList(KNOWN_VALUE_LIST_FILES.TEXT, 'text'); - // Importing value lists includes bulk creation of list items with refresh=wait_for - // While it should wait for data update and return after that it's not always a case with bulk operations. - // Sometimes list items are empty making this test flaky. - // To fix it refresh used list items index (for the default space) - refreshIndex('.items-default'); + // Importing value lists includes bulk creation of list items with refresh=wait_for + // While it should wait for data update and return after that it's not always a case with bulk operations. + // Sometimes list items are empty making this test flaky. + // To fix it refresh used list items index (for the default space) + refreshIndex('.items-default'); - openValueListsModal(); - exportValueList(); + openValueListsModal(); + exportValueList(); - cy.wait('@exportList').then(({ response }) => { - cy.fixture(KNOWN_VALUE_LIST_FILES.TEXT).then((list: string) => { - const [lineOne, lineTwo] = list.split('\n'); - expect(response?.body).to.contain(lineOne); - expect(response?.body).to.contain(lineTwo); - }); + cy.wait('@exportList').then(({ response }) => { + cy.fixture(KNOWN_VALUE_LIST_FILES.TEXT).then((list: string) => { + const [lineOne, lineTwo] = list.split('\n'); + expect(response?.body).to.contain(lineOne); + expect(response?.body).to.contain(lineTwo); }); }); + }); - it('exports a "ip" list from an uploaded file', () => { - cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.IPs}`).as( - 'exportList' - ); - importValueList(KNOWN_VALUE_LIST_FILES.IPs, 'ip'); + it('exports a "ip" list from an uploaded file', () => { + cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.IPs}`).as( + 'exportList' + ); + importValueList(KNOWN_VALUE_LIST_FILES.IPs, 'ip'); - // Importing value lists includes bulk creation of list items with refresh=wait_for - // While it should wait for data update and return after that it's not always a case with bulk operations. - // Sometimes list items are empty making this test flaky. - // To fix it refresh used list items index (for the default space) - refreshIndex('.items-default'); + // Importing value lists includes bulk creation of list items with refresh=wait_for + // While it should wait for data update and return after that it's not always a case with bulk operations. + // Sometimes list items are empty making this test flaky. + // To fix it refresh used list items index (for the default space) + refreshIndex('.items-default'); - openValueListsModal(); - exportValueList(); - cy.wait('@exportList').then(({ response }) => { - cy.fixture(KNOWN_VALUE_LIST_FILES.IPs).then((list: string) => { - const [lineOne, lineTwo] = list.split('\n'); - expect(response?.body).to.contain(lineOne); - expect(response?.body).to.contain(lineTwo); - }); + openValueListsModal(); + exportValueList(); + cy.wait('@exportList').then(({ response }) => { + cy.fixture(KNOWN_VALUE_LIST_FILES.IPs).then((list: string) => { + const [lineOne, lineTwo] = list.split('\n'); + expect(response?.body).to.contain(lineOne); + expect(response?.body).to.contain(lineTwo); }); }); + }); - it('exports a "ip_range" list from an uploaded file', () => { - cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.CIDRs}`).as( - 'exportList' - ); - importValueList(KNOWN_VALUE_LIST_FILES.CIDRs, 'ip_range', ['192.168.100.0']); + it('exports a "ip_range" list from an uploaded file', () => { + cy.intercept('POST', `/api/lists/items/_export?list_id=${KNOWN_VALUE_LIST_FILES.CIDRs}`).as( + 'exportList' + ); + importValueList(KNOWN_VALUE_LIST_FILES.CIDRs, 'ip_range', ['192.168.100.0']); - // Importing value lists includes bulk creation of list items with refresh=wait_for - // While it should wait for data update and return after that it's not always a case with bulk operations. - // Sometimes list items are empty making this test flaky. - // To fix it refresh used list items index (for the default space) - refreshIndex('.items-default'); + // Importing value lists includes bulk creation of list items with refresh=wait_for + // While it should wait for data update and return after that it's not always a case with bulk operations. + // Sometimes list items are empty making this test flaky. + // To fix it refresh used list items index (for the default space) + refreshIndex('.items-default'); - openValueListsModal(); - exportValueList(); - cy.wait('@exportList').then(({ response }) => { - cy.fixture(KNOWN_VALUE_LIST_FILES.CIDRs).then((list: string) => { - const [lineOne] = list.split('\n'); - expect(response?.body).to.contain(lineOne); - }); + openValueListsModal(); + exportValueList(); + cy.wait('@exportList').then(({ response }) => { + cy.fixture(KNOWN_VALUE_LIST_FILES.CIDRs).then((list: string) => { + const [lineOne] = list.split('\n'); + expect(response?.body).to.contain(lineOne); }); }); }); }); - - // TODO: https://github.com/elastic/kibana/issues/164451 We should find a way to make this spec work in Serverless - // TODO: https://github.com/elastic/kibana/issues/161539 - describe( - 'user with restricted access role', - { tags: ['@ess', '@serverless', '@skipInServerless'] }, - () => { - it('Does not allow a t1 analyst user to upload a value list', () => { - login(ROLES.t1_analyst); - visit(RULES_MANAGEMENT_URL, { role: ROLES.t1_analyst }); - cy.get(VALUE_LISTS_MODAL_ACTIVATOR).should('have.attr', 'disabled'); - }); - } - ); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/enrichments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/enrichments.cy.ts similarity index 100% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/enrichments.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/enrichments.cy.ts diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts index 88f745b356bfe..23bf0a0e5f690 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/dashboards/entity_analytics.cy.ts @@ -138,7 +138,8 @@ describe('Entity Analytics Dashboard', { tags: ['@ess', '@brokenInServerless'] } }); }); - describe('With host risk data', () => { + // FLAKY: https://github.com/elastic/kibana/issues/168490 + describe.skip('With host risk data', () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'risk_hosts' }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/overview/overview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/overview/overview.cy.ts index 900a77643e988..6ab6e76efd946 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/overview/overview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/overview/overview.cy.ts @@ -17,7 +17,7 @@ import { cleanKibana } from '../../../tasks/common'; import { createTimeline, favoriteTimeline } from '../../../tasks/api_calls/timelines'; import { getTimeline } from '../../../objects/timeline'; -describe('Overview Page', { tags: ['@ess', '@serverless'] }, () => { +describe('Overview Page', { tags: ['@ess', '@serverless', '@serverlessQA'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverLoad', { archiveName: 'overview' }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_charts.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_charts.cy.ts similarity index 79% rename from x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_charts.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_charts.cy.ts index f5055f7c8770c..86dd58889a0a8 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_alerts/alerts_charts.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/alerts_charts.cy.ts @@ -5,25 +5,25 @@ * 2.0. */ -import { getNewRule } from '../../objects/rule'; -import { ALERTS_COUNT } from '../../screens/alerts'; +import { getNewRule } from '../../../objects/rule'; +import { ALERTS_COUNT } from '../../../screens/alerts'; import { clickAlertsHistogramLegend, clickAlertsHistogramLegendAddToTimeline, clickAlertsHistogramLegendFilterFor, clickAlertsHistogramLegendFilterOut, selectAlertsHistogram, -} from '../../tasks/alerts'; -import { createRule } from '../../tasks/api_calls/rules'; -import { cleanKibana } from '../../tasks/common'; -import { login } from '../../tasks/login'; -import { visitWithTimeRange } from '../../tasks/navigation'; -import { ALERTS_URL } from '../../urls/navigation'; +} from '../../../tasks/alerts'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { cleanKibana } from '../../../tasks/common'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { ALERTS_URL } from '../../../urls/navigation'; import { GLOBAL_SEARCH_BAR_FILTER_ITEM, GLOBAL_SEARCH_BAR_FILTER_ITEM_DELETE, -} from '../../screens/search_bar'; -import { TOASTER } from '../../screens/alerts_detection_rules'; +} from '../../../screens/search_bar'; +import { TOASTER } from '../../../screens/alerts_detection_rules'; // TODO: https://github.com/elastic/kibana/issues/161539 describe( diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts new file mode 100644 index 0000000000000..bc0e3469b9c7e --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; + +import { ALERTS_URL, TIMELINES_URL } from '../../../urls/navigation'; +import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../../screens/alerts'; +import { TIMELINE_QUERY, TIMELINE_VIEW_IN_ANALYZER } from '../../../screens/timeline'; +import { selectAlertsHistogram } from '../../../tasks/alerts'; +import { createTimeline } from '../../../tasks/timelines'; + +describe('Ransomware Detection Alerts', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cy.task('esArchiverLoad', { + archiveName: 'ransomware_detection', + useCreate: true, + docsOnly: true, + }); + }); + + describe('Ransomware display in Alerts Section', () => { + beforeEach(() => { + login(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); + + describe('Alerts table', () => { + it('shows Ransomware Alerts', () => { + cy.get(ALERT_RULE_NAME).should('have.text', 'Ransomware Detection Alert'); + }); + }); + + describe('Trend Chart', () => { + beforeEach(() => { + selectAlertsHistogram(); + }); + + it('shows Ransomware Detection Alert in the trend chart', () => { + cy.get(ALERTS_HISTOGRAM_SERIES).should('have.text', 'Ransomware Detection Alert'); + }); + }); + }); + + // FLAKY: https://github.com/elastic/kibana/issues/168602 + describe.skip('Ransomware in Timelines', () => { + before(() => { + login(); + visitWithTimeRange(TIMELINES_URL); + createTimeline(); + }); + + it('Renders ransomware entries in timelines table', () => { + cy.get(TIMELINE_QUERY).type('event.code: "ransomware"{enter}'); + + // Wait for grid to load, it should have an analyzer icon + cy.get(TIMELINE_VIEW_IN_ANALYZER).should('exist'); + + cy.get(MESSAGE).should('have.text', 'Ransomware Detection Alert'); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts new file mode 100644 index 0000000000000..f3fc88f6518ac --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts @@ -0,0 +1,74 @@ +/* + * Copyright 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 { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; + +import { ALERTS_URL, TIMELINES_URL } from '../../../urls/navigation'; +import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../../screens/alerts'; +import { TIMELINE_QUERY, TIMELINE_VIEW_IN_ANALYZER } from '../../../screens/timeline'; +import { selectAlertsHistogram } from '../../../tasks/alerts'; +import { createTimeline } from '../../../tasks/timelines'; +import { cleanKibana } from '../../../tasks/common'; + +describe('Ransomware Prevention Alerts', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + cy.task('esArchiverLoad', { + archiveName: 'ransomware_prevention', + useCreate: true, + docsOnly: true, + }); + }); + + after(() => { + cy.task('esArchiverUnload', 'ransomware_prevention'); + }); + + describe('Ransomware display in Alerts Section', () => { + beforeEach(() => { + login(); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); + + describe('Alerts table', () => { + it('shows Ransomware Alerts', () => { + cy.get(ALERT_RULE_NAME).should('have.text', 'Ransomware Prevention Alert'); + }); + }); + + describe('Trend Chart', () => { + beforeEach(() => { + selectAlertsHistogram(); + }); + + it('shows Ransomware Prevention Alert in the trend chart', () => { + cy.get(ALERTS_HISTOGRAM_SERIES).should('have.text', 'Ransomware Prevention Alert'); + }); + }); + }); + + describe('Ransomware in Timelines', () => { + beforeEach(() => { + login(); + visitWithTimeRange(TIMELINES_URL); + + createTimeline(); + }); + + it('Renders ransomware entries in timelines table', () => { + cy.get(TIMELINE_QUERY).type('event.code: "ransomware"{enter}'); + + // Wait for grid to load, it should have an analyzer icon + cy.get(TIMELINE_VIEW_IN_ANALYZER).should('exist'); + + cy.get(MESSAGE).should('have.text', 'Ransomware Prevention Alert'); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/data_providers.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/data_providers.cy.ts index dd96c92d355a6..7d68d156802c2 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/data_providers.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/data_providers.cy.ts @@ -31,65 +31,61 @@ import { hostsUrl } from '../../../urls/navigation'; import { cleanKibana, scrollToBottom } from '../../../tasks/common'; // Failing in serverless -describe( - 'timeline data providers', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - }); +describe('timeline data providers', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + }); - beforeEach(() => { - login(); - visitWithTimeRange(hostsUrl('allHosts')); - waitForAllHostsToBeLoaded(); - scrollToBottom(); - createNewTimeline(); - addNameAndDescriptionToTimeline(getTimeline()); - populateTimeline(); - }); + beforeEach(() => { + login(); + visitWithTimeRange(hostsUrl('allHosts')); + waitForAllHostsToBeLoaded(); + scrollToBottom(); + createNewTimeline(); + addNameAndDescriptionToTimeline(getTimeline()); + populateTimeline(); + }); - it('displays the data provider action menu when Enter is pressed', () => { - addDataProvider({ field: 'host.name', operator: 'exists' }); + it('displays the data provider action menu when Enter is pressed', () => { + addDataProvider({ field: 'host.name', operator: 'exists' }); - cy.get(TIMELINE_DATA_PROVIDERS_ACTION_MENU).should('not.exist'); - cy.get(`${TIMELINE_FLYOUT_HEADER} ${TIMELINE_DROPPED_DATA_PROVIDERS}`).focus(); - cy.get(`${TIMELINE_FLYOUT_HEADER} ${TIMELINE_DROPPED_DATA_PROVIDERS}`) - .first() - .parent() - .type('{enter}'); - - cy.get(TIMELINE_DATA_PROVIDERS_ACTION_MENU).should('exist'); - }); + cy.get(TIMELINE_DATA_PROVIDERS_ACTION_MENU).should('not.exist'); + cy.get(`${TIMELINE_FLYOUT_HEADER} ${TIMELINE_DROPPED_DATA_PROVIDERS}`).focus(); + cy.get(`${TIMELINE_FLYOUT_HEADER} ${TIMELINE_DROPPED_DATA_PROVIDERS}`) + .first() + .parent() + .type('{enter}'); - it.skip( - 'persists timeline when data provider is updated by dragging a field from data grid', - { tags: ['@brokenInServerless'] }, - () => { - updateDataProviderbyDraggingField('host.name', 0); - waitForTimelineChanges(); - cy.reload(); - cy.get(`${GET_TIMELINE_GRID_CELL('host.name')}`) - .first() - .then((hostname) => { - cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).contains(`host.name: "${hostname.text()}"`); - }); - } - ); + cy.get(TIMELINE_DATA_PROVIDERS_ACTION_MENU).should('exist'); + }); - it('persists timeline when a field is added by hover action "Add To Timeline" in data provider ', () => { - addDataProvider({ field: 'host.name', operator: 'exists' }); - waitForTimelineChanges(); - updateDataProviderByFieldHoverAction('host.name', 0); + it.skip( + 'persists timeline when data provider is updated by dragging a field from data grid', + { tags: ['@brokenInServerless'] }, + () => { + updateDataProviderbyDraggingField('host.name', 0); waitForTimelineChanges(); cy.reload(); cy.get(`${GET_TIMELINE_GRID_CELL('host.name')}`) .first() .then((hostname) => { - cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).should((dataProviderContainer) => { - expect(dataProviderContainer).to.contain(`host.name: "${hostname.text()}"`); - }); + cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).contains(`host.name: "${hostname.text()}"`); + }); + } + ); + + it('persists timeline when a field is added by hover action "Add To Timeline" in data provider ', () => { + addDataProvider({ field: 'host.name', operator: 'exists' }); + waitForTimelineChanges(); + updateDataProviderByFieldHoverAction('host.name', 0); + waitForTimelineChanges(); + cy.reload(); + cy.get(`${GET_TIMELINE_GRID_CELL('host.name')}`) + .first() + .then((hostname) => { + cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).should((dataProviderContainer) => { + expect(dataProviderContainer).to.contain(`host.name: "${hostname.text()}"`); }); - }); - } -); + }); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/cell_actions.cy.ts similarity index 91% rename from x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/cell_actions.cy.ts index 5c7e0f85dbc47..a71f391f64f1e 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/cell_actions.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/cell_actions.cy.ts @@ -15,7 +15,7 @@ import { waitForDiscoverGridToLoad } from '../../../../tasks/discover'; import { updateDateRangeInLocalDatePickers } from '../../../../tasks/date_picker'; import { login } from '../../../../tasks/login'; import { visitWithTimeRange } from '../../../../tasks/navigation'; -import { createNewTimeline, gotToDiscoverTab } from '../../../../tasks/timeline'; +import { createNewTimeline, gotToEsqlTab } from '../../../../tasks/timeline'; import { ALERTS_URL } from '../../../../urls/navigation'; const INITIAL_START_DATE = 'Jan 18, 2021 @ 20:33:29.186'; @@ -24,9 +24,8 @@ const TIMESTAMP_COLUMN_NAME = '@timestamp'; // FLAKY: https://github.com/elastic/kibana/issues/165650 describe.skip( - `Discover Datagrid Cell Actions`, + `ESQL Datagrid Cell Actions`, { - env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, tags: ['@ess'], }, () => { @@ -34,7 +33,7 @@ describe.skip( login(); visitWithTimeRange(ALERTS_URL); createNewTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); waitForDiscoverGridToLoad(); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts similarity index 97% rename from x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts index 71b268e090b56..2d0c8a3d83067 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_timeline_state_integration.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts @@ -34,7 +34,7 @@ import { addDescriptionToTimeline, addNameToTimeline, createNewTimeline, - gotToDiscoverTab, + gotToEsqlTab, openTimelineById, openTimelineFromSettings, waitForTimelineChanges, @@ -60,11 +60,10 @@ const TIMELINE_RESPONSE_SAVED_OBJECT_ID_PATH = 'response.body.data.persistTimeline.timeline.savedObjectId'; const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; -// TODO: reuse or remove this tests when ESQL tab will be added +// FLAKY: https://github.com/elastic/kibana/issues/168745 describe.skip( 'Discover Timeline State Integration', { - env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, tags: ['@ess', '@brokenInServerless'], // ESQL and test involving STACK_MANAGEMENT_PAGE are broken in serverless }, @@ -109,14 +108,14 @@ describe.skip( login(); visitWithTimeRange(ALERTS_URL); createNewTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); }); context('save/restore', () => { it('should be able create an empty timeline with default discover state', () => { addNameToTimeline('Timerange timeline'); createNewTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); cy.get(GET_LOCAL_SHOW_DATES_BUTTON(DISCOVER_CONTAINER)).should( 'contain.text', `Last 15 minutes` @@ -143,7 +142,7 @@ describe.skip( openTimelineFromSettings(); openTimelineById(timelineId); cy.get(LOADING_INDICATOR).should('not.exist'); - gotToDiscoverTab(); + gotToEsqlTab(); verifyDiscoverEsqlQuery(esqlQuery); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column1)).should('exist'); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER(column2)).should('exist'); @@ -193,7 +192,7 @@ describe.skip( openTimelineFromSettings(); openTimelineById(timelineId); cy.get(LOADING_INDICATOR).should('not.exist'); - gotToDiscoverTab(); + gotToEsqlTab(); cy.get(DISCOVER_DATA_VIEW_SWITCHER.BTN).should('not.exist'); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/esql_state.cy.ts similarity index 87% rename from x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/esql_state.cy.ts index 06c934083cd88..ef79bf8bf4d48 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/discover_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/esql_state.cy.ts @@ -20,11 +20,7 @@ import { import { updateDateRangeInLocalDatePickers } from '../../../../tasks/date_picker'; import { login } from '../../../../tasks/login'; import { visitWithTimeRange } from '../../../../tasks/navigation'; -import { - createNewTimeline, - gotToDiscoverTab, - openActiveTimeline, -} from '../../../../tasks/timeline'; +import { createNewTimeline, gotToEsqlTab, openActiveTimeline } from '../../../../tasks/timeline'; import { ALERTS_URL } from '../../../../urls/navigation'; import { ALERTS, CSP_FINDINGS } from '../../../../screens/security_header'; @@ -33,11 +29,9 @@ const INITIAL_END_DATE = 'Jan 19, 2024 @ 20:33:29.186'; const DEFAULT_ESQL_QUERY = 'from .alerts-security.alerts-default,apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-* | limit 10'; -// TODO: reuse or remove this tests when ESQL tab will be added -describe.skip( - 'Discover State', +describe( + 'Timeline Discover ESQL State', { - env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, tags: ['@ess'], }, () => { @@ -45,7 +39,7 @@ describe.skip( login(); visitWithTimeRange(ALERTS_URL); createNewTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); }); it('should not allow the dataview to be changed', () => { @@ -61,7 +55,7 @@ describe.skip( navigateFromHeaderTo(CSP_FINDINGS); navigateFromHeaderTo(ALERTS); openActiveTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); verifyDiscoverEsqlQuery(esqlQuery); }); @@ -71,7 +65,7 @@ describe.skip( navigateFromHeaderTo(CSP_FINDINGS); navigateFromHeaderTo(ALERTS); openActiveTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER('host.name')).should('exist'); cy.get(GET_DISCOVER_DATA_GRID_CELL_HEADER('user.name')).should('exist'); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts similarity index 87% rename from x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts rename to x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts index cfe3ca421de36..ae99886d2fc02 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/discover/search_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts @@ -23,7 +23,7 @@ import { addFieldToTable, convertNBSPToSP, } from '../../../../tasks/discover'; -import { createNewTimeline, gotToDiscoverTab } from '../../../../tasks/timeline'; +import { createNewTimeline, gotToEsqlTab } from '../../../../tasks/timeline'; import { login } from '../../../../tasks/login'; import { visitWithTimeRange } from '../../../../tasks/navigation'; import { ALERTS_URL } from '../../../../urls/navigation'; @@ -33,12 +33,10 @@ const INITIAL_END_DATE = 'Jan 19, 2024 @ 20:33:29.186'; const NEW_START_DATE = 'Jan 18, 2023 @ 20:33:29.186'; const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; -// Failing: See https://github.com/elastic/kibana/issues/167186 -// TODO: reuse or remove this tests when ESQL tab will be added +// FLAKY: https://github.com/elastic/kibana/issues/168758 describe.skip( - 'Basic discover search and filter operations', + 'Basic esql search and filter operations', { - env: { ftrConfig: { enableExperimental: ['discoverInTimeline'] } }, tags: ['@ess'], }, () => { @@ -46,7 +44,7 @@ describe.skip( login(); visitWithTimeRange(ALERTS_URL); createNewTimeline(); - gotToDiscoverTab(); + gotToEsqlTab(); updateDateRangeInLocalDatePickers(DISCOVER_CONTAINER, INITIAL_START_DATE, INITIAL_END_DATE); }); @@ -63,7 +61,7 @@ describe.skip( }); context('navigation', () => { - it('should removed the query when back is pressed after adding a query', () => { + it('should remove the query when back is pressed after adding a query', () => { addDiscoverEsqlQuery(esqlQuery); submitDiscoverSearchBar(); cy.get(DISCOVER_ESQL_INPUT_TEXT_CONTAINER).then((subj) => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts index 48143184249d2..ca80b427f9c16 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts @@ -22,7 +22,7 @@ import { expectedExportedTimeline, getTimeline } from '../../../objects/timeline import { cleanKibana } from '../../../tasks/common'; // FLAKY: https://github.com/elastic/kibana/issues/165744 -describe('Export timelines', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Export timelines', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); login(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/fields_browser.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/fields_browser.cy.ts index a85966d590852..d4301853029a6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/fields_browser.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/fields_browser.cy.ts @@ -51,7 +51,7 @@ const defaultHeaders = [ ]; // Flaky in serverless tests -describe('Fields Browser', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Fields Browser', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/flyout_button.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/flyout_button.cy.ts index 8e85d82fecafd..a6896de020a5a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/flyout_button.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/flyout_button.cy.ts @@ -24,7 +24,7 @@ import { import { hostsUrl } from '../../../urls/navigation'; -describe('timeline flyout button', { tags: ['@ess', '@brokenInServerless'] }, () => { +describe('timeline flyout button', () => { before(() => { cleanKibana(); }); @@ -35,22 +35,26 @@ describe('timeline flyout button', { tags: ['@ess', '@brokenInServerless'] }, () waitForAllHostsToBeLoaded(); }); - it('toggles open the timeline', () => { + it('toggles open the timeline', { tags: ['@ess', '@serverless'] }, () => { openTimelineUsingToggle(); cy.get(TIMELINE_FLYOUT_HEADER).should('have.css', 'visibility', 'visible'); closeTimelineUsingToggle(); }); - it('re-focuses the toggle button when timeline is closed by clicking the active timeline toggle button', () => { - openTimelineUsingToggle(); - closeTimelineUsingToggle(); + it( + 're-focuses the toggle button when timeline is closed by clicking the active timeline toggle button', + { tags: ['@ess', '@serverless'] }, + () => { + openTimelineUsingToggle(); + closeTimelineUsingToggle(); - cy.get(TIMELINE_BOTTOM_BAR_TOGGLE_BUTTON).should('have.focus'); - }); + cy.get(TIMELINE_BOTTOM_BAR_TOGGLE_BUTTON).should('have.focus'); + } + ); it( 're-focuses the toggle button when timeline is closed by clicking the [X] close button', - { tags: '@brokenInServerless' }, + { tags: ['@ess', '@serverless'] }, () => { openTimelineUsingToggle(); closeTimelineUsingCloseButton(); @@ -59,29 +63,40 @@ describe('timeline flyout button', { tags: ['@ess', '@brokenInServerless'] }, () } ); - it('re-focuses the toggle button when timeline is closed by pressing the Esc key', () => { - openTimelineUsingToggle(); - cy.get('body').type('{esc}'); + it( + 're-focuses the toggle button when timeline is closed by pressing the Esc key', + { tags: ['@ess', '@serverless'] }, + () => { + openTimelineUsingToggle(); + cy.get('body').type('{esc}'); - cy.get(TIMELINE_BOTTOM_BAR_TOGGLE_BUTTON).should('have.focus'); - }); + cy.get(TIMELINE_BOTTOM_BAR_TOGGLE_BUTTON).should('have.focus'); + } + ); - it('the `(+)` button popover menu owns focus when open', () => { - openCreateTimelineOptionsPopover(); - cy.get(CREATE_NEW_TIMELINE).focus(); - cy.get(CREATE_NEW_TIMELINE).should('have.focus'); - closeCreateTimelineOptionsPopover(); - cy.get(CREATE_NEW_TIMELINE).should('not.exist'); - }); + it( + 'the `(+)` button popover menu owns focus when open', + { tags: ['@ess', '@serverless'] }, + () => { + openCreateTimelineOptionsPopover(); + cy.get(CREATE_NEW_TIMELINE).focus(); + cy.get(CREATE_NEW_TIMELINE).should('have.focus'); + closeCreateTimelineOptionsPopover(); + cy.get(CREATE_NEW_TIMELINE).should('not.exist'); + } + ); - it('should render the global search dropdown when the input is focused', () => { - openTimelineUsingToggle(); - cy.get('[data-test-subj="nav-search-input"]').focus(); - cy.get('[data-test-subj="nav-search-input"]').should('be.focused'); - cy.get('[data-test-subj="nav-search-option"]').should('be.visible'); - cy.get('[data-test-subj="nav-search-option"]').first().realHover(); - // check that at least one item is visible in the search bar after mousing over, i.e. it's still usable. - cy.get('[data-test-subj="nav-search-option"]').its('length').should('be.gte', 1); - closeTimelineUsingCloseButton(); - }); + it( + 'should render the global search dropdown when the input is focused', + { tags: ['@ess'] }, + () => { + openTimelineUsingToggle(); + cy.get('[data-test-subj="nav-search-input"]').focus(); + cy.get('[data-test-subj="nav-search-input"]').should('be.focused'); + cy.get('[data-test-subj="nav-search-option"]').should('be.visible'); + cy.get('[data-test-subj="nav-search-option"]').first().realHover(); + // check that at least one item is visible in the search bar after mousing over, i.e. it's still usable. + cy.get('[data-test-subj="nav-search-option"]').its('length').should('be.gte', 1); + } + ); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/full_screen.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/full_screen.cy.ts index 61226d987dedf..72f5aa576449c 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/full_screen.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/full_screen.cy.ts @@ -20,7 +20,7 @@ import { populateTimeline } from '../../../tasks/timeline'; import { hostsUrl } from '../../../urls/navigation'; // FLAKY: https://github.com/elastic/kibana/issues/165638 -describe('Toggle full screen', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Toggle full screen', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/inspect.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/inspect.cy.ts index 8d529b60d0e03..235c8c248b33d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/inspect.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/inspect.cy.ts @@ -15,7 +15,7 @@ import { executeTimelineKQL, openTimelineInspectButton } from '../../../tasks/ti import { hostsUrl } from '../../../urls/navigation'; // FLAKY: https://github.com/elastic/kibana/issues/165688 -describe('Inspect', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Inspect', { tags: ['@ess', '@serverless'] }, () => { context('Timeline', () => { it('inspects the timeline', () => { const hostExistsQuery = 'host.name: *'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/local_storage.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/local_storage.cy.ts index b2ecdb5e2c137..44061ffdf3ee0 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/local_storage.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/local_storage.cy.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { reload } from '../../../tasks/common'; import { login } from '../../../tasks/login'; import { visitWithTimeRange } from '../../../tasks/navigation'; import { hostsUrl } from '../../../urls/navigation'; @@ -14,7 +13,7 @@ import { DATAGRID_HEADERS, DATAGRID_HEADER } from '../../../screens/timeline'; import { waitsForEventsToBeLoaded } from '../../../tasks/hosts/events'; import { removeColumn } from '../../../tasks/timeline'; -describe('persistent timeline', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('persistent timeline', { tags: ['@ess', '@serverless'] }, () => { before(() => { login(); visitWithTimeRange(hostsUrl('allHosts')); @@ -34,7 +33,7 @@ describe('persistent timeline', { tags: ['@ess', '@serverless', '@brokenInServer cy.get(DATAGRID_HEADER(COLUMN)).should('exist'); removeColumn(COLUMN); - reload(); + cy.reload(); waitsForEventsToBeLoaded(); /* After the deletion of the message column and the reload of the page, we make sure diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts index afa000478e8fb..7f9083acb0b9f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts @@ -36,7 +36,7 @@ import { import { TIMELINES_URL } from '../../../urls/navigation'; -describe('Open timeline', { tags: ['@brokenInServerless', '@ess'] }, () => { +describe('Open timeline', { tags: ['@serverless', '@ess'] }, () => { describe('Open timeline modal', () => { before(function () { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts index 310efb66807e0..0037ae179c633 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/pagination.cy.ts @@ -25,7 +25,7 @@ import { hostsUrl } from '../../../urls/navigation'; // Flaky on serverless const defaultPageSize = 25; -describe('Pagination', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +describe('Pagination', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverLoad', { archiveName: 'timeline' }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts index a695597a48709..a6f5ae49f5d8a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts @@ -27,7 +27,7 @@ import { waitForTimelinesPanelToBeLoaded } from '../../../tasks/timelines'; import { hostsUrl, TIMELINES_URL } from '../../../urls/navigation'; -describe('Timeline search and filters', { tags: ['@ess', '@brokenInServerless'] }, () => { +describe('Timeline search and filters', { tags: ['@ess', '@serverless'] }, () => { before(() => { cleanKibana(); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/toggle_column.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/toggle_column.cy.ts index 625642da5c5fa..6845d402d21f1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/toggle_column.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/toggle_column.cy.ts @@ -20,34 +20,30 @@ import { import { hostsUrl } from '../../../urls/navigation'; -describe( - 'toggle column in timeline', - { tags: ['@ess', '@serverless', '@brokenInServerless'] }, - () => { - before(() => { - cleanKibana(); - cy.intercept('POST', '/api/timeline/_export?file_name=timelines_export.ndjson').as('export'); - }); - - beforeEach(() => { - login(); - visitWithTimeRange(hostsUrl('allHosts')); - openTimelineUsingToggle(); - populateTimeline(); - }); - - it('removes the @timestamp field from the timeline when the user un-checks the toggle', () => { - expandFirstTimelineEventDetails(); - clickTimestampToggleField(); - - cy.get(TIMESTAMP_HEADER_FIELD).should('not.exist'); - }); - - it('adds the _id field to the timeline when the user checks the field', () => { - expandFirstTimelineEventDetails(); - clickIdToggleField(); - - cy.get(ID_HEADER_FIELD).should('exist'); - }); - } -); +describe('toggle column in timeline', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cleanKibana(); + cy.intercept('POST', '/api/timeline/_export?file_name=timelines_export.ndjson').as('export'); + }); + + beforeEach(() => { + login(); + visitWithTimeRange(hostsUrl('allHosts')); + openTimelineUsingToggle(); + populateTimeline(); + }); + + it('removes the @timestamp field from the timeline when the user un-checks the toggle', () => { + expandFirstTimelineEventDetails(); + clickTimestampToggleField(); + + cy.get(TIMESTAMP_HEADER_FIELD).should('not.exist'); + }); + + it('adds the _id field to the timeline when the user checks the field', () => { + expandFirstTimelineEventDetails(); + clickIdToggleField(); + + cy.get(ID_HEADER_FIELD).should('exist'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts index 5028f54146e85..c49f1d51d9617 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts @@ -23,7 +23,7 @@ import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { TIMELINES_URL } from '../../../urls/navigation'; -describe('Open timeline', { tags: ['@brokenInServerless', '@ess'] }, () => { +describe('Open timeline', { tags: ['@serverless', '@ess'] }, () => { let timelineSavedObjectId: string | null = null; before(function () { cleanKibana(); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts b/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts index 76975fbe760f1..e6d44f0918c6d 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/common/rule_actions.ts @@ -7,6 +7,13 @@ export const EMAIL_ACTION_BTN = '[data-test-subj=".email-siem-ActionTypeSelectOption"]'; +export const WEBHOOK_ACTION_BTN = '[data-test-subj=".webhook-siem-ActionTypeSelectOption"]'; + +/** + * all rule actions buttons, elements which data-test-subj attribute ends with '-siem-ActionTypeSelectOption' + */ +export const ACTION_BTN = '[data-test-subj$="-siem-ActionTypeSelectOption"]'; + export const CREATE_ACTION_CONNECTOR_BTN = '[data-test-subj="createActionConnectorButton-0"]'; export const SAVE_ACTION_CONNECTOR_BTN = '[data-test-subj="saveActionButtonModal"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel.ts index 4a00d44cee981..678ed9484fb00 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel.ts @@ -8,11 +8,11 @@ import { INSIGHTS_TAB_BUTTON_GROUP_TEST_ID, VISUALIZE_TAB_BUTTON_GROUP_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { INSIGHTS_TAB_TEST_ID, VISUALIZE_TAB_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.ts index c9b16f3ada2cd..dc0b384aed40f 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { VISUALIZE_TAB_GRAPH_ANALYZER_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; -import { ANALYZER_GRAPH_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/components/test_ids'; +import { VISUALIZE_TAB_GRAPH_ANALYZER_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; +import { ANALYZER_GRAPH_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_BUTTON = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts index e63d6f0b72a83..c2a76ed9fe37c 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts @@ -5,14 +5,14 @@ * 2.0. */ -import { INSIGHTS_TAB_CORRELATIONS_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +import { INSIGHTS_TAB_CORRELATIONS_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { CORRELATIONS_DETAILS_BY_ANCESTRY_SECTION_TEST_ID, CORRELATIONS_DETAILS_BY_SESSION_SECTION_TEST_ID, CORRELATIONS_DETAILS_BY_SOURCE_SECTION_TEST_ID, CORRELATIONS_DETAILS_CASES_SECTION_TEST_ID, CORRELATIONS_DETAILS_SUPPRESSED_ALERTS_SECTION_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/components/test_ids'; import { EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/shared/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts index 5374943cce29c..0cda5fb1c87ee 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts @@ -9,8 +9,8 @@ import { ENTITIES_DETAILS_TEST_ID, HOST_DETAILS_TEST_ID, USER_DETAILS_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/components/test_ids'; -import { INSIGHTS_TAB_ENTITIES_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/components/test_ids'; +import { INSIGHTS_TAB_ENTITIES_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { EXPANDABLE_PANEL_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/shared/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_investigation_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_investigation_tab.ts index e981af1cdb895..e644c29bccea9 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_investigation_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_investigation_tab.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { INVESTIGATION_TAB_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/test_ids'; -import { INVESTIGATION_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +import { INVESTIGATION_TAB_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/test_ids'; +import { INVESTIGATION_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_INVESTIGATION_TAB = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts index 5ba9a8fafed98..0efc48511c9be 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts @@ -14,8 +14,8 @@ import { PREVALENCE_DETAILS_TABLE_FIELD_CELL_TEST_ID, PREVALENCE_DETAILS_TABLE_USER_PREVALENCE_CELL_TEST_ID, PREVALENCE_DETAILS_DATE_PICKER_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/components/test_ids'; -import { INSIGHTS_TAB_PREVALENCE_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/components/test_ids'; +import { INSIGHTS_TAB_PREVALENCE_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON = getDataTestSubjectSelector( diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_response_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_response_tab.ts index a2aad15ff504b..74a109266773a 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_response_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_response_tab.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { RESPONSE_TAB_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/test_ids'; +import { RESPONSE_TAB_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/test_ids'; import { RESPONSE_DETAILS_TEST_ID, RESPONSE_NO_DATA_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/left/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/left/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_RESPONSE_TAB = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_session_view_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_session_view_tab.ts index d50f645cf9359..e05b79f83ddc1 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_session_view_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_session_view_tab.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { VISUALIZE_TAB_SESSION_VIEW_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +import { VISUALIZE_TAB_SESSION_VIEW_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_SESSION_VIEW_BUTTON = getDataTestSubjectSelector( diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.ts index a60a7d7a40105..83716fb9bc450 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/left/tabs/test_ids'; +import { INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/left/tabs/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_alert_reason_preview.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_alert_reason_preview.ts index 37db919da75ab..868083d5c25ba 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_alert_reason_preview.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_alert_reason_preview.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ALERT_REASON_PREVIEW_BODY_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/preview/components/test_ids'; +import { ALERT_REASON_PREVIEW_BODY_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/preview/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_ALERT_REASON_PREVIEW_CONTAINER = getDataTestSubjectSelector( diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts index 23a3985a36d9a..90d051aec1b57 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel_rule_preview.ts @@ -17,7 +17,7 @@ import { RULE_PREVIEW_SCHEDULE_HEADER_TEST_ID, RULE_PREVIEW_SCHEDULE_CONTENT_TEST_ID, RULE_PREVIEW_FOOTER_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/preview/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/preview/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_RULE_PREVIEW_SECTION = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel.ts index 27916cd32163b..edebbe8d5a526 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel.ts @@ -10,7 +10,7 @@ import { JSON_TAB_TEST_ID, OVERVIEW_TAB_TEST_ID, TABLE_TAB_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/right/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/right/test_ids'; import { COLLAPSE_DETAILS_BUTTON_TEST_ID, EXPAND_DETAILS_BUTTON_TEST_ID, @@ -21,7 +21,7 @@ import { SEVERITY_VALUE_TEST_ID, STATUS_BUTTON_TEST_ID, FLYOUT_HEADER_TITLE_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/right/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/right/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_BODY = getDataTestSubjectSelector(FLYOUT_BODY_TEST_ID); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_json_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_json_tab.ts index 62fb75d4b82e0..e53d1af68d455 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_json_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_json_tab.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { JSON_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/right/tabs/test_ids'; -import { RIGHT_SECTION } from '@kbn/expandable-flyout/src/components/test_ids'; +import { JSON_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/right/tabs/test_ids'; +import { RIGHT_SECTION_TEST_ID } from '@kbn/expandable-flyout/src/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_RIGHT_PANEL_CONTENT = - getDataTestSubjectSelector(RIGHT_SECTION); + getDataTestSubjectSelector(RIGHT_SECTION_TEST_ID); export const DOCUMENT_DETAILS_FLYOUT_JSON_TAB_CONTENT = getDataTestSubjectSelector(JSON_TAB_CONTENT_TEST_ID); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts index 952f78fe4c9c7..d288f259f9e2d 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts @@ -43,7 +43,7 @@ import { ANALYZER_PREVIEW_TEST_ID, SESSION_PREVIEW_TEST_ID, RESPONSE_BUTTON_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/right/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/right/components/test_ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; /* About section */ diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts index f853fbd58865f..771180e1be13f 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_table_tab.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { TABLE_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/right/tabs/test_ids'; +import { TABLE_TAB_CONTENT_TEST_ID } from '@kbn/security-solution-plugin/public/flyout/document_details/right/tabs/test_ids'; import { getClassSelector, getDataTestSubjectSelector } from '../../helpers/common'; export const DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_CONTENT = diff --git a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts index 78b25d890c9c7..2c89a0a5877bd 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts @@ -341,7 +341,7 @@ export const GET_TIMELINE_HEADER = (fieldName: string) => { return `[data-test-subj="timeline"] [data-test-subj="header-text-${fieldName}"]`; }; -export const DISCOVER_TAB = getDataTestSubjectSelector('timelineTabs-discover'); +export const ESQL_TAB = getDataTestSubjectSelector('timelineTabs-esql'); export const TIMELINE_DATE_PICKER_CONTAINER = getDataTestSubjectSelector( 'timeline-date-picker-container' diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts index 1bbdc9eac1539..4950f2c65fab2 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts @@ -304,6 +304,12 @@ export const goToAcknowledgedAlerts = () => { cy.get(TIMELINE_COLUMN_SPINNER).should('not.exist'); }; +export const markAlertsAcknowledged = () => { + cy.get(TAKE_ACTION_POPOVER_BTN).click({ force: true }); + cy.get(MARK_ALERT_ACKNOWLEDGED_BTN).should('be.visible'); + cy.get(MARK_ALERT_ACKNOWLEDGED_BTN).click(); +}; + export const markAcknowledgedFirstAlert = () => { expandFirstAlertActions(); cy.get(MARK_ALERT_ACKNOWLEDGED_BTN).should('be.visible'); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts b/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts index e5d835bbe8c53..899acc1ff12cf 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/discover.ts @@ -18,6 +18,7 @@ import { DISCOVER_ESQL_EDITABLE_INPUT, } from '../screens/discover'; import { GET_LOCAL_SEARCH_BAR_SUBMIT_BUTTON } from '../screens/search_bar'; +import { gotToEsqlTab } from './timeline'; export const switchDataViewTo = (dataviewName: string) => { openDataViewSwitcher(); @@ -44,9 +45,12 @@ export const waitForDiscoverGridToLoad = () => { cy.get(DISCOVER_FIELD_LIST_LOADING).should('not.exist'); }; -export const selectCurrentDiscoverEsqlQuery = (discoverEsqlInput = DISCOVER_ESQL_INPUT) => { - cy.get(discoverEsqlInput).click(); - cy.get(discoverEsqlInput).focused(); +export const selectCurrentDiscoverEsqlQuery = ( + discoverEsqlInput = DISCOVER_ESQL_EDITABLE_INPUT +) => { + gotToEsqlTab(); + cy.get(discoverEsqlInput).should('be.visible').click(); + cy.get(discoverEsqlInput).should('be.focused'); cy.get(discoverEsqlInput).type(Cypress.platform === 'darwin' ? '{cmd+a}' : '{ctrl+a}'); }; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts index c1fd4cd3ef250..85b5b9f586e79 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel_overview_tab.ts @@ -11,7 +11,7 @@ import { INSIGHTS_ENTITIES_TEST_ID, PREVALENCE_TEST_ID, INSIGHTS_THREAT_INTELLIGENCE_TEST_ID, -} from '@kbn/security-solution-plugin/public/flyout/right/components/test_ids'; +} from '@kbn/security-solution-plugin/public/flyout/document_details/right/components/test_ids'; import { DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_HEADER, DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_VISUALIZATIONS_SECTION_HEADER, diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts index a0e81d1f244f7..2dc4447e75ffd 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts @@ -83,7 +83,7 @@ import { TIMELINE_QUERY, PROVIDER_BADGE, PROVIDER_BADGE_DELETE, - DISCOVER_TAB, + ESQL_TAB, OPEN_TIMELINE_MODAL_TIMELINE_NAMES, OPEN_TIMELINE_MODAL_SEARCH_BAR, OPEN_TIMELINE_MODAL, @@ -140,9 +140,9 @@ export const goToNotesTab = (): Cypress.Chainable> => { return cy.get(NOTES_TAB_BUTTON); }; -export const gotToDiscoverTab = () => { +export const gotToEsqlTab = () => { recurse( - () => cy.get(DISCOVER_TAB).click(), + () => cy.get(ESQL_TAB).should('be.visible').click({ force: true }), ($el) => expect($el).to.have.class('euiTab-isSelected'), { delay: 500, @@ -314,8 +314,8 @@ export const createNewTimeline = () => { cy.get(TIMELINE_SETTINGS_ICON).filter(':visible').click(); cy.get(TIMELINE_SETTINGS_ICON).should('be.visible'); // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(300); - cy.get(CREATE_NEW_TIMELINE).eq(0).should('be.visible').click(); + cy.wait(1000); + cy.get(CREATE_NEW_TIMELINE).eq(0).should('be.visible').click({ force: true }); }; export const openCreateTimelineOptionsPopover = () => { diff --git a/x-pack/test/security_solution_cypress/package.json b/x-pack/test/security_solution_cypress/package.json index dce7081c251dd..c434d5d7a4099 100644 --- a/x-pack/test/security_solution_cypress/package.json +++ b/x-pack/test/security_solution_cypress/package.json @@ -23,6 +23,7 @@ "cypress:open:serverless": "yarn cypress:serverless open --config-file ../../test/security_solution_cypress/cypress/cypress_serverless.config.ts --spec './cypress/e2e/**/*.cy.ts'", "cypress:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/!(investigations|explore)/**/*.cy.ts'", "cypress:run:cloud:serverless": "yarn cypress:cloud:serverless run --config-file ./cypress/cypress_ci_serverless.config.ts --env CLOUD_SERVERLESS=true", + "cypress:run:qa:serverless": "yarn cypress:cloud:serverless run --config-file ./cypress/cypress_ci_serverless_qa.config.ts --env CLOUD_SERVERLESS=true", "cypress:investigations:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/investigations/**/*.cy.ts'", "cypress:explore:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/explore/**/*.cy.ts'", "cypress:changed-specs-only:serverless": "yarn cypress:serverless --changed-specs-only --env burn=5", diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 5da72a7c99d5f..7d29b3794ac8a 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -126,7 +126,6 @@ "@kbn/maps-vector-tile-utils", "@kbn/server-route-repository", "@kbn/core-http-common", - "@kbn/slo-schema", "@kbn/lens-plugin", "@kbn/notifications-plugin", "@kbn/logs-shared-plugin", diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts index 4367656feae60..9585819a7ffe6 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Alerting APIs', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./rules')); loadTestFile(require.resolve('./alert_documents')); loadTestFile(require.resolve('./summary_actions')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/core/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/core/index.ts index f55f77bd7e6ab..aa847e0c0ecea 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/core/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/core/index.ts @@ -8,7 +8,9 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('core', () => { + describe('core', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./compression')); loadTestFile(require.resolve('./translations')); loadTestFile(require.resolve('./capabilities')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/data_view_field_editor/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/data_view_field_editor/index.ts index 561b4798d2c28..7998f8b63f92c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/data_view_field_editor/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/data_view_field_editor/index.ts @@ -8,7 +8,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('index pattern field editor', () => { + describe('index pattern field editor', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./field_preview')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/data_views/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/data_views/index.ts index eb25b2530a5e7..dafe36565a8fe 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/data_views/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/data_views/index.ts @@ -8,7 +8,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('index_patterns', () => { + describe('index_patterns', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./es_errors')); loadTestFile(require.resolve('./fields_for_wildcard_route')); loadTestFile(require.resolve('./data_views_crud')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/elasticsearch_api/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/elasticsearch_api/index.ts index 0d53235d8e0b6..aafab33abb587 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/elasticsearch_api/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/elasticsearch_api/index.ts @@ -8,7 +8,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('Elasticsearch API', () => { + describe('Elasticsearch API', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./home')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index.ts index cf0bf24cb99b4..7dff563bf43b3 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Index Management APIs', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./index_templates')); loadTestFile(require.resolve('./indices')); loadTestFile(require.resolve('./create_enrich_policies')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/kql_telemetry/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/kql_telemetry/index.ts index 07b76ff08e58c..8a832ef82169e 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/kql_telemetry/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/kql_telemetry/index.ts @@ -8,7 +8,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('KQL', () => { + describe('KQL', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./kql_telemetry')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/management/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/management/index.ts index 9c634b7f5590f..73e79c6a199fb 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/management/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/management/index.ts @@ -8,7 +8,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('Management', () => { + describe('Management', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./ingest_pipelines')); loadTestFile(require.resolve('./rollups')); loadTestFile(require.resolve('./scripted_fields')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/index.ts index 8297aa53bfc6b..8d5970aa843ac 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('serverless common API', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./anonymous')); loadTestFile(require.resolve('./api_keys')); loadTestFile(require.resolve('./authentication')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts index 12efd676636e9..b934d8cf178a6 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default ({ loadTestFile }: FtrProviderContext) => { describe('Reporting', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./management')); loadTestFile(require.resolve('./generate_csv_discover')); loadTestFile(require.resolve('./download_csv_dashboard')); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts index ca9bdd44aadfb..309a56b2296e7 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts @@ -23,6 +23,9 @@ export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertestWithoutAuth'); describe('Reporting Management', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.reporting-2020.04.19], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + const dataArchive = 'x-pack/test/functional/es_archives/reporting/archived_reports'; beforeEach(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/scripts_tests/index.js b/x-pack/test_serverless/api_integration/test_suites/common/scripts_tests/index.js index d1eeb009a7cce..e6dae2f948174 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/scripts_tests/index.js +++ b/x-pack/test_serverless/api_integration/test_suites/common/scripts_tests/index.js @@ -8,7 +8,9 @@ export default function ({ loadTestFile }) { // TODO: The `scripts` folder was renamed to `scripts_tests` because the folder // name `scripts` triggers the `eslint@kbn/imports/no_boundary_crossing` rule - describe('scripts', () => { + describe('scripts', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./languages')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts index 598493bfd2182..79ff29fdf9f22 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts @@ -10,7 +10,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { // TODO: This `search` folder was renamed to `search_oss` to // differentiate it from the x-pack `search` folder (now `search_xpack`) - describe('search', () => { + describe('search', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./search')); // TODO: Removed `sql_search` since // SQL is not supported in Serverless diff --git a/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/index.ts index fc433f4655977..e832bc22d2fda 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/search_xpack/index.ts @@ -10,7 +10,9 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { // TODO: This `search` folder was renamed to `search_xpack` to // differentiate it from the oss `search` folder (now `search_oss`) - describe('search', () => { + describe('search', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./search')); // TODO: Removed `session` since search // sessions are not supported in Serverless diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts b/x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts index bedcfb3889b00..06fb7e5682ea3 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts @@ -20,7 +20,10 @@ export default createTestConfig({ suiteTags: { exclude: ['skipSvlOblt'] }, services, // add feature flags - kbnServerArgs: ['--xpack.observability.unsafe.thresholdRule.enabled=true'], + kbnServerArgs: [ + '--xpack.observability.unsafe.thresholdRule.enabled=true', + '--xpack.infra.enabled=true', + ], // load tests in the index file testFiles: [require.resolve('./index.feature_flags.ts')], diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/config.ts index a9484f1aee7bf..9901c9736b9aa 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/config.ts @@ -20,5 +20,4 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml esServerArgs: ['xpack.ml.dfa.enabled=false', 'xpack.ml.nlp.enabled=false'], - kbnServerArgs: ['--xpack.infra.enabled=true'], }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts b/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts index a3a5ab552ee3f..aaaf1b706fb9d 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts @@ -10,5 +10,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless observability API - feature flags', function () { loadTestFile(require.resolve('./custom_threshold_rule')); + loadTestFile(require.resolve('./infra')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/index.ts index 9ff9af85e855b..72cb01c03fd2f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/index.ts @@ -9,11 +9,12 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless observability API', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./fleet/fleet')); loadTestFile(require.resolve('./telemetry/snapshot_telemetry')); loadTestFile(require.resolve('./telemetry/telemetry_config')); loadTestFile(require.resolve('./apm_api_integration/feature_flags.ts')); loadTestFile(require.resolve('./cases')); - loadTestFile(require.resolve('./infra')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/infra/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/infra/index.ts index 7769ffa652e6f..9ab20b80205d7 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/infra/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/infra/index.ts @@ -5,10 +5,14 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Infra UI', function () { + // all these tests are failing on MKI: + // Error: expected 200 "OK", got 404 "Not Found" + this.tags(['failsOnMKI']); + loadTestFile(require.resolve('./metadata')); loadTestFile(require.resolve('./snapshot')); loadTestFile(require.resolve('./processes')); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/snapshot_telemetry.ts b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/snapshot_telemetry.ts index f0fc2a357156e..f6f2d63d566bc 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/snapshot_telemetry.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/snapshot_telemetry.ts @@ -18,7 +18,8 @@ import type { UsageStatsPayloadTestFriendly } from '../../../../../test/api_inte export default function ({ getService }: FtrProviderContext) { const usageApi = getService('usageAPI'); - describe('Snapshot telemetry', function () { + // FLAKY: https://github.com/elastic/kibana/issues/168625 + describe.skip('Snapshot telemetry', function () { let stats: UsageStatsPayloadTestFriendly; before(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts b/x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts index d56585c4634f9..ad5a651179e32 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts @@ -24,5 +24,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/api_integration/test_suites/search/config.ts b/x-pack/test_serverless/api_integration/test_suites/search/config.ts index 7afde0944020c..4d0445a99a3e6 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/config.ts @@ -17,5 +17,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/api_integration/test_suites/search/index.ts b/x-pack/test_serverless/api_integration/test_suites/search/index.ts index ff29a499c6eab..c81c324ea15bd 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/index.ts @@ -9,9 +9,12 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless search API', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./telemetry/snapshot_telemetry')); loadTestFile(require.resolve('./telemetry/telemetry_config')); loadTestFile(require.resolve('./cases/find_cases')); loadTestFile(require.resolve('./cases/post_case')); + loadTestFile(require.resolve('./serverless_search')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts new file mode 100644 index 0000000000000..d22d6fc8360ce --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/api_key.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { kibanaTestUser } from '@kbn/test'; +import { SecurityApiKey } from '@elastic/elasticsearch/lib/api/types'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const API_BASE_PATH = '/internal/serverless_search'; + +export default function ({ getService }: FtrProviderContext) { + const svlCommonApi = getService('svlCommonApi'); + const supertest = getService('supertest'); + const es = getService('es'); + const log = getService('log'); + + describe('API Key routes', function () { + describe('GET api_keys', function () { + it('return apiKeys', async () => { + const { body } = await supertest + .get(`${API_BASE_PATH}/api_keys`) + .set(svlCommonApi.getInternalRequestHeader()) + .expect(200); + + expect(body).toBeDefined(); + expect(body.apiKeys).toBeDefined(); + expect(Array.isArray(body.apiKeys)).toBe(true); + }); + }); + + describe('POST api_key', function () { + const deleteAllApiKeys = async () => { + let apiKeys: SecurityApiKey[]; + // Delete existing API keys + try { + const apiKeysResult = await es.security.getApiKey({ username: kibanaTestUser.username }); + apiKeys = apiKeysResult.api_keys; + } catch (err) { + log.debug('[Setup error] error listing API keys'); + throw err; + } + + expect(Array.isArray(apiKeys)).toBe(true); + if (apiKeys.length === 0) { + return; + } + + const apiKeysToDelete = apiKeys.map(({ id }) => id); + await es.security.invalidateApiKey({ ids: apiKeysToDelete }); + }; + before(async () => { + await deleteAllApiKeys(); + }); + after(async () => { + await deleteAllApiKeys(); + }); + it('can create a key that expires', async () => { + const createBody = { + name: 'test-api-key-001', + expiration: '60d', + }; + const { body } = await supertest + .post(`${API_BASE_PATH}/api_key`) + .set(svlCommonApi.getInternalRequestHeader()) + .send(createBody) + .expect(200); + + expect(body).toMatchObject({ name: 'test-api-key-001', expiration: expect.anything() }); + }); + it('can create a key that never expires', async () => { + const createBody = { + name: 'test-api-key-002', + }; + const { body } = await supertest + .post(`${API_BASE_PATH}/api_key`) + .set(svlCommonApi.getInternalRequestHeader()) + .send(createBody) + .expect(200); + + expect(body).toMatchObject({ name: 'test-api-key-002' }); + }); + it('has beats_logstash_format in result', async () => { + const createBody = { + name: 'test-api-key-003', + }; + const { body } = await supertest + .post(`${API_BASE_PATH}/api_key`) + .set(svlCommonApi.getInternalRequestHeader()) + .send(createBody) + .expect(200); + + expect(body).toMatchObject({ + name: 'test-api-key-003', + beats_logstash_format: expect.stringContaining(':'), + }); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts new file mode 100644 index 0000000000000..ac7ddcf5372f5 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/connectors.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const API_BASE_PATH = '/internal/serverless_search'; + +export default function ({ getService }: FtrProviderContext) { + const svlCommonApi = getService('svlCommonApi'); + const supertest = getService('supertest'); + + describe('Connectors routes', function () { + describe('GET connectors', function () { + it('returns list of connectors', async () => { + const { body } = await supertest + .get(`${API_BASE_PATH}/connectors`) + .set(svlCommonApi.getInternalRequestHeader()) + .expect(200); + + expect(body.connectors).toBeDefined(); + expect(Array.isArray(body.connectors)).toBe(true); + }); + }); + describe('GET connectors', function () { + it('returns list of connector_types', async () => { + const { body } = await supertest + .get(`${API_BASE_PATH}/connector_types`) + .set(svlCommonApi.getInternalRequestHeader()) + .expect(200); + + expect(body.connectors).toBeDefined(); + expect(Array.isArray(body.connectors)).toBe(true); + expect(body.connectors.length).toBeGreaterThan(0); + }); + }); + }); +} diff --git a/x-pack/test/observability_api_integration/apis/composite_slo/index.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/index.ts similarity index 54% rename from x-pack/test/observability_api_integration/apis/composite_slo/index.ts rename to x-pack/test_serverless/api_integration/test_suites/search/serverless_search/index.ts index bc7f0a5362cb8..dd80cb7f5342d 100644 --- a/x-pack/test/observability_api_integration/apis/composite_slo/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/index.ts @@ -5,12 +5,12 @@ * 2.0. */ -import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('composite_slo', () => { - loadTestFile(require.resolve('./create')); - loadTestFile(require.resolve('./delete')); - loadTestFile(require.resolve('./update')); + describe('Serverless Search - Server', function () { + loadTestFile(require.resolve('./api_key')); + loadTestFile(require.resolve('./connectors')); + loadTestFile(require.resolve('./indices')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts new file mode 100644 index 0000000000000..a387f6e7e320e --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/search/serverless_search/indices.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const API_BASE_PATH = '/internal/serverless_search'; + +export default function ({ getService }: FtrProviderContext) { + const svlCommonApi = getService('svlCommonApi'); + const supertest = getService('supertest'); + + describe('Indices routes', function () { + describe('GET indices', function () { + it('has route', async () => { + const { body } = await supertest + .get(`${API_BASE_PATH}/indices`) + .set(svlCommonApi.getInternalRequestHeader()) + .expect(200); + + expect(body).toBeDefined(); + }); + it('accepts search_query', async () => { + await supertest + .get(`${API_BASE_PATH}/indices`) + .set(svlCommonApi.getInternalRequestHeader()) + .query({ search_query: 'foo' }) + .expect(200); + }); + it('accepts from & size', async () => { + await supertest + .get(`${API_BASE_PATH}/indices`) + .set(svlCommonApi.getInternalRequestHeader()) + .query({ from: 0, size: 10 }) + .expect(200); + }); + }); + }); +} diff --git a/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts index 8df4bae9df5a0..ad523c6be982f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/telemetry/telemetry_config.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { expect } from 'expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function telemetryConfigTest({ getService }: FtrProviderContext) { @@ -23,30 +24,34 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) }; it('GET should get the default config', async () => { - await supertest + const { body } = await supertest .get('/api/telemetry/v2/config') .set(svlCommonApi.getCommonRequestHeader()) - .expect(200, baseConfig); + .expect(200); + + expect(body).toMatchObject(baseConfig); }); it('GET should get updated labels after dynamically updating them', async () => { + const uniqueJourneyName = `my-ftr-test-${new Date().getMilliseconds()}`; await supertest .put('/internal/core/_settings') .set(svlCommonApi.getInternalRequestHeader()) .set('elastic-api-version', '1') - .send({ 'telemetry.labels.journeyName': 'my-ftr-test' }) + .send({ 'telemetry.labels.journeyName': uniqueJourneyName }) .expect(200, { ok: true }); - await supertest + const { body } = await supertest .get('/api/telemetry/v2/config') .set(svlCommonApi.getCommonRequestHeader()) - .expect(200, { - ...baseConfig, - labels: { - ...baseConfig.labels, - journeyName: 'my-ftr-test', - }, - }); + .expect(200); + expect(body).toMatchObject({ + ...baseConfig, + labels: { + ...baseConfig.labels, + journeyName: uniqueJourneyName, + }, + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark.ts index a0fd49e24e34a..53802db8caf3d 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark.ts @@ -18,7 +18,10 @@ export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('GET /internal/cloud_security_posture/benchmark', () => { + describe('GET /internal/cloud_security_posture/benchmark', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; let agentPolicyId2: string; let agentPolicyId3: string; diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/get_csp_rule_template.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/get_csp_rule_template.ts index 0e8734b7b0cd6..19208865deb5c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/get_csp_rule_template.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/get_csp_rule_template.ts @@ -19,7 +19,10 @@ export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('GET internal/cloud_security_posture/rules/_find', () => { + describe('GET internal/cloud_security_posture/rules/_find', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; beforeEach(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts index f31d295db631d..ace5eef6a5499 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts @@ -41,7 +41,10 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('GET /internal/cloud_security_posture/status', () => { + describe('GET /internal/cloud_security_posture/status', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; describe('STATUS = INDEXED TEST', () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts index 7c7f342170c4c..316fb54f829c6 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts @@ -41,7 +41,10 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('GET /internal/cloud_security_posture/status', () => { + describe('GET /internal/cloud_security_posture/status', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; describe('STATUS = INDEXING TEST', () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts index a797f47eef787..ac516bc68434c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts @@ -19,7 +19,10 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - describe('GET /internal/cloud_security_posture/status', () => { + describe('GET /internal/cloud_security_posture/status', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST', () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts index aa189472eebcc..155d85dc0f06c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts @@ -61,7 +61,10 @@ export default function ({ getService }: FtrProviderContext) { }, }; - describe('Verify cloud_security_posture telemetry payloads', async () => { + describe('Verify cloud_security_posture telemetry payloads', function () { + // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.fleet-actions-7], this action is granted by the index privileges [create_index,manage,all] + this.tags(['failsOnMKI']); + let agentPolicyId: string; before(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/index.ts b/x-pack/test_serverless/api_integration/test_suites/security/index.ts index 5d637ee78b58d..e439cf8b76e8b 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/index.ts @@ -9,6 +9,8 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless security API', function () { + this.tags(['esGate']); + loadTestFile(require.resolve('./telemetry/snapshot_telemetry')); loadTestFile(require.resolve('./telemetry/telemetry_config')); loadTestFile(require.resolve('./fleet/fleet')); diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/search/warnings.ts b/x-pack/test_serverless/functional/test_suites/common/examples/search/warnings.ts index 694d1ed335c22..ff24321f11348 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/search/warnings.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/search/warnings.ts @@ -107,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { const toasts = await find.allByCssSelector(toastsSelector); expect(toasts.length).to.be(2); - const expects = ['The data might be incomplete or wrong.', 'Query result']; + const expects = ['Results are partial and may be incomplete.', 'Query result']; await asyncForEach(toasts, async (t, index) => { expect(await t.getVisibleText()).to.eql(expects[index]); }); @@ -164,7 +164,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { toasts = await find.allByCssSelector(toastsSelector); expect(toasts.length).to.be(2); - const expects = ['The data might be incomplete or wrong.', 'Query result']; + const expects = ['Results are partial and may be incomplete.', 'Query result']; await asyncForEach(toasts, async (t, index) => { expect(await t.getVisibleText()).to.eql(expects[index]); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index 3ed07084edd8c..f63ce94ead3fe 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -21,14 +21,24 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const find = getService('find'); describe('Configure Case', function () { - // Error: timed out waiting for assertRadioGroupValue: Expected the radio group value to equal "close-by-pushing" + // security_exception: action [indices:data/write/delete/byquery] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.kibana_alerting_cases], this action is granted by the index privileges [delete,write,all] this.tags(['failsOnMKI']); before(async () => { await svlCommonPage.login(); await svlObltNavigation.navigateToLandingPage(); await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'observability-overview:cases' }); + await header.waitUntilLoadingHasFinished(); + + await retry.waitFor('configure-case-button exist', async () => { + return await testSubjects.exists('configure-case-button'); + }); + await common.clickAndValidate('configure-case-button', 'case-configure-title'); await header.waitUntilLoadingHasFinished(); + + await retry.waitFor('case-configure-title exist', async () => { + return await testSubjects.exists('case-configure-title'); + }); }); after(async () => { @@ -36,8 +46,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await svlCommonPage.forceLogout(); }); - // FLAKY: https://github.com/elastic/kibana/issues/166469 - describe.skip('Closure options', function () { + describe('Closure options', function () { it('defaults the closure option correctly', async () => { await cases.common.assertRadioGroupValue('closure-options-radio-group', 'close-by-user'); }); @@ -50,8 +59,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/167869 - describe.skip('Connectors', function () { + describe('Connectors', function () { it('defaults the connector to none correctly', async () => { await retry.waitFor('dropdown-connector-no-connector to exist', async () => { return await testSubjects.exists('dropdown-connector-no-connector'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/config.ts b/x-pack/test_serverless/functional/test_suites/observability/config.ts index 57e6894e3b892..bdfff52de245f 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/config.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/config.ts @@ -18,5 +18,9 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml esServerArgs: ['xpack.ml.dfa.enabled=false', 'xpack.ml.nlp.enabled=false'], - kbnServerArgs: ['--xpack.infra.enabled=true'], + kbnServerArgs: [ + '--xpack.infra.enabled=true', + '--xpack.infra.featureFlags.customThresholdAlertsEnabled=true', + '--xpack.observability.unsafe.thresholdRule.enabled=true', + ], }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts index 57b636efa6a75..278da0f02d1d7 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts @@ -35,7 +35,6 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { // check side nav links await svlCommonNavigation.sidenav.expectSectionOpen('observability_project_nav'); - await svlCommonNavigation.sidenav.expectLinkActive({ deepLinkId: 'observabilityOnboarding' }); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ deepLinkId: 'observabilityOnboarding', }); @@ -68,7 +67,6 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { // navigate back to serverless oblt overview await svlCommonNavigation.breadcrumbs.clickHome(); - await svlCommonNavigation.sidenav.expectLinkActive({ deepLinkId: 'observabilityOnboarding' }); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ deepLinkId: 'observabilityOnboarding', }); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.examples.ts b/x-pack/test_serverless/functional/test_suites/search/config.examples.ts index 67c77ac423844..0d30d29ab2a9f 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.examples.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.examples.ts @@ -23,5 +23,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts index 9d9663be9230f..dc109ec9705f9 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts @@ -24,5 +24,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts index 3a8966904b5c9..f146583710057 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts @@ -19,5 +19,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.ts b/x-pack/test_serverless/functional/test_suites/search/config.ts index 5e0168a7c530d..c2171c532bf23 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.ts @@ -17,5 +17,5 @@ export default createTestConfig({ // include settings from project controller // https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/elasticsearch.yml - esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], + esServerArgs: [], }); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts index 5c71abf3ad7ba..19cd7a3ccdce0 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts @@ -26,8 +26,18 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await svlCommonPage.login(); await svlSecNavigation.navigateToLandingPage(); await testSubjects.click('solutionSideNavItemLink-cases'); + await header.waitUntilLoadingHasFinished(); + + await retry.waitFor('configure-case-button exist', async () => { + return await testSubjects.exists('configure-case-button'); + }); + await common.clickAndValidate('configure-case-button', 'case-configure-title'); await header.waitUntilLoadingHasFinished(); + + await retry.waitFor('case-configure-title exist', async () => { + return await testSubjects.exists('case-configure-title'); + }); }); after(async () => { @@ -36,8 +46,6 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('Closure options', function () { - // Error: Expected the radio group value to equal "close-by-pushing" (got "close-by-user") - this.tags(['failsOnMKI']); it('defaults the closure option correctly', async () => { await cases.common.assertRadioGroupValue('closure-options-radio-group', 'close-by-user'); });